ユーザ用ツール

サイト用ツール


armcc:lpc-usb-write

LPCのUSB ISPを使ってバイナリを書き込むときのTips

USBインターフェース付きのLPCマイコンはISP (In-System Programming)モードに投入すると、マスストレージになり、firmware.binというファイルを入れてやることでflashすることができます。

普段ははSWDやUARTで書き込んでいたのですが、LPCはこれらのピンをGPIOとして使うプログラムをflashしてしまうとISPに投入してもSWDやUARTが使えなくなります。
USBインターフェース付きのLPCは、ISPモードに入るときにVBUSがHIGHだとマスストレージ(USB device enumeration)になり、VBUSがLOWだとUARTになるみたいです。
また、SWDはISPモードのときには動いていないそうです。 Thanks! @tedd_okano さん

私はARMのコンパイラを使っているのですが、axf (ELFイメージ)を作っていたものの、そこからLPCにUSB ISPで書き込むのに大変ハマったのでメモしておきます。

axfからbinへの変換

ELFイメージからプレーンバイナリへの変換については、MDK-ARMなどでarmccなどと一緒に配布されているfromelfコマンドを使います。
これ自体はなんてことなくて、

fromelf --bin --output=out.bin in.axf

といった具合に変換することができます。
ここまでは普通にやっていたのですが、このバイナリをLPCに転送してもダメです。LPCに渡すバイナリはチェックサムを付与する必要がある様です。

fromelfコマンドはプレーンバイナリ以外にもHEXなどを出力することも可能です。詳しくはARMのWebサイトを参照すると良いでしょう。

チェックサムの付与

チェックサムを付与するには、checksumコマンドを使います。
checksumコマンドはLPCXpressoに付いてきますので、LPCXpressoをインストールしてやってください。
デフォルトのパスでインストールすると、C:\nxp\LPCXpresso_5.1.2_2065\lpcxpresso\bin\checksum.exeに置かれます。

私はLPC11U37を使っているのですが、この場合、

checksum -p LPC11U37 -d out.bin

を実行してやる必要があります。

この手順を知らずに大変ハマりましたが、あつを先生に教えていただきました。ありがとうございますm(_ _)m
ちなみに、このチェックサムの付与ですが、MDK-ARMからデバッグアダプタを使ってflashするときには書き込みアルゴリズム側で行ってくれている模様です。 Thanks!! @toyowata さん
LPCXpressoでも同様らしいです。

転送

ここらへんの詳細はNXPのドキュメントにあるのですが、大したこと書いてないので一応メモ。
ISPに投入したLPCをUSB接続すると大抵はCRP DISABLEDなるボリュームでマウントされます。CRPというのはCode Read Protectの略で、書き込んであるバイナリを読み出せないようにしていないよって意味です。
で、このボリュームの中にはfirmware.binというファイルがあるのですが、私が作業したWindows 7では、一旦消して(私はShift + DELしました。)、上記の手順で作ったファイルをD&Dして書き込みました。
あとは普通に取り外し(unmount)してUSBを抜いてやれば書き込みは終わってるはずです。

armcc/lpc-usb-write.txt · 最終更新: 2014/02/03 15:29 by ytsuboi