RXマイコンサポート(RX110、RX111、RX113)と、データフラッシュの操作系見直し

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 系も同じように追加が必要)