RXのモニタプログラム
RXマイコン用のモニタプログラムを開発しています。
どんなものかというと、メモリ(ROM,RAM,内蔵ペリフェラル)空間の任意のアドレスをダンプできたり、内容を書き換えることができたりするほか、SDカードの中身をdirやcd、typeしたりすることができるというものです。
SPIメモリのダンプや、RTCの操作もできます。
なぜ、このようなモニタプログラムを作っているかというと、RXマイコンに如何にして楽に書き込むかという方法を模索した結果です。
JTAGを使わずに内蔵フラッシュROMに書き込むには、MD0のジャンパを変更してリセットボタンをおさなければなりません。この操作がすごく煩わしいのです。JTAGを使えば内蔵フラッシュROMの中身は書き換えて、リセットもJTAG越しに行えますが、RaXinoにはUSB-JTAGがオンボードでついていない・・
パソコンの画面の中、つまり、マウスとキーボードの操作だけでアプリケーションのダウンロードと実行開始の指示ができるようにしたいのです。
それに、やっぱり、小さなプログラムを書いて実験するだけならば、ROMアプリではなく、RAM上に軽くロードして実行したいと思いませんか?
そういうわけで、RX用のモニタプログラムを作りました。
起動するとピポと鳴って、シリアルポートや、USB仮想COMポートからの接続を待ち受けます。
その後、loadというコマンドを打つと、Sレコードファイル(モトローラ形式HEXファイル)を待ち受ける状態になります。
RXのプログラムをビルドする際に、開始番地をRAM上にセットしておけば、RAMアプリが作れます。そうして作ったSレコードファイルを流し込みます。通常は0番地から開始するプログラムとして作ります。
そして、rebootコマンドを送ると、CPUにリセットがかかって、先ほどロードしたRAMアプリが起動するというわけです。これなら、パソコンの画面の中だけで操作できます。
ここで問題が3つあって、
① ロードしたRAMのプログラムが、RXモニタのワーキングエリアと重ならないか?
② リブートはどうやるのか?
③ リセットがかかると、USBの仮想COMポートはどうなるのか?
まず、①の問題ですが、RXモニタはROM上で動くアプリとしてつくり、ワーキングエリアは0x10000~0x17fffまでを使うようにします。ロードするRAMアプリは64kBのサイズ制限を設けることで、エリアがぶつからないようにします。ユーザプログラムエリアは64KBでもかなりのものが作れます。
②のリブートですが、ウォッチドッグタイマを使います。ウォッチドッグタイマがオーバーフローすると、内蔵ペリフェラルも含めてリセットされます。ただし、「ウォッチドッグタイマが溢れた」ということを示すフラグ(WDT.RSTCSR.WOVF)はリセットされません。メモリの安全な場所にRAMアプリの開始番地とキーワードを書いておいて、スタートアップルーチンが「RAMアプリ起動のためのリブートだな」と判断したら、RAMアプリの実行開始番地へジャンプするようにします。
③のUSB仮想COMポートは悩ましい問題です。USBがリセットされてしまう(つまり、抜き差しと同じ状態)ので、新しいプログラムでRXが起動する前にTeraTermを閉じて、新しいプログラムが起動したらTeraTermを再度開かなければなりません。
そこで、もし仮想COMポート経由で操作されている場合には、リセットまでに5秒間の猶予が行われるようにしました。
これで、USB仮想COMポートだけでも十分に遊べるようになるはずです。
今はまだSDRAMは使っていません。今後はSDカードからのプログラムのロードなどができるようにしたいと思っています。
RaXino用と、究極のRX62Nボード基板用のRXモニタプログラムは、こちらからダウンロードできます。
・「RaXino♪用 RXモニタプログラム」をダウンロード
・「究極RX62N(初期版)用 RXモニタプログラム」をダウンロード
・「究極RX62N(RevA)用 RXモニタプログラム」をダウンロード
※動作は一切無保証です。
ダウンロードしたMOTファイルを、RXPROGやFDTを使って内臓フラッシュに書き込んでください。
| 固定リンク





コメント
こういうユーザビリティの改良はマイコン普及に一役買いますね(*^-^)
投稿: みずき | 2012.01.21 22:29
ありがとうございます。
できるだけ使いやすい開発環境を創ることに情熱をささげています。
投稿: なひたふ | 2012.01.23 12:39