BLE で一度に 20 バイトのデータしか送信できない理由

Bluetooth 関連のプロジェクトに取り組んでいると、なぜ一度に最大 20 バイトのデータが送信されるのかが気になる方も多いと思います. 早速ですが、上の画像と、下の画像が Bluetooth のデータのパケット構造です。伝染 ; 感染。赤い部分は、(Notify 状態で) 送信した最終的なパケット サイズです。

無題-1.png

始める前に、オクテットとバイトの違いについて触れておきますが、どちらもバイトに変換できます。オクテットはオクテットのグループです。TCP/IP 開発の初期には、一部のシステム構造で使用されるバイトは 10 ビットでした。

ブロードキャスト パケットの概要

ブロードキャスト パケット ヘッダー

画像.png ヘッダー部分

  1. ヘッドは主に 1 オクテットです。
  2. PDU タイプ
  3. RFUは予約されています
  4. TxAdd 送信アドレス セグメント
  5. RxAdd はアドレス セグメントを受け入れます

長さ部分

  1. 長さは主に 1 オクテットです。
  2. 6octet は長さで、値は 6 ~ 37 です (ブロードキャスト パケットは最後に 6octet のデバイス アドレスがあるため、少なくとも 6 ビットです)。

ここでの 37 バイトについては、31octet の長さのデータ PUD 内の 5 ビット データと追加する必要があるデバイス アドレスと互換性を保つために、これが正しいかどうかはわかりません。 6オクテットで。

ブロードキャスト データ セクション

データは有効データと無効データ(0埋め)+6octetのデバイスアドレスに分けられます。有効なデータ構造は次のとおりです。

画像.png

  1. 有効なデータ部分は、複数の AD 構造で構成されています
  2. 1 AD 構造は、1 octct の長さとデータ (Length) で構成されます。
  3. データは、AD タイプ (n octct) と AD データ (長さ - n) で構成されます。

データ PDU

画像.png

  1. 長さは 0 ~ 31octct の 5 桁で、最大は 31octet です。
  2. 4octet の MIC を引く 31-4 = 27 オクテットがペイロード長です。

リンク層 L2CAP

画像.png

27 - 2 - 2 = 23 オクテット

通知する

画像.png

23 - 1 - 2 = 20オクテット。

おすすめ

転載: juejin.im/post/7206577654933651516