M5StackのBluetoothSerialの速度
M5StackのBluetoothSerialの速度を測っています。
BluetoothSerialというのはUARTのシリアル通信風の通信なのですが、どうもCP2104やFT2232のシリアルとは使い勝手が違うようです。
通信実験をしているときのようすを下の動画で示します。
PCもM5Stackも、双方ともに「長さ(2バイト)+ペイロード(任意長 32768バイトまで)+チェックサム(2バイト)」という単純な形でまとめたデータを送っているのですが、送信(PC→M5Stack)は512バイトを超える長さだとストールします。
受信(M5Stack→PC)は比較的長くても大丈夫なようなのですが、bts.writeの実行時間がいつも100msの整数倍です。
上の動画だと、送信(PC→M5Stack)は1kバイトくらいまでしか送っていないのですが、某グラフが途中でたびたびストールしているのが分かります。
どうやらBluetooth Low Energy(BLE)は、アドバタイズというのを子機側から行って、それに対応して親機が何かの動作をするようですが、M5StackのBluetoothSerialではアドバタイズの間隔が100msなのかもしれません。そして、それを調整する箇所も見当たりません。
M5StackをJTAGケーブルにしたいのですが、反応速度が100msだとさすがに厳しいでしょうね。無線LAN接続にすればもっと速いのかもしれませんが、「喫茶店でノートPCを使ってFPGA開発しながらJTAGで書き込む」ということを実現するにはWiFiを喫茶店の公衆LANとM5との間で切り替えなければならないので使い勝手は良くありません。ここはどうしてもBluetooth JTAGでなければなりません。
ざっと調べた感じではBLEでは「プロファイル」というのがあって、これがUSBのクラスに相当するものかと思います。汎用のGATTというプロファイルを使えば任意のプロトコルを実装できるようなので、次はこのあたりに挑戦してみようかなということになります。
| 固定リンク
コメント