CPU実験室

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

ICSPプログラム(2)

フラッシュROMへのデータ書込みはコマンドシーケンスをROMの決められたアドレスに与えることで実行できます
下の図のように
 ①0x5555番地に0xAA
 ②0x2AAA番地に0x55
 ③0x5555番地に0xA0
 ④書き込みたいアドレスに書き込みたいデータ
とアクセスすると1バイトの書込みが完了します。
イメージ 1

これだけ複雑なのでプログラムが暴走してもうっかりフラッシュROMのデータが壊れることは無いといえます。
まずこのシーケンスの通りROMをアクセスするプログラムを書いたのですが最初はちっとも書込みが出来ませんでした。
 *(char far *)0x00005555 = 0xAA;
 *(char far *)0x00002AAA = 0x55;
 *(char far *)0x00005555 = 0xA0;
 *adrs = data;

 

しかし良く考えればそれは明らかで、アドレスはROMが割り付けられている物理アドレスを使用しなければダメです。
前のメモリマップどおりROMは0x80000番地以降に4バイトアライメントされているので、例えばROM1を書くためには

 

 *(char far *)0x90005554 = 0xAA; /* 0x80000 + 0x5555 *4 */
 *(char far *)0x8000AAA8 = 0x55;  /* 0x80000 + 0x2AAA *4 */
 *(char far *)0x90005554 = 0xA0;  /* 0x80000 + 0x5555 *4 */
 *adrs = data;

となります。 

1つのROMに連続して書くデータは当然4つ飛び毎のデータになります