※この記事はカーネル/VM Advent Calendarへのエントリです。
LPC1114(Cortex-M0)の載ったボードはLPCXpressoが有名ですが、IDE嫌い〜野良ビルドしたgccとlpc21ispでどうにかしたい〜という時にとっても困ります。というのも、LPCXpressoはJTAG-ICE越しにLPC1114をいじるというコンセプトのボードなので、LPC1114のシリアルポートには何も繋がっていないのです。
USBシリアルなモジュール買って、あれこれ配線するのか面倒だなーと思っていたら、ちょうどLPC1114モジュールなるものを見つけたので買ってみました。中身は写真にもあるようにwww.the0.netのZ111xPボードそのものですが…PCから電源を取ってUSBシリアルの先にLPC1114が繋がっているという、まさにこんなのが欲しかったんだよ的な商品。
注文したら、納品書と梱包材に包まれたこのボードだけが届きました。資料類はボードの販売代理店からダウンロードしてちょということなので、落として中身を見てみたのですが…基本的にWindows上からFlashMagic使ってコードを書き込んでくれということのようです。なにしろ、具体的に何をこうしろという説明が無く、ソフトと回路図とデータシートだけなんだもん。分かっている人ならこれで十分なんだろうけどさ。
PCとUSBケーブルでつなぐと基板上の赤色LEDが点滅しますし、FlashMagicからもちゃんと認識できていますから、ボードの動作に問題は無いようです。
ボードが動くなら、あとはOpenBSD上でlpc21isp動かせば楽勝かなあとこの時は思っていたのですが、念のためLPC2388の時と同じように通信ソフトからコマンドを手入力して動作を確かめることにしました。
…これが見事にウンともスンとも言わないのです。
FlashMagicが動くWindows上ならどうだろうということでTeraTermを使ってみたものの、こちらもダメ。OpenBSD/Windows共に、通信ソフトを起動した瞬間にボード上のLEDの点滅が止まるという同じ挙動を示しました。
何故なんだろーと思ってあれこれ悩んでいたのですが、回路図に答えが書いてありました。見やすいように少し書き直して引用しますが、
LPC1114のリセット信号(URESET)とISP(In-System Programming)モード切り替え用の信号線(UISP)は、PCのDTR#とRTS#で制御するようになっています。負論理の信号なので、Lowレベルでアクティブ…リセットおよびISPモードがそれぞれ有効になります。
テスターでURESETとUISPの状態を見てみると、通信ソフトを起動した瞬間にこれらの信号線がHigh→Lowに変わっていました。ISPモードが有効になってはいるものの、それ以前にリセットがかかったままでは起動すらできないというカラクリです。
FlashMagicのようなツールであればこれらの信号線を適切に制御しますが、普通の通信ソフトであればこの辺りは通信ソフトの都合に合わせた状態になってしまいます。とりあえず、URESET/UISPは共に抵抗によってプルアップされていることから、ジャンパーを外してHighにする方法で回避しました。
lpc21isp使用時はUISPのジャンパーピンを装着し、URESETは必要な時にジャンパーピンをちょんと当てることで、どうにかこんな感じ。
リセットを解除した後、?を送信するとSynchronizedと応答が返るので、この後にSynchronizedと送信することでセッションが開始されます。Synchronizedの応答に安心して、こちらからSynchronizedを送信するのを忘れるとハマります。
リセットする際にジャンパーピンをちょんちょんやるのも手間ですので、机の中から出てきたPC用のリセットスイッチを装備してみることにしました。
これはこれで良いのですが、ISPモード用のジャンパの付け外しがちょっと大変になりました。こちらも何か適当なスイッチを付ける方が良いかもしれません。
…とりあえず、ハードウェア周辺はどうにかなりそうです。
問題はソフトウェアの方で、Cortex-M0向けのgccを未だに構築できていません。ARM7辺りであればgcc-4.2を使えばどうにかなりますし、Cortex-M3であればgcc-4.3以降なので情報量もそれなりにあります。Cortex-M0はgcc-4.5からの対応となるため、正直よく分からないんですよねー。t-arm-elfをいじってmultilibを実現する辺りが特に。
撮影機材は*istDsにPENTAXのベローズを付けて、AUTO BELLOWS NOFLEXAR 105mm/F4.0をF-M42マウントアダプタ経由で。ベローズの操作は、ピントリングの操作とは異なる趣がありますねえ。58.3kg(00:00)