Bluetooth Low EnergyのConnection Parameter(★)

[BLE(Bluetooth Low Energy)の開発依頼は、フィールドデザインまでお気軽にお問い合わせください。]

ここでは、接続時のConnection Parameterについて説明します。


Connection Parameterの決め方

接続のパラメータであるConnection Parameterには、Connection Interval, Slave Latency, Supervision Timeoutがあります。
基本的には、マスターがLL_CONNECTION_UPDATE_IND(Link Layerのコマンド)を出したら、その値になります
(なお、LL_CONNECTION_UPDATE_INDは、かつて、LL_CONNECTION_UPDATE_REQという名称だったのですが、ver5.0から名称変更になりました。混乱しやすい点です)。
スレーブは、その値を受け入れるしかなく、対応できない場合は切断するしかありません。

ただし、マスターが決定する前に、スレーブからの要求も聞き入れる手段があります。
Connection Parameter Update Procedure(Ver4.0から存在)とConnection Parameters Request Procedure(ver4.1から導入)です。
同じような名称で非常にわかりにくいです。


Connection Parameter Update Procedureについて

Connection Parameter Update Procedureは、L2CAPによるConnection Parameterのネゴシエーションで、ver4.0から存在するものです
(LinkLayerのパラメータを決めるのに、L2CAPを使う点が気持ち悪いです)。
スレーブがConnection Parameterの要求(L2CAP CONNECTION PARAMETER UPDATE REQUEST)をマスターに送るというものです。
設定して欲しい最小・最大のConnection Intervalと、Slave Latencyの値を送ります。
Masterが要求を受け入れるならAcceptを返し、拒否するならRejectをL2CAP CONNECTION PARAMETER UPDATE RESPONSEにて返します。
その後、マスターがLL_CONNECTION_UPDATE_INDにて、Connection Parameterを決定します。


Connection Parameters Request Procedureについて

Connection Parameters Request Procedureは、LinkLayerによるConnection Parameterのネゴシエーションで、ver4.1から導入されたものです。
LL_CONNECTION_PARAM_REQ/LL_CONNECTION_PARAM_RSP/LL_REJECT_EXT_INDのパケットを使い行います。
サポートしているかどうかは、LL_FEATURE_REQ/LL_FEATURE_RSPにて確認します。

手順としては、下記になります。

  • マスターが、LL_CONNECTION_PARAM_REQを送った場合は、スレーブがLL_CONNECTION_PARAM_RSP/LL_REJECT_EXT_INDで応えるというものです。その後、マスターがLL_CONNECTION_UPDATE_INDにて、Connection Parameterを決定します。
  • スレーブが、LL_CONNECTION_PARAM_REQを送った場合は、マスターがLL_CONNECTION_UPDATE_IND/LL_REJECT_EXT_INDで応えるというものです。

いずれにしても、マスターがLL_CONNECTION_UPDATE_INDにて、Connection Parameterを決定します。


どの順番で行うか

一般的には、ver4.1以降では、下記のような手順になります。

  1. まず、LL_FEATURE_REQ/LL_FEATURE_RSPにて、Connection Parameters Request Procedureがサポートされているかを確認します。
  2. お互いにサポートしているなら、Connection Parameters Request Procedureを行います。
  3. マスターがサポートしてないなら、マスターがLL_CONNECTION_UPDATE_INDで強制的にConnection Parameterを決定します。
  4. スレーブがサポートしてないなら、スレーブはL2CAPのConnection Parameter Update Procedureを開始します。

ただし、たまに、L2CAPのネゴシエーションとLinkLayerのネゴシエーションが混ざるケースもあるので注意が必要です。