2022/08/20(土)Nordic SoftDevice S132 v17.1.0にSerializeFWでアクセス
NordicはSerialization FWというのを提供しており、これはSoftDeviceと一緒に書き込むことでそのチップはBLEモジュールとして扱い(Connectivity Chipと言う)ホストMCU側(Application Chipと言う)からUARTを通してすべて操作できるというものです。
となると、UART通信仕様が必要になりますし通信フォーマットが知りたいのですが、なんとこの情報がまともに掲載されていません。v11.0.0のバージョンに無くはないのですが
https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v11.0.0%2Fble_serialization_s130_functions.ble_serialization_s130_functions
命令バイトとなるopcodeがv17系と違っていてバージョン違いで平気で仕様を変えてきます。(なんなんですかこれ…。)
調べているなかで本家のコミュニティのDevZoneに同じ悩みの人がいたのですが、誰も知らないみたいなまともな回答がなくもうなんだか…。(なんなんですかこれ…。2回目)
SDKの中を覗いてみると
nRF5_SDK_17.1.0_ddde560\components\serializationというのがあって、どうやらMCU側はこのライブラリを使って「よろしく動かしましょう。通信プロトコルやパケットフォーマットは気にしなくてよいです。」ということが言いたそうな空気を感じました。
でも自分は、生の通信を見ながらある程度の動きを把握したいので、解析を頑張りました。
- TX_RAW_PACKET = [TX_HEADER][TX_PAYLOAD] の構成
[TX_PAYLOAD]の1byte目は、0x00がMCU→BLEで0x01がMCU←BLEの方向、UARTの場合TX,RXで分かれているので各デバイスからは固定で送出されますね
2byte目はcommand code(opcode)、これがバージョンによって変わる。変わるなよ。例えばv17でsd_ble_version_get = 0x65ですが、v11ではsd_ble_version_get = 0x66です。
3byte目以降はopecodeによります。
*** sd_ble_version_get --> 03 00 00 65 00 <-- 06 00 01 65 10 00 00 00
上記を送るとこんな感じで帰ってきます。10 00 00 00が返信内容でBLEからは4byteが標準的に返ってきます。あとは命令によって様々。
まずは基本はこんな通信みたいです。
肝心のv17.1.0のopcodeですが
\nRF5_SDK_17.1.0_ddde560\components\serialization\common\ser_dbg_sd_str.cの中にありました。どうやらこれが一覧っぽいです。
S132 v17.1.0 static const char * sd_functions[] = { /* 0x60 offset */ "SD_BLE_ENABLE", /*0x60*/ "SD_BLE_EVT_GET", /*0x61*/ "SD_BLE_UUID_VS_ADD", /*0x62*/ "SD_BLE_UUID_DECODE", /*0x63*/ "SD_BLE_UUID_ENCODE", /*0x64*/ "SD_BLE_VERSION_GET", /*0x65*/ "SD_BLE_USER_MEM_REPLY", /*0x66*/ "SD_BLE_OPT_SET", /*0x67*/ "SD_BLE_OPT_GET", /*0x68*/ "SD_BLE_CFG_SET", /*0x69*/ "SD_BLE_UUID_VS_REMOVE", /*0x6A*/ "SD_UNKNOWN", /*0x6B*/ ...抜粋。
全然まとまらない。もう自分用備忘録ということで。
あと、UARTは、速度1Mですが、みんな115200に変更して書き込んでいる模様。
それと、パリティありって、Odd/Evenどっちなのか不明確でしたが、Evenのようです。RTS/CTSも標準で必要。
Arduino風に書くならSERIAL_8E1 | SERIAL_RTSCTSです。
【訂正・追記】2022/8/21
2022/03/06(日)TTP224
- TTP223 1点タッチセンサ
- TTP224 4点タッチセンサ
- TTP226 8点タッチセンサ
ちょうど同じものをご購入された先駆者の方がいらしたのでそれを参考にしました。
TTP224
データシートも上記の方のURLから辿れます。このモジュール基板はt0.8と薄くタッチが基板の裏からでも反応しました。ピンヘッダが手前に来ているのでモジュールをそのまま何かに利用する場合裏面側から使うこともできそうです。電源/IO電圧範囲が2.4~5.5Vなので3.3VIOでも5VIOでもそのまま使えます。
先の方の例ではジャンパ設定そのまま(CMOSドライブで出力)で2.7V程度の出力とありますが、自分が搭載LED負荷のみで計ったところ電源3.3Vで3.2Vほど出ていました。ドライブ能力の問題かと思われますので、ラッチアップ防止も兼ねて1kほど通してマイコンの入力に使うか、ODジャンパ設定でOpenDrain動作で動かすのが無難です。データシートには各ピンの出力仕様など記載がないので、この辺りは精査の上回路を決める必要がありそうです。
とはいっても、基本的に電源さえ繋げば動いてくれる簡単デバイスなので使い勝手は良いと思います。