mbedをシステムに組み込む話
LPCXpresso LPC1769をmbed化して使っているのだけれど、大きさの都合からLPC-Link部分を切り離して使いたいので、その場合にどうやって書き込んだら良いのかを調べてみた。 また、今度プリント基板を発注してマイコンを直接実装する運びになりそうなので、mbedをシステムに組み込むときはどうしたら良いかも調べた。
mbedの仕組み
LPCXpressoや青mbedなどは、PCに繋ぐと外部ストレージとしてマウントされ、そこにbinファイルを置くだけで書き込める。 これはArduinoのようにブートローダーが起動して、binファイルを受け付けるようになっていると思っていたのだけれど違った。
青mbedの裏にはmbed HDKと呼ばれるデバッガ回路がついており、これがメインのマイコンにファームウェアを書き込んでいるらしい。 mbedをPCに繋ぐと、mbed HDKによって外部ストレージとしてマウントされ、そこにbinファイルを置くと、 mbed HDKがメインのマイコンであるLPC1768に対してISPで書き込むという構成になっているようだ。
したがって、ARMマイコンだけをシステムに組み込みたい場合は、mbed HDKに相当するような外付けのライターが必要となる。
書き込み方法
外付けのライター/デバッガから書き込む方法は以下の2種類があるようだ。
- ISP書き込み
- SWD書き込み
ISP書き込み
1つ目は、ISP (In-System Programming)を使って書き込む方法。こちらのほうが手軽そう。
LPCのマイコン(他のARMマイコンにも?)には、特定のシリアルポートを使ってバイナリ書き込む方法がマイコン自体に備わっている。
試してないけれど、LPC + ISPとかで検索すると結線方法が出てくるのでその通りに結線したら書き込めるはず。
FT232等のUSB-Serial変換アダプタを使ってマイコンに書き込むなら、 FlashMagic
というソフトを使えばよく、
青mbedをライターとして使ってマイコンに書き込むなら イカ醤油ぽっぽ焼き
というソフトを使えば良いらしい。
SWD書き込み
2つ目は、ARMマイコンをデバッグするためのSWDを使って書き込む方法。 SWDは物理的な結線方法らしく、実際のプロトコルはCMSIS-DAPとかJ-Linkとか色々あるらしい...? (良く分かってない)
CMSIS-DAPというのがARMの統一規格らしく、これをサポートしてるデバッガやマイコンが多いので、とりあえずはこれを使ったら良さそう。
LPCのマイコンに対して書き込んだりデバッグしたりするなら、LPC-Link2というデバッガが秋月で2800円で買えるのでお買い得。 LPC-Link Configuration Toolsというのを使ってLPC-Link2のファームウェアを書き変えると、CMSIS-DAPデバッガとして使ったり、J-Linkデバッガとして使うことが出来る。 これで2800円は安くない...?
J-Linkデバッガとして使うときはLPCマイコン限定っていう縛りがライセンス的にあった気がするけど、CMSIS-DAPデバッガとして使うときは他のメーカーのマイコンでも良いのかな...? 今回はLPC1768と1769なので、どちらにせよ大丈夫だけど。
KeilとかのIDEでデバッグ時に書き込んでも良いけど、単にバイナリの書き込みだけしたいときは CoFlash
というソフトを使うと良い。
CMSIS-DAPをサポートしてるので、LPC-Link2をCMSIS-DAPデバッガ化しておくと使える。
ただ、CoFlashを作っているCoocox社のサイトに全然繋がらないので、別の所からダウンロードするのが良さそうでした。
https://www.wyzbee.com/documentation/developers-guide/flash-the-application-to-wyzbee/
ちなみに、CoFlashで検索すると検索上位にSourceforgeのVer 1.3.6のものがあるのだけど、これだとCMSIS-DAPをサポートしてなかった。 上記のリンクだとVer 1.4.9がダウンロードできて、これだとサポートしてるのでこちらを使うべし。
LPCXpresso LPC1769をSWDで書き込む
LPC-Link2のJ7 (Target SWD/JTAG)とXpressoのJ1を接続する。Xpresso側はどちら向きでも刺さってしまうけど、矢印の1pin方向を合わせる必要がある。 あとはCoFlashでLPC1769を選んで書き込む。