IoT技術の代表「BLE:Bluetooth Low Energy」の動作原理を理解してみよう【前編】
Webアプリケーション開発技術の新潮流スタディーズ 第6回
Controller層(続き)
接続開始
Scanが終わると、ScannerはInitiatorとなります。 InitiatorはAdvertiserから再度Advertisingパケットを受信したタイミングで、これに返信する形で接続要求をAdvertiserに送ります。
接続後はInitiatorがMasterに、AdvertiserがSlaveとなり、Master側が通信の主導権を得ます。以降、マスターとスレーブは一定の間隔を置いて送受信を繰り返すことでデータをやり取りします。
図中にいくつか示されているパラメータは、Initiatorの接続要求(CONNECT_REQ)によって決められます。 CONNECT_REQには次表の内容が含まれます。
| パラメータ | 意味 |
|---|---|
|
AA (Access Address) |
接続後のアクセスアドレス |
| CRCInit | CRC[2]チェックサム計算の初期値 |
|
WinSize (transmitWindowSize) |
1.25ミリ秒単位の送信ウインドウサイズ |
|
WinOffset (transmitWindowOffsetvalue) |
1.25ミリ秒単位の送信ウインドウオフセット |
|
Interval (connInterval) |
データパケットをやり取りする周期。1.25ミリ秒単位で、7.5ミリ秒以上4.0秒以下 |
|
Latency (connSlaveLatency) |
スレーブがマスターの接続要求を無視できる回数。値の範囲は0 ~ 499 |
|
Timeout (connSupervisionTimeout) |
接続を確認できない時間がこの値を超えたとき、接続が中断したと判断する |
| ChM | チャンネルマップ。データチャンネル(0 ~ 36)のうち使用するものをビットの1/0で表す |
| Hop | 37個のデータチャンネルをこの値ずつずらして切り替える。値は5 ~ 16の範囲でランダムに決められる |
| SCA | マスターのスリープクロックの精度。スレーブが受信タイミングを同期する際に、この分だけ前倒しで動作を開始する |
省電力を考えるために、connIntervalとconnSlaveLatencyの設定は特に重要です。スレーブはconnIntervalの周期に合わせて受信回路を動かします。この間隔が短いほど高頻度で通信できますが、電力消費は大きくなります。
また、スレーブは自身に返送できるデータを持っていない場合にconnSlaveLatencyの回数だけマスタの要求を無視できます。無視している間は受信回路を動かさなくて済むため、スレーブの電力消費を大幅に小さくできます。
connSlaveLatencyによって、実質的な接続間隔はconnIntervalの(connSlaveLatency+1)倍になります。これをEffective Connection Interval(実効接続インターバル)といい、connSupervisionTimeoutの半分以下にする必要があります。
注
[2]: 巡回冗長検査。誤り検出符号の一種で、主にデータ転送などに伴う偶発的な誤りの検出によく使われている(Wikipediaより抜粋)。
接続確立後の通信
接続開始後はData Channel(0~36チャンネル)を用いてパケットをやり取りします。
Data Channelパケットの種類
Data Channelのパケットには次の3種類があります。
- LL Data PDU (Continuation)
- LL Data PDU (Start)
- LL Control PDU
LL Data PDUは上位層で必要となるデータを複数のパケット分割したものです。 連続するパケットのうち最初のものがStartで、残りはすべてContinuationです。
また、LL Control PDUは通信の状態を制御するために用いられます。 接続開始時にCONNECT_REQで設定した内容の更新や、エラー通知、暗号に関するものがあります。
パケット再送の仕組み
BLEでは信頼性のある通信のために各パケットにSN(Sequence Number)、NESN(Next Expected Sequence Number) という2つの値を持っています。SNとNESNは、それぞれ自分が送信するパケットのシーケンス番号と相手に次に送ってほしいパケットのシーケンス番号を表します。
例えば、マスターがSN=0のパケットをスレーブに送ったとします。スレーブはこのパケットを受信し、問題がなければ次のパケットを要求するためにNESN=1のパケットをマスターに送信します。マスターはこれを見て先ほど送信したSN=0のパケットがスレーブに届いたことを確認し、次はSN=1のパケットを送信します。
もし、スレーブが受信したパケットにビットエラーがあれば、スレーブはNESN=0のパケットを送信し、マスターにパケットの再送を要求します。同じ仕組みはフロー制御にも使えます。もしスレーブの処理が追いつかずバッファがあふれそうなときも同様に、NESN=0のパケットをマスターに送信することができます。
* * *
今回はBLE解説の前編として、BLEの概要と層状アーキテクチャのうちControllerについて解説しました。 次回は、Host層とApplication層について解説します。 お楽しみに。
- 修正履歴
-
- 2016/06/14 15:16 Adopterメンバーシップの特典の説明を修正いたしました: 使用料なしでBluetooth技術を利用可能 ⇒ 無料でBluetooth SIGが提供する技術情報にアクセス可能(製品化する際には技術ライセンス料が必要)
- 2016/06/14 15:15 Bluetooth SIGの推進企業名の誤りを修正いたしました: Agere、Ericsson、Intel、Lenovo、Microsoft、Motorola、Nokia、東芝 ⇒ Apple、Ericsson、Intel、Lenovo、Microsoft、Nokia、東芝
この記事は参考になりましたか?
既に会員の方はを行ってください。
- Webアプリケーション開発技術の新潮流スタディーズ連載記事一覧
-
- IoT技術の代表「BLE:Bluetooth Low Energy」の動作原理を理解してみ...
- IoT技術の代表「BLE:Bluetooth Low Energy」の動作原理を理解してみ...
- 関数型リアクティブプログラミング言語Elmに学ぶ フロントエンド開発の新しい形 【後編】
- この記事の著者
-
鳥居 陽介(株式会社ワークスアプリケーションズ)(トリイ ヨウスケ)
株式会社ワークスアプリケーションズ所属。イケてるアプリケーションを死ぬほど楽に作るために研究を続ける日々。社内での立ち位置は「フロントエンドのナウい人」。最近エバンジェリストという肩書きが付いた。趣味は作曲とスノーボード。 Blog: http://jinjor-labo.hatenablog.com/ ...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
