2011年8月15日作成 2012年1月7日更新

R8C/M12Aの予約領域にあるROM/RAMを使う

ロットによって容量は異なるかもしれませんので、この情報をあまりアテにしないでください。

秋月で100円のR8C/M12Aは仕様上、プログラムROM:2kB/RAM:256Bですが、実際にはもっと多くのROM/RAMを搭載している場合があるようなので、簡単なプログラムを書いて確かめてみました。


	for(address=0x500; address!=0xC00; address++)
	{
		poke(address,0x55);
		if(peek(address)!=0x55) break;	// 0x55を書いてみて0x55が読み出せて
		poke(address,0xAA);
		if(peek(address)!=0xAA) break;	// さらに0xAAを書いてみて0xAAを読めたら、そこはたぶんRAM
	}
	
	while(1)
	{
		puts("\r\n> ");
		while(1)
		{
			temp=getch();
			putch(temp);
			if(temp=='\r')break;
		}	
		puts("\r\n");
		dump(0,0xFFFF);
	
		puts("\r\n\r\n");
		puts("RAM : 0x0400 - 0x");
		puthexshort(address-1);
		puts("\r\n");
	}

RAMっぽいアドレスに実際に読み書きしてみて、RAMかどうかを確かめたあと、0x0000 〜 0xFFFE までメモリをダンプしてみてるプログラム。(手抜きのため0xFFFFじゃなく0xFFFEまで)

実行してみると 0x07FF まで RAM があるのがわかる。

上にスクロールさせてみる。

消去済のフラッシュROMは 0xFF になっているので見ればすぐにわかる。プログラム書き込み済みのフラッシュROMはランダムな値に見えるので、これも見ればわかる。

何も割り当てられていないアドレスはこんな感じ。

手元のデバイスでは、

と、とても大きいROMと、そこそこのRAMが使えました。

実際にROMを10KB以上、RAMを1KB以上使用するプログラムを書き込んで正常動作することを確認したので、アドレスのデコードの具合でミラーが見えているというわけではないようです。

予約領域にあるROM/RAMの使い方

セクションの設定を変更するだけで簡単に使用できます。

デバイスへの書き込み時の注意

ビルドしたプログラムをFDTで書きこむ時にFDTのデバイス選択で R5F2M120A を選ぶと、書き込み時にROMの範囲を超えているとエラーになるので、R5F2M120A と書き込み方法が同じ R5F2LA86A (ROM32KB)を選んで書き込めばよい。

R5F2M120A と R5F2LA86A はデータフラッシュのアドレスも同じなので、問題ない。興味があったら、R5F2LA86Aのハードウェアマニュアルと、R8C/Mxシリーズ, LAxAグループシリアルプロトコル仕様書も読んでみて。


webmaster@kyoutan.jpn.org

('A`)