HCIコマンドを使ったCYBLE_013025モジュールのプログラミング - KBA229136 - Community Translated (JA)
- RSS フィードを購読する
- 新着としてマーク
- 既読としてマーク
- ブックマーク
- 購読
- 印刷用ページ
- 不適切なコンテンツを報告
Community Translated by KoKi_1693136 Version: **
Translation - English: Programming CYBLE_013025 Module using HCI Commands - KBA229136
質問:
外部のホストからHCIコマンドを使い、(WICED SMART SDKベースで) CYBLE_013025 BLEモジュールをプログラムする方法を教えてください。
回答:
前提として、以下のCYBLE_01325モジュールの他のプログラミングオプションを参照してください。
- WICED Module Programmer User Guide – KBA225060
- Downloading into the CYBLE-013025-00 Module – KBA222505
CYBLE_013025はシリアルフラッシュメモリを搭載しています。CYBLE_013025のフラッシュにプログラムするには、以下の手順に従ってください。
注:すべてのバイト列は16進数で表記されています。もし、期待されたレスポンスを受け取れなかった場合は、ダウンロードが失敗していると推測されます。
1.復旧
リセットの間、SDAをGNDにプルダウンし、その後、信号をリリースすることで、CYBLE_013025モジュールをリカバリーモードにしてください。
2.初期化
シリアル接続が確立すると、ホストはHCI_RESETコマンドを発行しデバイスからの正常なレスポンスを期待します。
Hostからの送信:
01 03 0C 00
期待されるレスポンス (100ms以内):
04 0E 04 01 03 0C 00
成功した場合、ホストはDOWNLOAD_MINIDRIVERコマンドを発行します。
Host からの送信:
01 2E FC 00
期待されるレスポンス (100ms以内):
04 0E 04 01 2E FC 00
3.Minidriverのロード
ホストは、デバイスに対して1度にMinidriverコードのNバイト (N ≤ 251 byte) を渡しながら、WRITE_RAMコマンドを送り始めます。
CYBLE_013025 モジュール用のMinidriverファイルはこちらから入手できます。
.CYBLE 013025.zip をダウンロードし、ファイルを解凍して、Platforms\CYBLE_013025_EVAL\uart_DISABLE_EEPROM_WP_PIN1.hex.を開いてください。
Host からの送信: 01 4C FC nn xx xx xx xx yy yy yy yy yy yy …
ここでは、以下のとおりです。
- xx xx xx xxは、32ビットの宛先デバイスRAMの絶対address (リトルエンディアン) です。
- yy yy yyは、デバイスRAMにロードされるNバイトのペイロードです。
- nn = 4+N (メッセージサイズは、ペイロードサイズにアドレスの4バイトを足した大きさです)
期待されるレスポンス (100ms以内):
04 0E 04 01 4C FC 00
すべてのMinidriverのコードが正しく転送されれば、ホストはMinidriverコードの最初のアドレスにLAUNCH_MINIDRIVERコマンドを発行します。
Host からの送信:
01 4E FC 04 xx xx xx xx
ここでは、以下のとおりです。
- xx xx xx xxは、Minidriverが実行を始める32ビットのデバイスRAMアドレス (リトルエンディアン) です。
期待されるレスポンス (100ms以内):
04 0E 04 01 4E FC 00
参考として、SDKのbuildフォルダに、以前にダウンロードしたプロジェクトのログを参照できます。(例えば、
C:\Users\...\Documents\WICED\WICED-Smart-SDK-2.2.3\WICED-Smart-SDK\build\find_me-CYBLE_013025_EVAL-rom-ram-Wiced-
release\download.txt) 、または、chipload toolを使って、ダウンロードログのフロー (Downloading into the CYBLE-013025-00 module – KBA222505) を参照
できます。
4.消去
この時点で、ホストはMinidriverと会話していて、NVRAMの最初のアドレスにCHIP_ERASEコマンドを発行しています。ファームウェアの約束ごととして、EEPROM
とシリアルフラッシュは、アドレスFF000000から始まることが想定されています。
Host からの送信:
01 CE FF 04 00 00 00 FF
CHIP_ERASEコマンドが発行されると、ホストはメモリが消去されるまで数秒待つ必要があります。
この待ち時間の間、デバイスは断続的に (1秒に1回ほど) FF 01 CEで構成される進捗報告メッセージを送り続けます。このメッセージは消去プロセスが進行中である
ことを示しています。
消去が正常に完了すると、デバイスは以下のバイトを送ります。
0E 04 01 CE FF 00
5.ファームウェアと設定データのロード
これは実際のファームウェアアップデートのフェーズになります。ホストは、新しいファームウェアまたは設定データを含んだWRITE_RAMレコードをふたたび書き
込みます。書き込み先はNVRAMなので、WRITE_RAMコマンドの宛先アドレスはFF000000以上です。
WICED SMART SDKで特定のアプリケーション向けに作られたhexファイルを使用してください。CYBLE_013025モジュールには、フラッシュにダウンロードするた
め0xFF000000から始まるアドレスを使用してください。
Host からの送信:
01 4C FC nn xx xx xx xx yy yy yy yy yy yy …
ここでは、以下のとおりです。
- xx xx xx xxは、32ビットの宛先デバイスRAMの絶対address (リトルエンディアン) です。
- yy yy yyはデバイスRAMにロードされるNバイトのペイロードです。
- nn = 4+N (メッセージサイズは、ペイロードサイズにアドレスの4バイトを足した大きさです)
SFlashの場合、N ≤ 251 byte
EEPROMの場合、N ≤ 64 byte
期待されるレスポンス (200ms以内):
04 0E 04 01 4C FC 00
ファームウェアがCRC32検査をサポートするなら、ロードされたバイトの連続したブロックが完成したら、ホストはファームウェアにREAD_CRCコマンドを発行し、
返ってきたCRC32の値をホストのコードにより計算された値と比較します。CRCの読み出しは以下のように行われます。
Host からの送信:
01 CC FC 08 xx xx xx xx yy yy yy yy
ここでは、以下のとおりです。
- xx xx xx xxは、CRCで計算されるメモリの範囲の、最初の32ビットのデバイスアドレス (リトルエンディアン) です。
- yy yy yy yyは、そのメモリの範囲の長さです。
期待されるレスポンス (200ms以内):
04 0E 08 01 CC FC 00 zz zz zz zz
ここでは、以下のとおりです。
- zz zz zz zzはファームウェアによって計算されたCRC32の値 (リトルエンディアン) です。
CRC32は、標準的な計算の1つです。(http://en.wikipedia.org/wiki/Cyclic_redundancy_check の、初期値が0xEDB88320の部分を参照してください)
6.新しい内容の検証
もしダウンロード中にCRCチェックを行っていない場合、検証のフェーズはオプションですが強く推奨します。ここでは、ホストがREAD_RAMコマンドをデバイスに
発行し、書き込み中に破損していないか確認するために、デバイスからのデータを書き込んだ値と比較します。
Host からの送信:
01 4D FC 05 xx xx xx xx nn
ここでは、以下のとおりです。
- xx xx xx xxは、32ビットのデバイスRAMリードアドレス(リトルエンディアン)です。
- nn = Nで、 読み出すバイト数です。
期待されるレスポンス (200ms以内):
04 0E nn 01 4D FC 00 yy yy yy …
ここでは、以下のとおりです。
- yy yy yy … は読みだしたNバイトで、nn = 4+Nです。
7.ホストがすべてのアプリケーションと設定データをRAMに書き込み、検証された後、デバイスのリブートを指定する特別な宛先アドレスとともにLAUNCH_RAMコマ
ンドを送ります。LAUNCH_RAM コマンドの例は下記になります。
01 4E FC 04 xx xx xx xx
ここでは、以下のとおりです。
- xx xx xx xxは、CPUブランチの宛先アドレスを表します。CYBLE_013025モジュールでは、0x00000000です。
期待されるレスポンス (200ms以内):
04 0E 04 01 4E FC 00