RX65N Envision Kit で開発をしています。
タッチパネル上から数字を入力し、それを記憶させたいのですがArduinoで言うEEPROMの様な記憶領域に電源OFF後も
残す方法が見つけられません。開発環境がGCCの為かr_vee_rxも表示されないのですが、どなたか良い策をお持ちでないでしょうか?
質問がアバウト過ぎてすみません。
ご教授、何卒よろしくお願い致します。
リューキィさん、こんにちは。NAKAといいます。
RX65NならE2フラッシュ機能を使うのはダメでしょうか?
タッチパネルから入力されたデータをE2フラッシュメモリに残して、電源の再投入後にE2フラッシュメモリから読みだせばいいようなきがします。
NAKAさん、こんにちは。リューキィです。
ご指導ありがとうございます!!
そんな機能があるんですね!それはどんなモジュールで可能でしょうか??
全くの素人なので、知識が無くてすみません。
リューキィさん
こんにちは、ルネサスの中の人です。
NAKAさん、NoMaYさん、ほやさん、毎度どうもです。いつも新鮮な情報をいただきありがとうございます。
さてRXマイコン内蔵フラッシュのR/W関連のソフトウェアを少し情報まとめてみました。過去経緯などあり整備が不完全で混乱が生じることがありすみません。
まず、RXマイコンのソフトウェアは以下がトップページです。
https://www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/software-tools/software
RX Driver Packageというので、RXマイコンの周辺機能(タイマとかA/DとかIICとか)用のドライバソフトを周辺機能単位でモジュール化して包含しています。上記ページの中段くらいにある「FITモジュールリスト」というリンクから現在メンテナンス継続中のFITモジュールのリストが参照できます。
https://www.renesas.com/jp/ja/software-tool/fit-modules-list
この中で、「フラッシュメモリ(内蔵フラッシュ書き換え)」というのが基本部品となっております。RXマイコン内蔵フラッシュメモリへのデータ書き込み機能を単機能で提供します。ソースコードのフォルダ名が 「r_flash_rx」 となっているものです。
この中で、「フラッシュメモリデータ管理モジュール」というのが応用部品となっております。上記基本部品のAPIを活用し、書き換え中の電源断によるデータ破損の復旧機構、データ書き込みブロックの平滑化による書き換え回数上限の引き上げ(ウェアレベリング)などが実装されています。ソースコードのフォルダ名が「r_datfrx_rx」となっているものです。
それで残念ながらソースコードのフォルダ名が「r_vee_rx」となっているものは「r_datfrx_rx」と同じく「r_flash_rx」 の応用部品なのですが、2022年10月現在メンテナンスが出来ておりませんので最新RXマイコンに非対応となっておりご利用いただくのは非推奨となります。
総合すると、試作目的なので電源断対策等は検討不要、であれば「r_flash_rx」 、量産目的なので電源断対策等の検討も必要、であれば「r_flash_rx」 +「r_datfrx_rx」の構成が推奨です。また、これらはサンプルコードですので不揮発性メモリの制御を得意とするソフトウェアベンダから「r_flash_rx」 +「r_datfrx_rx」に相当するソフトウェア部品を購入いただくことを検討するのも良いかと思います。
またさらに「r_flash_rx」 等のサンプルを利用せず、RX65Nマイコンのユーザーズマニュアルを参照しながら、内蔵フラッシュメモリのコントローラのレジスタを操作するソフトウェアを自作する、という道も存在します。
以上です
シェルティです、こんにちは。
上記は一般情報でして、初心者さんですと、RX65N Envision Kitを使ってRX65Nマイコン内蔵フラッシュメモリを書き換える機能(NAKAさんが「E2フラッシュ機能」と仰った機能ですね)については、「r_flash_rx」のみで先ずは実機で確認されるのをお勧めします。具体的な手順を書きだしてみました。
(1) e2 studio最新版をダウンロード: https://www.renesas.com/jp/ja/software-tool/e-studio
(2) インストール時にRXマイコン関連のツール類を選択してインストール
(3) e2 studioを起動し、新規プロジェクト作成でRX65N Envision Kitをボード選択で選択しプロジェクト作成(選択肢に出てこない場合はe2 studio画面上のダウンロードリンクを押してボード用データをダウンロード)
(4) スマートコンフィグレータのコンポーネントタブで「r_flash_rx」をプロジェクトに登録
(5) 「r_flash_rx」の設定でデータフラッシュ機能のソフトウェアを有効にする。
(6) main()内でR_Flash_Open()をよび、R_FLASH_Write()で書き込む。0x00100000番地がデータフラッシュの先頭なので、とりあえずこの番地を指定し、uint32_t write_data = 0x12345678; とかの4バイトデータもあわせてR_FLASH_Write()に指定し書き込んでみる。R_FLASH_Write()のあとにwhile(1); を設置しストッパーにしておく。
(7) e2 studio上でビルド、虫アイコンを押してデバッガ起動(このときにビルドしたソフトがマイコンに書き込まれます)、実行ボタンを押してソフトウェアを走らせる
(8) ブレークするとwhile(1);でプログラムカウンタが止まっていると思うので、その状態でe2 studioのメモリウィンドウで0x00100000番地をメモリダンプしてみて、0x12345678が書き込めているかどうか確認する
R_FLASH_xxxxx() の各関数の使い方詳細は「r_flash_rx」のdocフォルダ内のPDFを参照してください。
以下にもPDFを置いてあります。(というよりe2 studioは以下GitHub上のデータをダウンロードしてプロジェクト生成などを行っています)
https://github.com/renesas/rx-driver-package/tree/master/source/r_flash_rx/r_flash_rx_vx.xx/r_flash_rx/doc/ja
上記、記憶の範囲で書いているので何か細かい手順が書ききれていないかもしれません。不明点などありましたらまた書き込んでください。
手順(6)でR_FLASH_Write()の前にR_FLASH_Erase()で一回消さないといけなかったかも。うろ覚えですみません。R_FLASH_Write()がエラーを吐いたら(戻り値がエラーになったら)R_FLASH_Erase()を試してみてください。戻り値をローカル変数に代入すると最適化影響でデバッガでうまく変数内容が表示されない場合があるので、詳細デバッグする際はコンパイラの最適化をOFFにするのをお勧めします。
シェルティさん
こんにちは、リューキィです。
詳細なご指導ありがとうございます。こちらで現在開発しているのは試作ではあるのですが、問題無ければ量産(受注生産)に移る予定です。当方で使用しているコンパイラがGCCなので「r_datfrx_rx」は非対応のようでした。まずはとりあえず「r_fash_rx」で実装をしてみて、電源断対策はそのあとにどうするか検討したいと思います。ありがとうございます。今後ともよろしくお願い致します。
r_Flash_rxでメモリへの書き込み等を試そうとしたのですが、R_FLASH_Open();を入れるだけで、プログラムが途中で止まってしまう状態になります。
1行毎に変数に数値を代入してみてそれを監視し、どこで止まっているのかを確認したところ、
mainのwhileに入る前のAWのイニシャライズ
APPW_X_Setup(); APPW_Init(APPW_PROJECT_PATH); ←ここで止まっている模様 APPW_CreateRoot(APPW_INITIAL_SCREEN, WM_HBKWIN);
でした。この3行の前にR_FLASH_Open();を入れていたので、次に後に入れてみたのですが、それでも同じところで止まってしまっています。
R_FLASH_Open();以外のWrite等でも同様でした。どなたか原因に心当たりのある方はいらっしゃらないでしょうか?
ツールチェインがGCCなので、そこに原因があるのでしょうか?(設定とか・・・)
リューキィさん、こんにちは。NoMaYです。すみません、私は他の案件が佳境に入っていてサポート出来ません。(他の人からのリプライを待って頂けますか。)
NoMaYさん、こんにちは。リューキィです。
リアクションありがとうございます!すみません。エンコーダの方も最後までまだ追えていないのですが、先に試作を完成させろと会社から言われまして。。。
大丈夫です!少しずつ探ってみます!!ありがとうございます!!
リューキィさん、こんにちは。NoMaYです。> 他の人からのリプライを待って頂けますか。それでもひとつだけ。必要性はr_flash_rxモジュールのコンフィギュレーションに依存しますが、以下の1行を追加しておいて頂けますか。(英語フォーラムへの投稿ですが先週気付きました。https://community.renesas.com/mcu-mpu/rx/f/rx-forum/29337/is-there-any-migration-plan-of-fit-and-rx-smartconfigurator-due-to-future-deprecation-of-gnurx-s-automatic-interrupt-vector-entry-generation-feature/100939#100939)src/linker_script.ld
.text 0xFFE00000: AT(0xFFE00000) { *(.text) KEEP(*(.text.*ISR)) KEEP(*(.text.Excep_*)) KEEP(*(.text.*_isr)) KEEP(*(.text.*_interrupt)) *(.text.*) *(P) etext = .; } > ROM