CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

ICSPプログラム

今時のマイクロコントローラでは当たり前の機能ですが、このボードでもICSP(インサーキットシリアルプログラミング)が出来るようにしてみます。
ROMを抜かずにボード上の自己書換えでROMモニタのバージョンアップが可能になります
まず、このボードのメモリマップです。
前半にSRAM512KB、後半にフラッシュROM512kBが存在するリニアなメモリ空間ですが、バス幅が32bitのため8bit幅×128kwordのRAM/ROMをそれぞれ4個並べた構成になっています
 
イメージ 1
 
実際の手順ですが
最初に元のROMモニタでSRAMの前半にローダ/ROMライタプログラムをダウンロードしておきここに制御を移します
つぎにこのローダを使ってROMに焼きこみたいコードをSRAMの0x20000~0x7FFFFの最大384kB転送しておきます。
ここでROMのフルサイズ512kBでないのはSRAMにローダプログラムを動かすための領域が必要で丸々512kB分のバッファが取れないこととROMの最後の部分に毎回同じで書き換える必要の無いリセットベクタがあるためです
RAMバッファへの転送が終わったらROMライタプログラムでコードをROMの先頭0x80000から焼き付ければ、リセット後に新しいコードが起動します
 
イメージ 2
 
 
 
ここでROMの書込みに失敗すると再ダウンロードはおろかモニタの再起動すら出来なくなるので注意が必要です(そのときはROMを抜いて・・となる)
また、ローダ/ROMライタプログラムをSRAM上で動作させるというところがポイントです。以前同じように自己書換プログラムを書いてROM上のシステムモニタに組み込んだところ、書込み開始したとたんにプログラムが暴走し、原因がわからずしばらく悩んだことがあります。