マイコン工作実験日記

Microcontroller を用いての工作、実験記録

フラッシュを焼きなおすには?

2009-03-20 21:50:05 | ARM9
MMnet1002のフラッシュからLinuxが立ち上がることは確認できたので、今度はフラッシュを消して書き直す方法を確認することにします。今後、自分で作ったソフトを書き込むためにも必要な知識ですので。普通はこの程度の説明はマニュアルに書いてあると思うのですが、どっこいPropoxのマニュアルには何にも書いてありません。

フラッシュの書き換えにはMCUが内蔵するSAM-BA(SAM Boot Assist)機能を使って、USBまたはシリアルでつないだPCからコードをダウンロードしての書き換えができるハズです。SAM-BAについてはインターフェース2008年11月号に関連記事が掲載されています。AT91SAM9260のBoot ROMコードは、
  1. 最初にSPIでつながっているデータフラッシュからブートできるか調べる
  2. 次にNANDフラッシュからブートできるか調べる
  3. SAM-BAに制御を移してシリアルまたはUSBでつながれたPC側のSAM-BAプログラムの応答を待つ
という順序で動作します。出荷時の状態では、SPIデータフラッシュはつながれていませんが、NANDフラッシュからのブートができるので、SAM-BAには制御はまわってきません。なんらかの方法でNANDフラッシュのブートができないようにしてやれば、SAM-BAが動いてくれるハズです。

MMnet1002の基板には下の写真に示したようにSAMBAというシルクの入ったジャンパがあるのですが、配線図を確認してみるとこのジャンパはPC15/NWAIT/IRQ1につながっているだけであり、NANDフラッシュとは関係無さそうに見えます。マニュアルにも説明無いし。



一方、NF, DFとシルクのあるジャンパは、それぞれNANDフラッシュとデータフラッシュのCS信号をカットするために用意されています。これら2つのジャンパは、出荷時には基板上の0Ω抵抗で結線されている実装になっています。したがって、NF側の0Ω抵抗をはずしてやれば、NANDフラッシュへCS信号が入らなくなりSAM-BAを起動できるはずです。SAM-BAが立ち上がったらジャンパを挿してCS信号を有効にするという手順で書き込みがおこなえるでしょう。しかし、これではまだSAMBAジャンパの意味が理解できません。SAMBAと書いてあるからには、ここをショートすることでSAM-BAが動くようになる仕掛けがあるはずです。実際にやってみれば動作確認はできるでしょうが、仕掛けがわからないままでは気持ち悪いので調査してみました。

まずは仕掛けを究明する手がかりを求めてATMEL純正評価キットであるAT91SAM9260-EKの資料をあたってみました。どうせPropoxのボードはこの評価キットを参考に設計されているだろうと考えたわけです。すると、AT91SAM9260-EK SAMBA Recoveryという資料があり、フラッシュに書き込むベクタを間違えて書いてしまった場合などに、SAM-BAを起動するための方策についての説明がありました。この資料によるとAT91SAM9260-EK用のAT91Bootでは、ブート時にPA31に接続されたボタンが押されているとフラッシュの最初のブロックを消去する仕掛けになっているとのことです。先頭ブロックが消去されてしまうとフラッシュからのブートができないので、SAM-BAに制御が回ることになるというわけです。

MMnet1002でも同じ仕掛けになっているに違いないと考え、付属CDのAT91Bootのソースコードを確認すると、やはりPC15の状態を見てフラッシュの先頭ブロックを消去するようになっています。これで、ようやく疑問解消。NFジャンパはいじらずとも、SAMBAジャンパを結線してやればSAM-BAを起動できるハズです。