HCIコマンドを使ったCYBLE_013025モジュールのプログラミング - KBA229136 - Community Translated (JA)

Version 3

    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モジュールの他のプログラミングオプションを参照してください。

    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