M11A、M12Aについて~
低価格なマイコンと言えば、AVRですが、ルネサスにも、CPの高いマイコンがあります。
それは、R8Cマイコンで、R8C/M12A/M11Aです。
「@100円、確かに安いけど、AVRもあるし、PICもあるしで、そんなにインパクト無いけどーー」と言いたくなるかもしれませんが・・
このマイコン、裏事情があって、表向きは
・プログラムメモリ(フラッシュ):2KB
・RAM:256バイト
となっていますが、実際には、
・プログラムメモリ(フラッシュ):32KB
・RAM:1280バイト
※時代に逆行するアセンブラ屋さんの調査による。
これが、現在出回っているデバイスでも有効に出来るのなら、今までの常識が一遍しそうです。
AVRのATTiny2313は、安くて使いやすいマイコンですが、A/Dコンバーターが無いのが痛いとこです。
※最近秋月の価格を観ると@150になっていますね・・
M12Aの場合は:
・最大20MHz動作(2.7V以上)
・1.8V~5.5V動作
・入出力ポート:17本 (LED駆動用ポート含む)
・外部割り込み入力:8本
・16ビット多機能タイマ(タイマRJ2):1
・8ビットプリスケーラ付8ビット多機能タイマ(タイマRB2):1
・16ビットインプットキャプチャ/アウトプットコンペアタイマ(タイマRC):1
・UART/クロック同期形シリアルインタフェース:1チャネル
・10ビットA/Dコンバータ:6チャネル
・コンパレータ:2回路
・ウォッチドッグタイマ
・クロック発生回路:XINクロック発振回路、オンチップオシレータ(高速/低速)
この充実ぶりです・・
この機能と、プログラムエリア32Kバイト、RAMエリア1280バイトとなると、かなりの用途にマッチします。
フラッシュの書き込みボードの作成
・配線は、ハードウェアーマニュアルに詳しく書かれていますので参考にして下さい。
・フラッシュ書き込みモードで電源投入後、FDTとの接続が時間内に無いと、接続出来なくなるので、「リセットスイッチ」は必要です。
・フラッシュの書き込みは、3.3Vでも行えるようです。
このDIPタイプは、シリアルインターフェースで接続出来る為、非常に手軽に書き込みが行えます。
購入したデバイス
デバイスの表記では(下に書かれているのはロット番号と思います)
M120AN 0432N01 M110AN 0432N01
となっていました。
書き込みソフトのインストールと設定ファイルの修正
書き込みソフトは、FDT4.09 を使います。
インストール後、以下の設定ファイルを書き換えます。(Windows7 64 ビットの環境です)
/c/Program Files (x86)/Renesas/FDT4.09/kernels/ProtD/R5F2M110A/Renesas/1_0_00/R5F2M110A.fcf /c/Program Files (x86)/Renesas/FDT4.09/kernels/ProtD/R5F2M120A/Renesas/1_0_00/R5F2M120A.fcf
「R5F2M110A.fcf」の修正箇所
[Header] Description = Flash Development Toolkit Configuration File File Type = 2.1 [Device Info] EVB Name = R5F2M110A EVB Kernel Suffix = R5F2M110A ... FLASH ROM Size = 32768 ... Secret Flash Memory = Erase Block Count = 10 Memory Area Count = 2 Reserved Area Count = 0 ... [Erase Block 2] Block Name = EB8 Start Address = 32768 Start (Hex) = 0x00008000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 3] Block Name = EB7 Start Address = 36864 Start (Hex) = 0x00009000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 4] Block Name = EB6 Start Address = 40960 Start (Hex) = 0x0000A000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 5] Block Name = EB5 Start Address = 45056 Start (Hex) = 0x0000B000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 6] Block Name = EB4 Start Address = 49152 Start (Hex) = 0x0000C000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 7] Block Name = EB3 Start Address = 53248 Start (Hex) = 0x0000D000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 8] Block Name = EB2 Start Address = 57344 Start (Hex) = 0x0000E000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 9] Block Name = EB1 Start Address = 61440 Start (Hex) = 0x0000F000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Memory Area 0] Block Name = UA0 Start Address = 32768 Start (Hex) = 0x00008000 Block Size = 32768 Size (Hex) = 0x00008000 Area Type = User Flash Overlay = 0 ...
「R5F2M120A.fcf」の修正箇所
[Header] Description = Flash Development Toolkit Configuration File File Type = 2.1 [Device Info] EVB Name = R5F2M120A EVB Kernel Suffix = R5F2M120A ... FLASH ROM Size = 32768 ... Secret Flash Memory = Erase Block Count = 10 Memory Area Count = 2 Reserved Area Count = 0 ... [Erase Block 2] Block Name = EB8 Start Address = 32768 Start (Hex) = 0x00008000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 3] Block Name = EB7 Start Address = 36864 Start (Hex) = 0x00009000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 4] Block Name = EB6 Start Address = 40960 Start (Hex) = 0x0000A000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 5] Block Name = EB5 Start Address = 45056 Start (Hex) = 0x0000B000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 6] Block Name = EB4 Start Address = 49152 Start (Hex) = 0x0000C000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 7] Block Name = EB3 Start Address = 53248 Start (Hex) = 0x0000D000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 8] Block Name = EB2 Start Address = 57344 Start (Hex) = 0x0000E000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Erase Block 9] Block Name = EB1 Start Address = 61440 Start (Hex) = 0x0000F000 Block Size = 4096 Size (Hex) = 0x00001000 EBR0 = 0 EBR1 = 0 EBR2 = 0 Overlay = 0 Lockable = False [Memory Area 0] Block Name = UA0 Start Address = 32768 Start (Hex) = 0x00008000 Block Size = 32768 Size (Hex) = 0x00008000 Area Type = User Flash Overlay = 0
書き込みプロジェクトの設定
・デバイスを指定する際、チェックサムが合わない為、警告が出ますが、そのまま進みます。
・とりあえずこの修正で、32Kまでプログラムメモリーが使えると思います。
※MSYS のコンソールから、emacs でファイルを直接編集したのですが、パーミッションの関係で、実際には更新されない事が判りました。
エクスプローラーなどで、編集後のファイルを上書き保存する必要があります。(その際、警告のダイアログが出ます)
謝辞
・「時代に逆行するアセンブラ屋」さんの「toida」さんには、設定内容などお世話になりました。
初めまして。
ホームページでR8C/M1xの隠しROM/RAMを知り活用しております。
お返しに私の調べた機能を公開します。
1.R8C/M12 のDIP版は外部クロックならVcc=3.3Vで30MHzで通常動作します。
実際、グラフィックLCDを使用した1608互換-4BitI/Fモードの8桁表示で活用しています。33MHzでは熱だれ?でハングアップでしたが、Vcc-Upとか放熱改善されるのではと思います。
ちなみに、R8C/2x, R8c/3xでは30MHzはだめでした。
R8C/M12がDipだからでしょうか。
2. R8C/M1xカウンタのTRJ2は外部カウントモード時134MHzでも動作します。
実際か周波数カウンタを作って実用しています。
なお周波数カウンタにTRJ2のINT2のGate機能を使うと誤差は2LSBに収まります。
3. R8C/M13, R8C/27にも0x300からの隠しRAMがあります。
多分ですが、E8a用で全部あるのかも?
参考までに。以上です。
情報ありがとう御座います。
オーバークロックは、常識的範囲で可能な事は判っていましたが、
実際に試してはいませんでした。
24MHzは、確実な感触はありましたが、30MHzは嬉しい誤算で
すね。
※ただ、経験的に安定性や、スペックを満たせない場合があるかと
思うと、常用にするのは難しいと考えていますが、特定の用途なら、
十分実験を行えば、実用的かもしれませんね。
0x300以降の隠しRAMは、メーカー純正のデバッグ機能が使って
いると思われるので、多分、全てのR8Cにあるものと思っています。
ユンボです。
書き忘れました。
30MHz動作は外部クロックです。
ユンボです。
Resありがとうございます。
仰せの通り30MHzは危害を与えない用途であれば私用可能で、割り込み周期が短いや、処理時間を短くしたい等の用途であれば使えると思います。
実験ではクロックを可変し動作させましたが、常温で安定して動作は30MHzだったという結果です。尚、高温環境は確認していません。
いずれにしても、R8C/M1xのクロックアップは自己責任でお願いします。
追加情報で、phisel = 1 (システム全体を1/2分周)でXin=40MHzは常温で動作可能ですが、内部1/2なので効果はなく、さらに40MHz以上では動作停止します。
その状態ではなぜか10%位遅くなる現象があります。
クロック回路の回路構成が限界かもしれません。(内部に逓倍回路があるかも?)