フラッシュメモリデータ管理モジュールFIT

はじめまして。Giggsと申します。

RX72Mで、フラッシュメモリデータ管理モジュールFITを使用してデータフラッシュに書き込み/読み出ししようとしています。
データ番号0に書き込むことが出来たので、続けてデータ番号1に書き込もうとしましたがうまくできません。
書き込もうとすると「消去ブロックなしのため、データ更新処理実行不可能」になるので、
ブロック消去しようとすると「無効ブロックなし」になります。
データ番号0に書き込んでからデータ番号1に書き込む間で何か処理が必要でしょうか?

以上、宜しくお願い致します。

Parents
  • はじめまして、SAM と申します。

    『書き込みできました。』ということでしたが、その後いかがでしょうか。
    私は RX72N を使っていますが、しばらく書き込むと書き込みができなくなります。
    Giggs さんと同様に書き込もうとすると「消去ブロックなしのため、データ更新処理実行不可能」になります。
    ここからが違っていて R_FLASH_DM_Erase() で FLASH_DM_FINISH_ERASE が返ってきたので、次は書き込めるのかなと思うと同じ状態になります。

    ルネサスに質問していますが、まだ回答はありません。
    フラッシュメモリデータ管理モジュールFIT について質問しているのが Giggs さんだけでしたのでこのような Reply をさせていただきました。
    ご迷惑でしたらすみません。

Reply
  • はじめまして、SAM と申します。

    『書き込みできました。』ということでしたが、その後いかがでしょうか。
    私は RX72N を使っていますが、しばらく書き込むと書き込みができなくなります。
    Giggs さんと同様に書き込もうとすると「消去ブロックなしのため、データ更新処理実行不可能」になります。
    ここからが違っていて R_FLASH_DM_Erase() で FLASH_DM_FINISH_ERASE が返ってきたので、次は書き込めるのかなと思うと同じ状態になります。

    ルネサスに質問していますが、まだ回答はありません。
    フラッシュメモリデータ管理モジュールFIT について質問しているのが Giggs さんだけでしたのでこのような Reply をさせていただきました。
    ご迷惑でしたらすみません。

