Bluetooth Low EnergyのL2CAPの解説

L2CAPとは

Logical Link Control and Adaptation Protocol、略してL2CAPは、上位のプロトコルレイヤに、プロトコル/チャネルのマルチプレクサを提供する、接続および非接続のデータサービスです。2つのデバイス間のデータ通信を提供するロジックレイヤを通じて、プロトコルごと、指定したチャネルごとに、それぞれ独立した通信を提供します。

L2CAPは64kバイトまでのペイロードを送信できます。ロジックレイヤのMTUよりも大きいですが、パケットの分割/再構成をして、これを送信します。

Bluetooth Low EnergyのL2CAP

Bluetooth Low Energyは、クラシックBluetoothのあとに統合された規格です。その統合時に、BLEでもL2CAPをつかうか、または別の仕組みを使うべきかの議論があったそうです。L2CAPを使うソフトウェア群をすでに持つ会社と、それを持たない会社に分かれて、技術内容を論文にまとめて論議した結果、L2CAPを使う事になりました。

/post/2013-02-11-ble-l2cap/ble_l2cap_format.jpg

リンクレイヤのデータチャネルのPDUに入る、L2CAPのフォーマットを示します。 それぞれ2オクテットの、レンクスとチャネルID、そしペイロードが続きます。BLEのL2CAPはパケットの分割/再構成を提供しません。そのため、ペイロードは最大23オクテットです。

BLEは、すぐ接続できる、少量のデータを読み書きする、すぐ切断できる、ことを特徴としています。 このために、BLEでは、L2CAPのチャネルは次の3チャネルに固定されています:

  • 0x0004 Attribute Protocol
  • 0x0005 LE signaling channel
  • 0x0006 Security Manager

Attribute Protocolは、BLEデバイスの値の読み書きを提供します。 Security Managerは通信の暗号化を提供します。

LE signaling channelは次の3つがあります:

  • Command Reject
  • Connection Parameter Update Request
  • Connection Parameter Update Response

iOSデバイスのBLEアクセサリの設計指針は、 スレーブからマスターへの通信パラメータの伝送は、L2CAPの接続パラメータアップデートで伝えるべきとしています。 レイテンシと電池消費量に合わせて、適切なパラメータを選びます。

このL2CAPのパラメータ更新は、例えばスレーブがマスターに初めて接続したときに、まとまった量のデータを一気に送信したい時に、インターバルを短くして、その後インターバルを長くすることで、短い時間でデータを送信しつつ、電池の消費量を抑えることができます。

このコマンドは、スレーブからマスターにパラメータ更新するときに有効です。マスターはリンクレイヤのパラメータ更新で、いつでもパラメータ更新ができます。

Bluetooth Low Energy リンクレイヤの解説

ここまでで、クラシックBTと比較したBLEの違いと特徴、そしてBLEの物理層を述べました。 ここでは、規格書をなぞる解説ではなく、iOSのアプリ開発とiOSと連携するBLEデバイス開発に役立てるための知識を提供する視点で、BLEのリンクレイヤを解説します。

リンクレイヤは、あるデバイスとあるデバイス間で、どうやって無線通信をするかを決めます。 リンクレイヤが定義するのは、パケット、アドバタイジングそしてデータチャネルです。 これらを使って、リンクレイヤは:

  • 他のデバイスの発見、
  • データのブロードキャスト、
  • 接続の確立と維持、
  • 接続を通したデータ通信、

を提供します。

BLEのトポロジー

BLEのネットワークは、1つのマスターに複数のスレーブが接続する、スター型のネットワークです。 1つのリンクレイヤが、同時にマスターかつスレーブになることはできません。

BLEのネットワークは、クラシックBluetoothのピコネットとは、違います。 クラシックBluetoothのピコネットは、 同期したクロック同じ周波数ホッピングの順番で、 同じ物理チャネルで通信するデバイス群です。1つのピコネットの複数あるスレーブは、1つだけあるマスターにクロックを同期して通信をします。 あるデバイスは複数のピコネットに同時に参加出来ます。 (Blluetooth specification Version 4.0 [Vol 1] 4.1.2 LE Topology)

LEのトポロジーを示します。デバイスAは、 デバイスBおよびCと接続しています。このときデバイスAは、master role(以下、マスター)、デバイスBとCがslave role(以下、スレーブ)を果たしています。 デバイスBとCは、全く何も同期しておらず、ただデバイスAとそれぞれが接続して通信をします。

BLEには、接続していなくても、アドバタイジングを使って情報をやり取りする仕組みがあります。 アドバタイジング・チャネルにアドバタイジング・パケットを創出するものをadvertiser、 アドバタイジング・チャネルをモニタして、アドバタイジング・パケットを受信するものをscannerといいます。 上図のデバイスDおよびEのように、すでに接続しているデバイスAおよびCは、マスター/スレーブどちらになっているかにかかわらず、 advertiserにもscannerにもなれます。またデバイスH, I, Jのように、アドバタイズメント・パケットだけで構築するネットワークもあります。

接続時、マスターが、スレーブとの接続と通信タイミングを制御します。 より多くのメモリと電池を必要とする機能をマスターに寄せて、スレーブに求めるメモリと電池の要求量を小さくする、非対称に役割をふることで、 スレーブの消費電力と製造コストがより小さくなります。

BLEのトポロジーでは、リンクレイヤが同時にマスターかつスレーブにはなれません。 クラシックBluetoothでは、同時にマスターかつスレーブとなりピコネット間をつなぐものをscatterと呼びます。BLEにscatterをサポートしません。

しかし、マスターからスレーブに役割を切り替えることができます。 Bluetooth Low Energyの半導体で、内蔵マイコンがリンクレイヤを制御しているものは、ファームウェアでスレーブかつマスターどちれにもなれるものがあります。

リンクレイヤのステート・マシーン

BLEのトポロジーを、振る舞いだけでみていると複雑なので、その振る舞いのもとになっているリンクレイヤのステート・マシーンという基本概念を説明します。 ステート・マシーンは、状態とその遷移でふるまいを表すモデルです。

/post/2013-02-07-ble-linklayer/statemachine.jpg

リンクレイヤは5つの状態があります。

  • Standby
    • 初期状態です。電波の送受信をしません。
  • Advertising
    • アドバタイズメント・チャネルでの、アドバタイズメント・パケットの送受信をします。
  • Scanning
    • スキャニングは、アドバタイジング・チャネルの電波を受信します。
    • スキャンには、パッシブスキャンとアクティブスキャンの2つがあります。
    • パッシブスキャンは、アドバタイジング・パケットを受信するだけです。
    • アクティブスキャンは、デバイスにSCAN_REQを送信して、アドバタイジング・パケットに収まりきらなかった情報をさらに取得します。
  • Initiating
    • 特定のデバイスからのアドバタイズメント・パケットの受信と、そのパケットへの応答をします。
  • Connection
    • 接続した状態です。

コネクション状態では、

  • Master role
  • Slave role

の2つの役割があります。Initiating stateからConnecting stateに遷移したものがMaster role、 Advertising stateからConnection stateに遷移したものがSlave roleです。

BLEデバイスのバッテリー

BLEはもともと超低消費電力かつ低コストを目標に作られた規格です。BLEの、電池への配慮を見てみます。

BLEデバイスの開発話をしていると、ときには極端に小さくしたいなど、 デバイスの大きさや形状の要望も出てくるでしょう。この時に、 回路面積は半導体素子を並べて実装可能な配置での基板面積から見積もれるでしょう。そして電池の選定です。それには、回路と電池の両方の知識が必要です。

電池の選定で肝心なのは、 連続稼働時間に必要な電池容量と、ピーク電流がとれるか、の2つです。

電池の大きさは、容量と面積の2つがあります。容量が小さくなれば、当然、 電源容量が小さくなりBLEデバイスの連続稼働時間が小さくなります。そして面積が小さくなりすぎると、BLEデバイスが無線通信をするために必要な、ピーク電流、が取れなくなり回路の正常動作に影響を与えます。

連続稼働時間の目安は、1mAhで1日から2日、と覚えておきます。

BLEによく使われるのが、CR2032という電池です。 この電池の特性を見てみます。

/post/2013-02-06-ble-battery/ble_battery.jpg

カタログが、 http://industrial.panasonic.com/www-cgi/jvcr13pz.cgi?J+BA+4+AAA4003+CR2032+8+JP にあります。

型番の先頭2文字は、電池の種類と形状を表します。Cは、二酸化マンガンリチウム電池(3.0 V)、形状は円形です。電池の電圧は電極材料で一意に決まります。現在の半導体製造プロセスで作られる回路の動作電圧は、1.8 ~3.3Vです。この二酸化マンガンリチウム電池の3.0Vという電圧は、その範囲にちょうどあてはまり、使い勝手がよいのです。

CR2032の容量は220mAhです。負極にリチウムを使い、容積の割に電源容量が大きいので、BLEデバイスの連続動作時間をより長くするのに、適しています。この電源容量は、大きな電流を短時間流すことを繰り返したり、動作温度が高い/低いなど、使い方と利用環境で大きく変化するので、注意します。

CR2032は、電卓やPCのバックアップ電源に使われていて、スーパーやコンビニで買える、入手性が高い電池です。入手性の高さは、BLEデバイスの使い勝手のよさにつながります。

BLEの“超低消費電力”は、電波の送受信を短時間で終わらせて、後の時間はスリープ状態で電力を使わない、間欠動作で実現しています。平均すれば“超低消費電力”、なのです。

CR2032は、標準負荷が0.2mAですが、ピーク電流は20mAほど取れます。 電波の送受信では、半導体メーカによりますがだいたい~15mAの電流が短い時間(数ミリ秒程度)流れます。標準負荷は小さいですが、ピーク電流がとれるので、BLE回路に適します。

ちなみに、CR2032は、連続して電流を流そうとしても、内部抵抗が高くなり、最大電流が電池側で制限されます。フィジカル・コンピューティングでLEDの足でボタン電池をはさんで光らせるバッジをみかけますが、電流制限抵抗がなくてもLEDが連続点灯するのは、この電池の電流制限の特性のおかげです。

電池で電気回路を年単位で連続動作させるには、電気回路自体が“超低消費電力”であることと、電池の自己放電特性が優れている、2つが必要です。自己放電は、電池メーカごとの性能、そして温度に大きく影響されます。二酸化マンガンリチウム電池の自己放電率は、目安として、1%/年以下です。

BLEの物理層

Bluetooth Low Energy(以下、BLE)の物理層の話をします。物理層とは、無線通信であればどんな電波を出して、相互に情報をやり取りするのかを決める層です。

BLEのハードウェアを使うiOSアプリケーションを開発するから、物理的なことは知らなくてもいいのではと思われるかもしれません。 しかしBLEは無線通信を使うために、例えば:

  • WiFiが周囲にあっても通信ができるのか
  • iOSデバイスと同時に何台までBLEデバイスは接続できるのか
  • 展示会場でデモンストレーションをするときに周囲に多数のBLEデバイスがある場合でも、接続するのか

という、この状況でも動くのかという、振る舞いの質問を利用者からされます。その質問に答えるには、物理層の基本知識は必要です。

自分が開発する部分がアプリケーションだけであっても、 ハードウェアと連携するアプリケーションは、 利用者からみれば、 そのハードウェアとアプリケーション、2つをあわせて1つの製品になります。

確実に動かすための知識として、物理層を理解してください。

まとめ

電波の混信/干渉

BLEは2.4GHzのISM帯を使います。 この無線帯域はWiFiや電子レンジなど多くの機器が利用しています。 BLEは、周波数帯域を40個のチャンネルに分割して、干渉や混信するチャンネルを避ける適応周波数ホッピングという仕組みを使います。

同時何台まで接続できるか

規格では、制約はありません。実装依存です。 60台くらいは大丈夫っぽい?

接続距離は

規格は送信電力の最小と最大を規定しています。 それぞれの場合の通信距離は、見通しで、最大のとき50m程度、最小のとき2.5m程度、です。

仕様はどこにある

BLEの規格は、Bluetooth SIGから公開されています。 https://www.bluetooth.org/Technical/Specifications/adopted.htm のCore Version 4.0 Vol.6 がBLEの物理層からの規格を述べています。

2.4GHzISM帯を使います

BLEは2400MHzから2483.5MHzまでを使います。クラシックBTと同じ周波数範囲を使います。 BLEは、この周波数帯を2MHz幅 40個のチャンネルに分割して利用します。チャンネルごとの中間周波数fcは:

fc = 2402 + 2*k MHz, K=0,1 … 39

となります。例えばfcが2402MHzのチャンネルは、2401MHzから2403MHzまでの周波数を使います。

チャンネルは、周波数帯域を有効に使うための工夫です。例えば、 たくさんのBLEデバイスがあっても、それぞれが違うチャンネルを通信に使えば混信しません。

/post/2013-02-06-ble-phy-layler/ble_phy_02.jpg

BLEは、40のチャンネルのうち、3つをアドバタイズメント・チャンネルに、のこる37つをデータ・チャンネルに割り当てます。

アドバタイズメント・チャンネルは、BLEデバイスの発見と接続に使うチャンネルです。 BLEデバイスは、デバイスを発見するためのアドバタイズメント・パケットを、3つのアドバタイズメント・チャネルそれぞれで送信しています。 iOSデバイス(セントラル)は、デバイスを発見するとき(スキャンするとき)、この3つのアドバタイズメントを受信して、デバイスを発見します。 BLEデバイスを発見すれば、データ通信に必要な接続処理をおこない、データ通信は、37つのデータ・チャネルを次々に切り替えながら、通信を続けます。

