Bluetooth®|基礎編

L2CAPの変更点

2017.06.13

この記事のポイント

・Bluetooth v4のL2CAPは、v3以前のものと基本的に同じ仕様だが変更点がある。

・Low Energy Signaling Channelは、スループットを決めるパラメータ変更を、主にスレーブ側からマスタ側に要求するために追加された。

・従来より長いパケットを扱えるようになったが、送受信において分割/まとめ直しの作業を要する。

・Bluetooth Core Specification 4.2からLE Credit Based Connection Channelが設けられ、大きなパケットをそのまま扱えるようになった。

今回は、Bluetooth®のL2CAPと略されるプロトコル関して、Bluetooth® v4からの主要な変更点に関して説明します。

Bluetooth v4 L2CAPの主要な変更点

L2CAPは、Logical Link Control and Adaptation Protocolの省略で、エルツ―キャップと呼ばれています。L2CAPにはいくつかの役目があるのですが、主要なものとしてマスタとスレーブ間のデータ伝送に必要な論理的なチャネルを確保します。

Bluetooth v4の策定にあたり、L2CAPはかなり複雑なプロトコルであることから、v3以前のものと基本的に同じ仕様になっていますが、追加された機能があります。

Low Energy Signaling Channel

Bluetooth Core Specification 4.0から、接続する際にコネクションインターバル、スレーブレーテンシ、スーパービジョンタイムといったスループットを決めるパラメータの変更を、主にスレーブ側からマスタ側に要求するためのチャネルが追加されました。このようなパラメータはマスタ側に主導権があり、スレーブ側がリンクレイヤでそれらを変更する手段がなかったため、このLow Energy Signaling Channelが設定されました。

マスタ側のコネクションインターバルが、スレーブ側の要件としては速すぎる場合があります。例えば、温度センサデバイスの測定データの送信は1分に1回で十分だとしても、スマートフォンなどのマスタ側はそれをスレーブサービスの種類に合わせて緻密に制御するモチベーションがなく、必要以上の頻度で通信を行い無駄に電力を消費(特に電池容量が小さいスレーブデバイス)してしまいます。Bluetooth low energyの主旨からすれば、スレーブ側からコネクションインターバルの変更ができて当然ともいえます。

基本的な手順として、インターバルの変更要求をL2CAP層が行い、それがマスタ側で了承され、次にそれがマスタ側からリンクレイヤの命令として出され、スレーブ側はあらためてそれを受けるというやり取りが行われます。

しかしながら、この方式はやり取りが多いことからBluetooth Core Specification 4.1では、スレーブ側もマスタ同様にコネクションパラメータのアップデートを直接できるようになりました。ただし、4.0機器に対してこれを実行すると切断に至るので、現状では実行前にバージョンを確認するなどの手立てが必要な可能性があります。

Attribute Protocol

Bluetooth Core Specification 4.0から、L2CAP層でのAttribute Protocol Dataが使用可能になっています。Attribute Protocolに関しては、後ほど別途説明しますので、ここでは省略します。

パケット分割

Bluetooth Core Specification 4.0のリンクレイヤの伝送は1回27バイトに決まっていますが、Attribute ProtocolのMTU(Maximum Transmission Unit)サイズである、最大512バイト以下の長いパケットを扱えます。また、このパケットの長さはネゴシエーションで決定されることが規格化されています。

したがって、L2CAPでは、Attribute Protocolが512や128バイトといった大きなものが選択された場合、そのサイズのまま送ることができます。しかしながら、長いパケットをリンクレイヤが扱える長さに分割(fragment)して送信する仕様になっており、受信側ではそれをまとめ直す(defragment)作業を行います。

LE Credit Based Connection Channel

前述のパケット分割ですが、1つの分割されたパケットに対して送受信があるので、1回あたり400μs程の時間がかかります。元のパケットが大きい場合には、1つのパケットに対して何度も受送信が行われるといった能率の悪い動作になり、時間もかかることになってしまいます。これを改善するために、Bluetooth Core Specification 4.2からは、27オクテットから251オクテットに拡張され、パケットを分割せずに送受信することが可能になり、高速な処理が可能になりました。

さらに、Creditにはシーケンス番号的な情報が含まれており、パケットをどこまで受信したかを上位層で知ることができるようになり、フロー制御を行うことができるようになりました。

Bluetooth Core Specification 4.2は、IPSP(Internet Protocol Support Profile)とともに、IoTへのアプローチを強く意識しているといえます。

ところで、パケットを大きくし、さらにスピードを求めると、Bluetooth low energyの主旨である低消費電力ではなくなり、従来のBluetoothと同じになる場合があることを認識しておいてください。