2016-04-11 31 views
1

1つの接続間隔でスレーブまたはマスターのいずれかによって送信できる最大パケット数(LE_DATA)には制限がありますか?BLE:接続間隔の最大パケット数

この制限が存在する場合、この制限には特定の条件があります(たとえば、x個のATTデータパケットのみ)。

マスタ/スレーブは、仕様によってそのような制限を課すことを要求されているか、または許可されていますか?

答えて

1

4.5.6閉会接続イベント

のMDビットをデータチャネルPDUのヘッダは、デバイスがより多くのデータを送信できることを示すために使用されます( )。どちらのデバイスもパケット内に MDビットを設定していない場合、スレーブからのパケットは接続イベントの を閉じます。デバイスのいずれかまたは両方がMD ビットを設定している場合、マスタは別の パケットを送信して接続イベントを継続し、スレーブはそのパケットを送信した後にリスンする必要があります。 パケットがマスタによってスレーブから受信されない場合、マスタは接続イベントを終了させます( )。パケットがスレーブによって マスタから受信されない場合、スレーブは接続イベントを閉じます。

接続イベント内で無効なCRC一致で受信された2つの連続するパケットは、イベントを閉じます。

これは、スレーブとマスターの両方が、CI中に送信したいパケット数に自己制限を持つことを意味します。いずれかのパーティーがさらにデータを送信したくない場合、このビットを0に設定するだけで、他のパーティーは理解します。これは通常、いずれかの側で保留中のパケットの数によって駆動されるべきです。

私は仕様やプロトコルのために論理限界を探していたので、これはおそらく私の質問に答えます。

@moryniczが述べたようにCIあたり数パケットに物理的限界がMTUに、データレートによって支配、そしてられるなど

1

BTとBLEの両方で達成できる最大データレートがあります。 MTU(最大送信単位 - パケットサイズ)を送信の両端で処理できる最大MTUまで変更することで、このデータレートを調整できます。しかし、AFAIKでは、データレートによって課せられた物理的なパケット以外に、パケットの数に直接の制約はありません。

あなたはで詳細を見つけることができます私は、Bluetooth仕様v4.2の中で、次の見つけることができるspec

+0

私は特に、1 CIあたりのパケット数の制限について知りたいと思っていました。私はマスターデバイスがCIあたり4パケット以上を送信しないことを観察します。 [[link](http://stackoverflow.com/questions/36542079/bluedroid-hangs-up-for-45-ms-during-channel-switch)]これは何らかの交渉によるものかもしれません(例:限られた時間)、またはhw上のバッファの数が制限されているか、またはドライバなどのコーディングが悪いためです。 – GPS

+0

Androidおよび周辺機器で同様の問題が発生しています。私はBLEペリフェラルに接続し、約20-30秒で数十のパケット(例えば300)を交換し、その後通信は非常に遅くなり、特性を書いてその応答を取り戻すのに1.5秒かかります。この時間は私のアプリケーションでは受け入れられません。 数百パケットごとに切断して再接続し、そこからプロセスを再開すると、速度が低下したり動作が停止したりすることはありません。この問題は、接続あたりのパケット数または接続時間の制限に関係していますか。助けてください –

1

(私は私が死んでポストを復活ませんよ願っています。しかし、私はセクションを考えますこれには4.5.6よりも4.5.1が適しています)。

この仕様では、パケットの制限は定義されていません。それはちょうど、以下の状態:

4.5.1接続イベント - BLUETOOTH仕様バージョン4.2 [第6巻、パートB]

(...)

接続イベントの開始は、アンカーポイントと呼ばれます。アンカーポイントにおいて、マスタは、データチャネルPDUをスレーブに送信し始める。接続イベントの開始は、定期的にconnIntervalの間隔で配置され、重複しないものとする。 マスタは、接続イベントが次の接続イベントのアンカーポイントの前に少なくともT_IFSを閉じることを保証する。スレーブは、マスタによってアンカーポイントで送信されたパケットをリッスンします。

T_IFSは、 "フレーム間隔" の時間で、150マイクロ秒でなければなりません。単にこの問題を解決するのはマスターの仕事です。 iOSが知っている限り、例えば、接続イベントごとにパケット数を4に制限しています。 Androidには、OSのバージョンに応じて他のハードコードされた制限がある場合があります。

+0

実際にこれを決定するBluetoothコントローラ(電話の専用チップ)です。まず、1つの接続間隔で多くのパケットを送信できるようにするために、その間に無線機を使用したい他の接続やWiFiのものは存在していなければなりません。第2に、HCIプロトコルでは、ホストは接続イベントの所望の長さについてヒントを得ることができる。 Androidではこれを0に設定するだけでコントローラがこれを判断できるようになります。 iOSの設定内容が不明です。そしてそれはコントローラがどれほどスマートであるかに完全に依存します。いくつかのコントローラは、CE_lenとして0が与えられたとき、それを4パケットに制限するだけです。 – Emil

+0

@Emil Thx追加!私はこの文脈で疑問に思っています:コントローラが実際に接続イベントの終わりの時間が別のT_IFSに合っているか、最大パケット数が最大パケット長でも衝突しないように値を選ぶかどうか計算しますか? – vvombat

+0

答えをいただきありがとうございますが、私は実装ではなく仕様によって課された制限を探していました。仕様ごとに、両側がMDビットをリセットしたときに1つのCIでの送信が停止するため、pkt txあたりの時間を除いて、いずれのデバイスでも1つのCIで送信できるパケットの数に制限はありません。スペックは、私が後で見つけたように、ほとんどのBLEコントローラが実際に課す厳格な制限を自ら厳しくすることを禁じていません。 – GPS

関連する問題