SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webアプリケーション開発技術の新潮流スタディーズ

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には次表の内容が含まれます。

Initiatorの接続要求(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層について解説します。 お楽しみに。

修正履歴

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Webアプリケーション開発技術の新潮流スタディーズ連載記事一覧

もっと読む

この記事の著者

鳥居 陽介(株式会社ワークスアプリケーションズ)(トリイ ヨウスケ)

株式会社ワークスアプリケーションズ所属。イケてるアプリケーションを死ぬほど楽に作るために研究を続ける日々。社内での立ち位置は「フロントエンドのナウい人」。最近エバンジェリストという肩書きが付いた。趣味は作曲とスノーボード。 Blog: http://jinjor-labo.hatenablog.com/ ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9287 2016/06/14 15:17

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー