LPC1768にGDBで接続

リセット後に簡単なプロセッサの初期化を行い、空のmain()関数を呼ぶプログラムを作りました。qemu-arm上で正しく動作することを確認後、ターゲットに接続を試みました。うまくいきません。それが昨晩のこと。ようやく、今日の午後になって正常に動作するようになりました。なかなか面倒なトラブルでした。
最初に気づいたあれっと思ったのはOpenOCDの表示です。接続すると、

Info : max TCK change to: 30000 kHz
Info : clock speed 500 kHz
Info : JTAG tap: lpc1768.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : lpc1768.cpu: hardware has 6 breakpoints, 4 watchpoints
Warn : lpc1768.cpu -- clearing lockup after double fault

ダブル・フォルトによるロックをクリアしたと書いてあります。そんなはずありません。だって、このボードには、デフォルトでLED点滅アプリが書き込まれています。正常動作状態でダブル・フォルトなどありえません。
ここで、あっとさらに驚きます。LEDが点滅していないのです。電源のいりきり、もむなしく、昨日の晩はギブアップ。で、今日、単車で走りに行くことをあきらめたので引き続き問題に取り組みました。
リセット後、何らかの問題が起きているのなら、再度正しく動いているプログラムをFlashに書き込むことで、CPUの状態を解除することができるはずです。そこで、インストール済みのLPC21ISPで書き込みを試みました。うまくいきません。接続後、コマンドの実行に失敗すると報告が帰ってきます。
そこでLPC21ISPではなく、kermitでISP接続を試みました。LPC1768は、LPC2188と同じく、ISPモードで起動すると、UART0からの'?'キャラクタの受信を受けて、

Synchrohized

と、UART0に送信します。このアクノリッジがあったことから、基板が生きていることが確認できました。ではなぜ、LPC21ISPは正しく動作しないのでしょうか。
古い版でした。 orz
バージョンアップしてターゲットを認識することを確認。ボードメーカー供給のプログラムをダウンロードして正常動作を見た後、OpenOCDを接続、無事、GDBによるデバッグを行うことができました。
なぜあらかじめ書き込まれていたプログラムが吹き飛んだのかは不明のままですが、とりあえず、これですべての機材がしかるべき動作をすることを確認できました。
ちょいと不本意ではありますが、結局トラブルを経験しないとノウハウは増えないですね。