データ・チャンネルは、文字通り、データ通信につかうチャンネルです。 BLEは、適応周波数ホッピング方式をとっています。これは一定時間ごとにデータ通信につかうチャンネルを、ランダムな計算式で、 切り替えていく方式です。2.4GHz帯は、BLEだけではなくWiFiや電子レンジなど、様々な電波が飛び交っています。上図のように、もしもあるデータ・チャンネルが運悪くWiFiとぶつかり通信ができなくても、次の通信の機会でそのWiFiと重なっていないデータ・チャンネルに切り替われば、データ通信が継続出来ます。

BLEの適応周波数ホッピングの“適応”は、どのデータ・チャネルを使うかを、指定できる機能を指しています。例えば、WiFi チャネル1が使われているとわかっているならば、そこと重なるチャンネルは、そもそも使わないようにできれば、通信ができない状態を避けられます。

デバイスが発見できることは、とても重要です。 アドバタイズメント・チャネルは、上図の、37, 38, および39チャネルです。 2.4GMHzのWiFiの1, 6, 11チャネルと重ならならないチャンネルから、周波数帯域の下端/上端/真ん中の、なるべく周波数が離れたチャンネルを、 アドバタイズメント・チャンネルに割り当てています。

到達距離は見通し50mくらいです

BLEの送信電力は、最小 0.01mW (-20dBm) ~ 最大 10mW (+10dBm)です。一般のBLEの半導体の受信感度(0.1% ビットエラー)は-90dBmです。

BLE モジュールリスト

モジュールは、通信機能を1つの小さい基板にまとめたもので、 製品の基本回路部分に無線通信機能を追加するときによく使われます。

高周波を送受信する回路は、特性を確保するために回路基板設計に特別の配慮がいること、また電波法や通信規格の認証が必要になります。そこで、それらをモジュールに盛り込み、そのモジュールを製品基板に搭載することで、それらの厄介な部分にかかわらず、製品が設計できるメリットが得られます。

ここでは、どのようにモジュールを選ぶかを、実際のモジュールのリストとともに解説します。次に、モジュールを使わず自社で設計するメリットはどこにあるのかを述べます。

まとめ

  • iPhone 4以前の機種
    • Bluetooth2.0 (クラシックBluetooth)
    • MFi を取得して、クラシックBluetooth SPPで開発。
    • 電池交換、もしくは充電電池内蔵が必要。連続動作時間は1週間程度。
  • iPhone 4S以降の機種(Bluetooth4)
    • MFi取得でSPP、またはBLEで開発。
    • BLEならば、コイン型電池で1年程度の連続動作。
  • Android
    • Bluetooth2,3とBluetooth4を搭載したものが混在。
    • クラシック Bluetooth SPPで開発
  • WindowsPhone8
    • Androidと同様。

ます。携帯端末として、iPhone/iPadのiOS、Android、Windows Phone8を考えます。それぞれの端末は:

  • iPhone/iPad
    • iPhone 4以前の機種: Bluetooth2.0 (クラシックBluetooth) → MFi を取得して、SPPで開発。
    • iPhone 4S以降の機種: Bluetooth4 (クラシックBluetooth + Low Energy) → MFi取得でSPP、またはBLEで開発。
  • Android → SPPで開発。
    • Bluetooth2,3とBluetooth4を搭載したものが混在。
    • Bluetooth Low Energyのプロトコルスタックは、ハードウェア・メーカが独自に提供している状態で、Googleから公式のLow Energyのプロトコルスタックは出ていない。
  • WindowsPhone8 → SPPで開発。機種がBluetooth4ならばBLEが使える。
    • Android同様、クラシックBluetoothとBluetooth4が混在。 Bluetoothを搭載したAndroid に対応

Bluetoothのモジュールには、デュアルモードとシングルモード、の2種類があります:

  • デュアルモード: 超低消費電力ではないが、Bluetooth機器全てとつながる
    • クラシックBluetoothとLow Energyを両方搭載したもの。両方に接続できる。
    • Bluetooth対応機器全てと繋がるが、電池の交換もしくは充電が必要になる。
  • シングルモード: 超低消費電力。Bluetooth 4対応機器とつながる。
    • Bluetooth Low Energyのみを搭載したもの。クラシックBluetoothとは接続できない。
    • コイン型電池で1年単位の動作。

BLEを選ぶべきか

機器をつなぐ無線通信規格は