2010年10月19日
ブートフラッシュの書き込みに失敗してJTAG-ICEすら起動しなくなった時の脱出方法
KZM-A9-DualボードにU-bootとLinuxカーネルを移植中です。
で、さっそくやらかしました。
DDRの初期化をスキップしているU-bootのバイナリを間違えてブートのNORフラッシュに焼いてしまいました。これをやってしまうとJTAG-ICEも起動できなくなってしまいます。昔のFull ICEと違ってJTAG-ICEは起動時に一度リセットを解除するので、その瞬間にCPUが暴走すると接続できなくなってしまいます。困った! どうしよう ...
普通はブートフラッシュメモリの書き込みに失敗して、コンソールにプロンプトがでなくなってしまっても、CPUがどこかで無限ループしているようなときならば、PARTNER-JetのようなJTAG-ICEをつなげば、再度ブートフラッシュメモリを書き直すことができます。
しかし、DDRの初期化をしない状態でDDRにアクセスしたりするとCPUは暴走してJTAG-ICEの接続に反応しなくなってしまいます。私はこれをやってしまいました。
脱出方法 その1
KZM-A9-Dualボードもそうですが、最近の評価ボードではブートフラッシュメモリの先頭のブロックをボード上のディップスイッチやジャンパスイッチでバンク切り替えできるようになっているものがあります。つまり、複数のU-bootを入れておいて、スイッチで切り替えて起動できるわけです。なので確実に起動できるU-bootを残しておいて、別のバンクで実験版のものを焼けば、失敗してもそのスイッチを戻せば再び起動することができます。
脱出方法 その2
KZM-A9-Dualボードに載っているEMMA Mobile EV2はチップの中に内蔵ROMがあり、そのROMのプログラムを使ってSDメモリカードからブートできるような機能があります。これもボード上のディップスイッチで切り替えることができます。ディップスイッチをSDブートに切り替えて、SDメモリを挿さない状態で電源を入れれば、CPUは内蔵ROMの中でSDメモリカードの挿入を待ってループします。この状態ならばCPUは暴走せず安定しているので、PARTNER-Jetをつないで起動することができます。起動した後でディップスイッチをNORブートのモードに戻せば、PARTNER-JetからNORのフラッシュメモリを書き直すことができます。
今回私はこちらの方法で脱出することができました。
最近の評価ボードやアプリケーションプロセッサはだいたい似たような機能があると思います。同じようにブートフラッシュの焼き込みに失敗した時は、(いや、失敗する前にあらかじめ)ボードのディップスイッチのブート方法に関するところを確認してみてください。