LPC-Link2でのdfu-utilを利用したRAM上へのバイナリ書き込み
とても便利なLPC-Link2でデバッグする時にSPIFIではなくRAM上にバイナリを書き込みする方法
LPCXPressoを利用した方法です
- LPCXPressoのプロジェクトから対象のプロジェクトを選び右クリックからPropertiesを選択
- C/C++ Build からMCU settingsを選択
- 下部Memory details (LPC4370) から最下部にあるEditを押すと以下のダイアログが出てくる
- 一番上になるName""RamLoc128""を選択し、下部右から3つめスプリットを押すと以下の様に領域が割れる
- UM10503に記載のFlashless parts memory map を良くみると0x100000000x10018000までの96kbをFlashエリアとして選択出来る事が判る
当初は其の上の32kbまで含めたRAMエリアとして128kbが確保されていた
Splitした事で下位96kbをFlashエリアとして選択 TypeをFlashにしSizeを指定する ここでは0x18000まで
- そしてSplitして出来たRamLoc128_64エリアも32kbとしてRAM領域に変更。0x100180000x8000迄
また、SPIFIは利用しないので消す
勿論残しておいてもOK.(Flashエリアが複数ある事で混乱を招くので消してしまいました。)
- OKを押して戻るとMemory Detailは以下のようになっている筈
- そしてプロジェクトをビルドした後にbinファイルをaxfから吐き出させる為以下のように選択しbinを生成する
- binファイルをhdr(dfu-utilで転送するためのファイル)とするため、LPCScryptのimage_managerを利用しhdrファイルにする
コードは以下の通り
/パス/image_manager -i <binファイルが有る場所のパス> -o <hdrファイルを起きたいパス.bin.hdr> --bin
Sample code
Kazu-iMac-Develop@Debug:07:23:11:~$/Applications/lpcscrypt_1.5.2_588/bin/image_manager -i /Users/Kazu-iMac-Develop/LPCXpresso/workspace/periph_blinky/Debug/periph_blinky.bin -o /Users/Kazu-iMac-Develop/LPCXpresso/workspace/periph_blinky/Debug/periph_blinky.bin.hdr --bin
これでdfu-utilで転送するためのファイルが完成
- 以下のコマンドを利用しLink2へバイナリを転送する 尚、転送する前迄に一度でもdfu-utilで接続していた場合は一旦PCとLPC-Link2とのUSBを取り外し再度接続する
Kazu-iMac-Develop@Debug:07:23:16:~$/Applications/lpcscrypt_1.5.2_588/scripts/boot_lpcscrypt /Users/Kazu-iMac-Develop/LPCXpresso/workspace/periph_blinky/Debug/periph_blinky.bin.hdr
本スクリプトの内容は以下の通り
dfu-util -d 0x1fc9:0x000c -c 0 -i 0 -t 2048 -R -D /Users/Kazu-iMac-Develop/LPCXpresso/workspace/periph_blinky/Debug/periph_blinky.bin.hdr
尚、このコードにおいて転送出来ない場合は一旦USBケーブルを取り外し以下のコマンドラインでの転送を試してみると転送が可能である場合もある
dfu-util -d 0x1fc9:0x000c -R -D /Users/Kazu-iMac-Develop/LPCXpresso/workspace/periph_blinky/Debug/periph_blinky.bin.hdr
これでdfu-utilを利用したLink2へのRAM領域へバイナリを転送しコード転送完了後にプログラムがスタートする
dfu-utilのオプション-Rが転送完了後のリセット、-DはPCからターゲットへのファイル転送です
毎回のデバッグ時にSPIFIに書き込みするのも可能ですが、簡単に手早くRAMエリアを利用して小さいバイナリであれば転送し動かす事も可能です
それでは、楽しんで下さい♪
1 comment on LPC-Link2でのdfu-utilを利用したRAM上へのバイナリ書き込み:
Please log in to post comments.
<追記> 上記dfu−utilで書いた場合にリセット動作がこけているのか、RAM領域に転送が失敗しているのか動作しない場合があるので何度か試してみください。現状、原因究明中です。(ただし、下位128kbを連続領域で取った場合に発生しています)