MC68HC908JB8のFlash書き込みプログラムを作りたい

MC68HC908JB8のFlash書き込みプログラムを作りたい、と思って、AN1831 とか見ながら実験していますが、どうもめんどくさいですね。

モニタROM上には最小限の Flash Erase, Program, Readout ルーチンは用意されているが、通信コマンドも最低限(メモリ READ/WRITE, READSP, RUN)しかないので、 RAM上にプログラムを送り込んで、それを実行してやらないといけない。

AN1831 REV2では RAMに送り込むプログラムのサンプルソースが載っていたが、なぜか REV3ではそのサンプルソースは削られている。ひどいなあ。(もっともあのサンプルソースはかなり使い物にならないカンジ…)

モニタROMにある実行(RUN)コマンドは、RUNと言っても RTI を実行するものである。
そして、モニタROMはソフトウェア割り込み(SWI)で起動されている。
つまり、READSPコマンドでスタックポインタを読み出し、スタックフレーム上のPCH, PCL を、自分が実行したいアドレスに WRITEコマンドで書き換えてから、RUNコマンドを発行する。

このスタックフレームの形式がわかんなかったり(PSHH されているのに気づかなかった…JB8データシートではRUNはただ単にRTIを実行するとしか書いてないし…まあHC08ではHレジスタのケアは常識なんだろうが…)、READSPで読み出せるスタックポインタが +1 されていることとかが、 JB8のデータシートとAN1831だけではわからず、簡単なプログラムを実行させることさえできずにしばらく苦労しました。JB8のデータシートだけ見ててはダメってことなんだな…ひどいな…。

結局ググったら出てきたQY4のデータシートには詳細が書いてあって、RUNコマンドはPULH, RTIを実行するとも書いてあったし、スタックフレームは、 READSPで読み出せたSPの値が 0x00fa だったとすると
+00(fa) H
+01(fb) CCR
+02(fc) A
+03(fd) X
+04(fe) PCH
+05(ff) PCL
なので、 0x00fe, 0x00ff を 飛び先番地に書き換えてから RUN すればいい、ということだった。

で、まだ、私のFlash書き込みプログラムは完成していない…。AN1831 REV2のサンプルソースでは ROM内ルーチンの GET_PUT をコールしていたが、どうもこれ使えない?? AN1831 REV3では GET_PUT の存在も消されているし…。

JB8での GETBYTEのエントリアドレスは、 AN1831 REV2では $FED5, REV3では $FED6 と書いてあり、どっちなんだ?と思ったが、少なくとも現行のチップでは $FED6が正しいようだ。
AN1831 REV3では GETBYTTEは アンオフィシャルサポートだとか書いてありやがるが、でもそれ使わないと大変じゃん。
まだしばらくかかりそう…。

しかしFreescaleは、ルネサス(のFDT)みたいに Flash 書き込みツールを ノーサポート無償版で公開してほしいなあ。

コメント

タイトルとURLをコピーしました