RX110, RX111, RX113 などをサポート
RX マイコン C++ フレームワークでは、なるべく多くの品種をサポートするべく作業を行っている。
これらの RX マイコンは、現行品で、比較的低価格のマイコンとなっている。
FPU が無いとか、5V で動かせない(1.8~3.6V)とか、色々と制限があるものの、特定の分野なら十分な能力があると思う。
動作周波数は 32MHz だが、8/16 ビット系に比べて、扱い易く、高性能だと思える。
- FPU はアプリケーションによっては、無い事が不利益にならない場合がある
- 32 ビット CPU なので、バンクを気にする必要が無く、プログラムの実装は、非常にやりやすいと思う
- それでいて、十分低消費電力であり、コストパフォーマンスも良い
- 必要十分なペリフェラル(MTU, RTC, SCI, I2C, RSPI)を内蔵しており、通常の用途では十分と思える
- USB、LCD、静電タッチ機能を使える物など、そこそこバリエーションがある
- 基本的に RX マイコンのリソースを再利用出来る
サポートと言っても、以前のリソースを集めたり、定義を少し書くだけなので、そんなに大げさなものでは無い。
ただ、デバイスを入手して、実験していないので、ちゃんと動作するかは判らない、近々にデバイスを入手して、簡単なテストは行いたい。
- ROM 容量が 64K 以上ある RX140 が安価に入手出来れば良いのだが、チップワンストップには在庫が確認出来ない
- ROM 容量が大きい RX140、海外の販売サイトには在庫があるようだが、単価が高いので、RX231とかの方が良いかもしれない
- 上記 RX100 系は、動作電圧範囲が狭いので、A/D を使う場合に、ダイナミックレンジが狭く、色々と制限が多いのは、マイナスポイント
- 当然、電源電圧が低いと、ノイズ耐性にも影響があるものと思う
チップワンストップ:
RX110: 64LQFP, RXv1, 32MHz, Code: 32K, RAM: 10K, DataFlash: 0K, R5F51101ADFM
1個:256円
10個:@190円
RX110 Github
RX111: 64LQFP, RXv1, 32MHz, USB2.0, Code: 128K, RAM: 16K, DataFlash: 8K, R5F51115ADFM
1個:368円
10個:@234円
RX111 Github
RX113: 64LQFP, RXv1, 32MHz, USB2.0, Code: 512K, RAM: 64K, DataFlash: 8K, R5F51138ADFM
1個:630円
10個:@483円
RX113 Github
データフラッシュの操作
今まで、RX64M 系、RX24T 系のデータフラッシュの操作は、実装して、試していたが、それとは異なる系統の場合、実装されていなかった。
構成が異なり、シーケンスも微妙に異なるグループがある。
これは、デバイスにより、内蔵フラッシュメモリの構造や特性が異なるのが要因と思う。
このデータフラッシュ操作は、RX220/RX621/RX62N/RX631/RX63N など、古いタイプの RX マイコンなのもある。
しかし、RX26T が、このグループに近い操作系となっており、ついでにサポートして実験した。
- 消去は基本、バンク単位で行う
- 1バイト単位で書き込め、消去後の値が 0xFF の場合、多分従来型の EEPROM に近いものと思う
- 消去後の値が未定の場合は、新しいタイプ(E2?)のフラッシュメモリとなっている
CPU | 容量 | バンクサイズ | 書き込み単位 | 消去後の値 | ユニークID数 |
---|---|---|---|---|---|
RX140 | 4K | 256 | 1 | 0xFF | 4 |
RX220 | 8K | 2048 | 2 | 0x?? | 4 |
RX231 | 8K | 1024 | 1 | 0xFF | 4 |
RX24T | 8K | 1024 | 1 | 0xFF | 4 |
RX26T | 16K | 64 | 4 | 0x?? | 3 |
RX62N | 32K | 2048 | 8 | 0x?? | 0 |
RX631 | 32K | 2048 | 4 | 0x?? | 4 |
RX64M | 64K | 64 | 4 | 0x?? | 3 |
RX71M | 64K | 64 | 4 | 0x?? | 3 |
RX65N | 32K | 64 | 4 | 0x?? | 4 |
RX72N | 32K | 64 | 4 | 0x?? | 4 |
RX66T | 32K | 64 | 4 | 0x?? | 3 |
RX72T | 32K | 64 | 4 | 0x?? | 3 |
FLASH_sample: 各プロジェクト、データフラュシュ操作クラス、アプリケーションの動作確認
Project File | flash_io | 動作確認 |
---|---|---|
RX140/Makefile | RX24T/flash_io.hpp | 〇 |
RX220/Makefile | RX62x/flash_io.hpp | 〇 |
RX231/Makefile | RX24T/flash_io.hpp | 〇 |
RX24T/Makefile | RX24T/flash_io.hpp | 〇 |
RX26T/Makefile | RX62x/flash_io.hpp | 〇 |
RX62N/Makefile | RX62x/flash_io.hpp | 〇 |
RX631/Makefile | RX62x/flash_io.hpp | 〇 |
RX64M/Makefile | RX600/flash_io.hpp | 〇 |
RX71M/Makefile | RX600/flash_io.hpp | 〇 |
RX65N/Makefile | RX600/flash_io.hpp | 〇 |
RX72N/Makefile | RX600/flash_io.hpp | 〇 |
RX66T/Makefile | RX600/flash_io.hpp | 〇 |
RX72T/Makefile | RX600/flash_io.hpp | 〇 |
RX220/RX26T/RX62[1N]/RX63[1N] などサポート
これらグループは、ほぼ同じ操作系なのだが、微妙に異なる部分もあり、やりたくは無かったが、「#if defined(xxx)」でより分けている。
多少工夫すると、無くせなくも無いが、コードの見通しがもっと悪くなると思ったのもあって、とりあえず、制御文で別けている。
RX26T は、ほぼ同じとは言え、構成も異なるので、ソースを別けた方が良いかもしれないが、同じようなコードをコピペする事になる、コピー元を変更したら、コピー先に反映させなければならないしで、どうしたものか・・・
※まぁ、機能違いは、継承させて、分離する方が良いかもしれないが、それも複雑になるし、一長一短ではある・・・
- RX62[1N]、RX63[1N]は、ファームの転送が必要
- RX26T は、FACI コマンド発行アドレスが異なる
- RX26T は、データフラッシュ操作アドレス用に、専用のレジスタがあり、適切な値を設定する必要がある
- それぞれ、書き込みサイズ、バンクサイズ等が異なる場合があり、FLASH レジスタークラスで定義を行って、flash_io クラスからは参照するようにしている
まとめ
Start Data Flash sample for 'RX62N FRK-RX62N' 96 [MHz]
Flash drive clock: 48 [MHz]
Data Flash total size: 0x00008000
Data Flash block size: 2048 bytes
Data Flash word size: 8 byte
# check 2
Erase check: bank 2: 0x1000 to 0x17FF OK
# write 1000 123456789abcdef0 fa926534bcdea021
# r 1000 100f
0x1000: 123456789ABCDEF0 FA926534BCDEA021
# check 2
Erase check: bank 2: 0x1000 to 0x17FF NG
# erase 2
Erase OK: bank 2, 0x1000 to 0x17FF
# check 2
Erase check: bank 2: 0x1000 to 0x17FF OK
# r 1000 100f
0x1000: 1274567892BCDEF0 FA926514BCDEA021
#
- RX220 は、RX62[1N]/RX63[1N] この系列なのだが、動作確認で失敗し、原因を調査・・・
- RX220 は ROM ブロック領域の説明も実際と異なっている
- データフラッシュのバンクサイズも128バイト、2048バイトと説明が2つあり、どちらが正解なのか判らない
- 多分 2048 バイトだと思う
- RX220 は保守外の品種なので、どうかと思うが、一応、ルネサスに質問しておこうと思う
- RX220 のフラッシュ操作が動かない理由は、判ったー
- FCU クロック通知を、データ領域では無く、コード領域に行う必要がある・・・
- 「フラッシュ P/E モードエントリレジスタ(FENTRYR)」のアドレスがタイポしていた・・・
- レジスタアドレスは、構成が同等の RX マイコンでも、微妙に異なっている場合がある・・・
- それを修正して動作するようになった!(確認したつもりだったが・・・)
- 消去後のデータが不定だと、消去されているか不明なので、ワード単位の消去チェックや消去操作が必要となる
- これは、今後ワード単位の API を追加する(RX64M 系も同じように追加が必要)