わふうの人が書いてます。

iOSアプリケーション開発、BLEのファームウェアとハードウェア試作のフリーランスエンジニア。

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を使う事になりました。

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

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