BLEの最大データサイズ?

今さらですが、BLEの最大データサイズって (BLE4.2以降のデータ長拡張は別として) 何バイトでしょう? 27バイト? 23バイト? 22バイト? 20バイト?

資料によってまちまちで混乱しませんか? 中には「20バイト程度」とかボカして書かれてたり。これ、図解すると下図のようになります。

f:id:licheng:20200609094836p:plain

27バイトというのはLLのペイロードの最大サイズ、23バイトというのはL2CAPのペイロードの最大サイズ、22バイトや20バイトというのはATTのペイロードの最大サイズです。

BLEもEthernetとかと同様に何段にもプロトコルが積み重なってるので、上にいくほどヘッダが削ぎ落されてペイロードが小さくなっていきます。Ethernetだと元が1500バイト以上あるのでそこまで気になりませんが、BLEは元が小さいのですごく目減りする感じがします。

結論としてキャラクタリスティックの最大データサイズはReadでは22バイト、Write, Notify, Indicateでは20バイトとなります。が、Read専用の場合だけ22バイトというのもおなしな話なので一律最大20バイトと考えたほうが無難に思います。

しらんけど。