==== 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! [[http://twitter.com/tedd_okano/status/313576004075544576|@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などを出力することも可能です。詳しくは[[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0477bj/CACIGGEG.html|ARMのWebサイト]]を参照すると良いでしょう。\\ === チェックサムの付与 === チェックサムを付与するには、checksumコマンドを使います。\\ checksumコマンドはLPCXpressoに付いてきますので、LPCXpressoをインストールしてやってください。\\ デフォルトのパスでインストールすると、C:\nxp\LPCXpresso_5.1.2_2065\lpcxpresso\bin\checksum.exeに置かれます。\\ \\ 私はLPC11U37を使っているのですが、この場合、 checksum -p LPC11U37 -d out.bin を実行してやる必要があります。\\ \\ この手順を知らずに大変ハマりましたが、[[https://twitter.com/lynxeyed_black/status/312589588021538816|あつを先生]]に教えていただきました。ありがとうございますm(_ _)m \\ ちなみに、このチェックサムの付与ですが、MDK-ARMからデバッグアダプタを使ってflashするときには書き込みアルゴリズム側で行ってくれている[[http://www.keil.com/support/docs/3303.htm|模様]]です。 Thanks!! [[https://twitter.com/toyowata/status/312591916543930368|@toyowata]] さん\\ LPCXpressoでも[[http://twitter.com/lynxeyed_black/status/312590317679427584|同様らしい]]です。 === 転送 === ここらへんの詳細は[[http://www.nxp.com/documents/software/AN11305.zip|NXPのドキュメント]]にあるのですが、大したこと書いてないので一応メモ。\\ ISPに投入したLPCをUSB接続すると大抵はCRP DISABLEDなるボリュームでマウントされます。CRPというのはCode Read Protectの略で、書き込んであるバイナリを読み出せないようにしていないよって意味です。\\ で、このボリュームの中にはfirmware.binというファイルがあるのですが、私が作業したWindows 7では、一旦消して(私はShift + DELしました。)、上記の手順で作ったファイルをD&Dして書き込みました。\\ あとは普通に取り外し(unmount)してUSBを抜いてやれば書き込みは終わってるはずです。