マイコン工作実験日記

Microcontroller を用いての工作、実験記録

Versionを確認してみる

2017-08-26 21:55:50 | WT32/BM20
BM20ではマイコン側からコマンドを送り、モジュール側からは動作に応じてイベント情報が送られてくるという動作をします。基本的な動作としてはWT32と似ていますが、WT32が単純なASCII文字列の形式で通信できたのに対し、BM20ではバイナリパケットの形式で通信しなければなりません。そのため、人間が直接対話的に操作するということはできず、マイコンを使って制御してやる必要があります。前回記事のUART動作確認ではBM20から出力されるデータを収集して、それをマニュアルでデコードしていましたが、やはり少しずつでもコードを書いてデコード作業もマイコンにやらせる必要があります。

というわけで、BM20をSTM32につなげてデコード開始。イベントを受信したらそれに対するACKも返すことにしました。これまでは MFB端子は電源制御に使っていましたが、今後は送信制御に使いたいので 電源スイッチ設定をMFBスイッチからDirectlyに変更しました。



どうやら、この変更で全てのスイッチが使えなくなるらしい。当然、電源オフもスイッチ操作ではできなくなるので、電源オフするコマンドを投げるか、電源を強制的に落とすかしないといけないようです。

また、Power ONならびにStandbyへの状態遷移イベントを検出したならば、BM20のバージョン情報を取得するコマンドを投げるようにしてみました。次のログは受信したイベントと、それに対応する EVENT_ACKの送信の様子を示しています。



この結果から、モジュールがサポートするUART command set のバージョンはv146, モジュールのファームのバージョンはv305であることがわかります。Excelで提供されているUART commandのパラメータ一覧を見ると、Command Set最新バージョンはv147のようなんですが、 v147との違いがわかりません。また各バージョンには SPPAU, 5502_MCU_mode, 5502_Embedded_modeの3種類があることになっているのですが、それぞれがどのような意味なのかという説明が一切ありません。サポートするコマンドに違いがあるので、どうやら自分のBM20で使えるのは SPPAUのバージョンであろうかと思われます。SPPAUというのは SPP & Audioという意味なのかなぁ?

マイコンとの接続に用いる TXD, RXD, P00, MFBの各信号も示しておきます。


まずは全体の様子です。最初にMFB信号を400ms オンにしてやることで電源が入り、動作を開始します。起動後、Power ONと Standbyの2つの状態遷移イベントを受信し、その後 800msほど経過してから Ringtone finish indicationを受信しています。

最初のイベントデータ受信以降の部分を拡大すると...



最初のデータ送信に先立ちMFB信号を変化させていますが、これはマイコン側から(スリープしているかもしれない)BM20を Wakeupさせるための手順です。BM20からのイベントデータを受信したばかりなので、実際にはBM20はスリープしておらずWakeup手順は (この場合には)不要なようです。BM20がスリープしているかどうかを判別できればいいのですが、その方法の説明がありません。P00がLowの間はモジュールは起きているのではないかと想像しているのですが、それを裏付ける説明もありません。MFBはマイコン側が送信している間はHighにしておけということになっており、しかも最低150msはHighにする必要があるようです。

UARTプロトコルに関しては、Excelのパラメータ一覧資料と、いくつかの基本フローを図示したUART Command SOPという資料があるだけのようです。とにかく文章での真っ当な説明が無いので、細かい部分は実際に使ってみないとわからない感じ。さすがは中華デバイスですが、謎解き気分が味わえるので、それも趣味でいじくる楽しみのひとつと言えるでしょう。