Children
  • SAMさん、こんにちは。

    少し前なので記憶が曖昧ですが、私の方はその後特に問題は起きていません。

    一度書き込みができるようになってからは、書き込みができなくなったことはないと思います。

    何か思い出したら、再度Replyします。

  • SAMさん、こんにちは。NoMaYです。

    このスレッドに関わっていましたので気になっているのですけれども、先日のGiggsさんのリプライ以降で何か状況に変わりはありましたでしょうか?(動いていましたよ、の返事の後に見直したら問題箇所が見付かった、ルネサスさんからなかなか回答が来なかったけれども、ようやく回答があって問題箇所が分かった、とか。)

  • NoMaYさん、こんにちは。

    途中経過です。

    ルネサスに xxx_config.h の内容を求められたので
    r_datfrx_rx_config.h と r_flash_rx_config.h を添付し、説明文を添えることで
    それに応じました。

    #define FLASH_CFG_CODE_FLASH_ENABLE (1)

    という内容に対して『・・・コードフラッシュメモリを書き換えることは想定しておりません。』
    と返してきたので、修正して動作確認しましたが、改善されなかったのでその旨を伝えました。
    他の設定については触れていませんでした。

    バンク切替にして動作させながらファームウェアアップデートしようと考えての設定なのですが
    以下の1文を付け加えました。

    『改めて r01an2184jj0480-rx-flash.pdf を読みましたが、書き換えコードをデーターフラッシュメモリーに置かなければ問題ないと思ったのですが如何でしょうか?』

    また報告します。

    SAM

  • SAMさん、こんにちは。NoMaYです。

    いえ、そういう目的であれば、このスレッドで扱ったr_datfrx_rxモジュールは不要ですよ。r_flash_rxモジュールでコードフラッシュを書き換えることが出来ますよ。(r_datfrx_rxモジュールが不要というより、ルネサスさんの返信とおり、r_datfrx_rxモジュールはコードフラッシュに対して使うように設計されたものでは無いです。)

    デュアルバンクでのコードフラッシュの書き換えについては、咄嗟に探して、以下のスレッドがあるのですけれども、参考にはならないでしょうか?ひょっとして、r_flash_rxモジュールで書き換え出来ることは分かっているけれども、それでも、r_datfrx_rxモジュールが持つ何かの特徴ゆえにを使おうとしているのですか?思うに、そのようなことであれば、別のレッドを立てるのが良さそうに思うのです。(ただ、その場合でも、私からのリプライも、r_datfrx_rxモジュールはコードフラッシュに対して使うように設計されたものでは無いのです、というのが前提になってしまうのですけれども。)

    RX66Nでデュアルバンク機能の起動バンク選択機能でのプログラム切り替えが上手くいかない
    community-ja.renesas.com/cafe_rene/forums-groups/mcu-mpu/rx/f/forum5/8077/rx66n

    flash_demo_rskrxについて
    community-ja.renesas.com/cafe_rene/forums-groups/mcu-mpu/rx/f/forum5/7949/flash_demo_rskrx

    r_flash_rx のサンプルについて
    community-ja.renesas.com/cafe_rene/forums-groups/mcu-mpu/rx/f/forum5/7726/r_flash_rx

    デュアルバンク機能時のオブジェクトダウンロード方法とVECTRESETの割り当てについて
    community-ja.renesas.com/cafe_rene/forums-groups/mcu-mpu/rx/f/forum5/7901/vectreset

    スマートコンフィグレータ使用時のブート領域、フラッシュ領域の分割方法について
    community-ja.renesas.com/cafe_rene/forums-groups/mcu-mpu/rx/f/forum5/7915/thread
     

  • SAMさん、こんにちは。NoMaYです。

    それとも、デュアルバンクでのコードフラッシュの書き換えだけでなく、プログラムとして、フラッシュメモリデータ管理モジュールによるデータフラッシュ書き換えも、両方扱うように作っていて、それでそういう設定になっていた、ということでしょうか、、、

  • NoWayさん、こんにちは。

    NoWayさんのおっしゃる通りです。
    パラメーターの保存にデーターフラッシュを使います。
    RX210 の時にいくつかのブロックに分けて格納していましたが、サイズが増えてブロックが複数に亘り、ブロックがずれて、痛い目にあったので DATFRX に飛びついたのです。
    (マクロを使えば良かったとは思ったのですが)
    デュアルバンクは、遠隔ファームウェアバックアップしたいなということで設定だけしていました。

    SAM

  • 横から意見を述べて失礼します

    ブロック消去しようとすると「無効ブロックなし」になります。

    ということですが

    ブロックを確保するAPIを何度も呼んでブロック確保しないのが原因ではないですか

    ブロックはすぐに無くなってしまいます

    イレースする前には十分なブロックを確保してからでないとエラーになります。

  • NoWayさん、IKUZOさん こんにちは。

    ルネサスから回答が来ました。

    私は、内蔵データーフラッシュの全ての領域がデーターの領域であると考え、1024バイト32個と定義していました。何なら確保した領域の中で消去などのやりくりをすると思っていました。

    DATFRX の PDF『6.3.3 ブロック管理』Format1、Format2 について説明していただきました。
    最小限の領域確保にしたところ「消去ブロックなしのため、データ更新処理実行不可能」は今のところ出ていません。

    割り当てていないところを空きブロックとして更新等に使うのですね。
    そして、使えるのは全ブロックの半分ということなんですね。

    (だったら 1024バイトといわず、もっと大きい領域を確保できるようにしてくれといいたくなりましたがしたが)

    全て私のせいです。お騒がせしました。
    もし私の記述に間違いがあれば仰ってください。

  • SAMさん、こんにちは。NoMaYです。

    すみません、何か話が腑に落ちないような気がしました。もし可能であれば、駄目だった時と、動くようになった時の、r_datfrx_rx_config.hをそれぞれ見せて頂くことは出来ませんでしょうか?

    直感として、1024バイトのデータ、というのは管理情報を含めると1025バイト以上ある筈で、それを32個定義した場合、そもそもRX72Nのデータフラッシュサイズ32Kバイトでは扱いきれないのでは?、と思ったのですけれども、、、

    > 1024バイト32個と定義

  • SAMさん、こんにちは。NoMaYです。

    あと、フラッシュメモリデータ管理モジュールは不意の電源OFFに対しても頑丈に動作するように意図して設計されていますので、新しいデータをデータフラッシュメモリに書き込む場合、新しいデータがしっかりと書き込まれたことが確認されるまでは、古いデータを残しておくようになっています。(新しいデータが書き込まれたことが確認されたら即座に古いデータが削除されるというわけでもないですけれども。) そういう意味では、コードフラッシュメモリのデュアルバンク機能のように、同時に記録することの出来るデータの最大量はデータフラッシュメモリの半分のサイズまでとなります。(管理データのことも考慮すると、もう少し減りますけれども。)

    > そして、使えるのは全ブロックの半分ということなんですね。