電気工学Stackexchangeに関するフォローアップの質問
Bluetooth Low Energy特性の値を短時間で繰り返し書き込みたい(可能なユースケースとして、マウスを想像してみてください)。
- 128ビットUUIDの特性は20バイト長です。したがって、単一の低エネルギートランザクションで書き込むことができます。
- 書き込みは50Hzのレートで発生します。これは、20msごとに1回の書き込みに相当します。
- したがって、20 * 50 * 8 = 8 kbit/sが書き込まれます。
- 特性を書き込むために、応答なしのコマンド/書き込みモードを使用しています。したがって、属性レイヤーでは確認応答は発生しません。
- 他のBluetoothまたはBluetoothLowEnergyデバイスは接続されていません。WLANでは何も実行されません。テスト中に他の特性が読み取られたり書き込まれたりすることはありません。
iPhone4Sからシーケンス番号を含むパケットを送信してプログラムをテストします。シーケンス番号は、送信されたパケットごとに1ずつ増加します。
受信側では、 CSR1000 BLEチップを組み込んだプログラム可能な開発ボードを使用して、パケットを受信し、受信したシーケンス番号をシリアル接続に出力します。
私の問題は次のとおりです。
しばらくすると、パケットがドロップされ始めます。最初の約100パケットは、50Hzで正常に機能します。それ以降、パケットはドロップされ始めます。
0x00 - 0x46 received 0x47, 0x48 missing 0x49, 0x4a, 0x4b, 0x4c received 0x4d missing 0x4e, 0x4f, 0x50, 0x51 received 0x52 missing 0x53, 0x54, 0x55, 0x56 received 0x57 missing ...
ほとんどの場合、4つのパケットのパックが正常に送信されます(まれに、2つのパケットのみ)。次に、1〜7個のパケットが欠落しています。
特性値のサイズを小さくしても、問題は解決しません。
50Hzではなく100Hzで書き込んだ場合、画像は同じです。ドロップは約35パケットの後に発生し始め、4パケットの送信が成功するまでに5〜7パケットがドロップされるだけです。
パケットが失われると、書き込みの頻度に関係なく、結果として得られる伝送速度は約5 kbit/sになります。これは、BluetoothLowEnergyで技術的に可能であるはずの約305kbit/sを明らかに下回っています。
開発ボードからiPhone4Sにパケットを送信しているときに、この問題は反対方向にも発生します。繰り返しますが、5 kbit/sが私が得ている最大値です。このシナリオでは、通知メカニズムが使用されます。この場合も、属性レイヤーで確認応答は発生しません。
両方向に同時に送信しようとすると、開発ボードとiPhone4Sの両方をリセットしなければならないところまで物事が爆発し始めます。
質問:
これは、開発ボードで使用されているBluetooth Low Energyチップの問題でしょうか?
はいの場合、iPhoneがレシーバーとして機能する反対方向にも問題が発生するのはなぜですか?
特性への高周波アクセスをサポートする開発ボードは市場にありますか?
問題の原因は何でしょうか?
前提条件に加えて、Bluetooth仕様/プレゼンテーションスライド/記事の一部も参照してみてください。
市場にはBluetoothLowEnergyマウスがあります。マウスの通常のポーリングレートは125Hzであり、少なくとも2つの16バイト値と、ティックごとに追加のHIDオーバーヘッドを送信する必要があります。したがって、私の問題の解決策が利用できるはずです。
アップデート
LE接続完了イベントについては、Bluetooth仕様バージョン4.0Vol2パートEセクション7.7.65.1で説明されています。さまざまな接続パラメータについて、次の値を受け取ります。
Parameter Value Description
--------------------------------------------------
Conn_Interval 0x0054 Time = 105 ms
Conn_Latency 0x0000 Time = 0 ms
Supervision_Timeout 0x00fc Time = 2520 ms
Master_Clock_Accuracy 0x05 50 ppm