Translate

ページ

2015年1月30日金曜日

mergehex無しでのmbed環境でのNodic SDK使用 (mbed HRM1017)

nrf51822ベースのmbedデバイス(mbed HRM1017BLE nanoなど)を使うとき、通常はSoftdeviceとプログラムを結合したhexファイルを使って書き込みます。
しかし、この結合に利用するプログラムmergehexが使えない場合、どうやって書き込むば良いのか?Flash Memoryに書き込むデータは実はそのまま残っているのではないか?そう考えて調査してみました。(詳細はPDF版参照)
mergehexを使えないケースの例。

結局、Softdevice→プログラムの順でhexファイルを書き込めば結合しなくても書き込めることが分かりました。ただし、プログラムのhexファイルのアドレス指定の調整が必要な場合があります。
全てのケースでうまく行くかどうかは分かりませんが、Nordic IoT SDK 0.7.0ipv6_icmpS110使用のSDK上でarm gccでコンパイルした別のプログラムで試したところ、以下でうまく行きました。

  • コンパイラにKeilを使っている場合はそのまま書き込めば動く
    • まずSoftdevice hexファイルをDrag&Dropで書き込む
    • 次にプログラムhexファイルをDrag&Dropで書き込む。


  • コンパイラにarmgccを使っている場合はアプリケーションのhexファイルのアドレス指定を変更すれば動く
    • まずSoftdeviceを書き込む。
    • 次に以下の文字列変換を行う。(I32HEXに準拠させる。)
:020000021000EC -> :020000040001F9
:020000022000DC -> :020000040002F8
:020000023000CC -> :020000040003F7
:020000024000BC -> :020000040004F6



たとえば、1行目は次の様に変換される。

:020000021000EC
:1080000000400020B5BC0100FDBC0100FFBC010028
:108010000000000000000000000000000000000060
:020000040001F9
:1080000000400020B5BC0100FDBC0100FFBC010028
:108010000000000000000000000000000000000060

  • もっとしっかり変換したい場合は、スクリプトなどで処理する必要があります。Pythonで作るとこうなりました
  • 修正後のプログラムhexファイルをDrag&Dropで書き込む。

mbed I/FのFirmwareで形式(02)にも対応してくれると良いのですが...


0 件のコメント:

コメントを投稿