FDL使用時、TARGET_BLOCKを変更したい場合

はじめまして。

私、マイコン初心者でいきなり実践をさせられている者です。

初質問でお手数ですが、わかる方ご返信をお願い致します。

FDLの環境構築は済まされていて、前回は工場内の試験工程で#define TARGET_BLOCK 0の、00xF1010のアドレスから4bytesフラッシュ(xxA電流値)を書き換えれば良いだけでした。

流れとしては、

user_define.hでの#define

#define FLASH_START_ADDRESS (0xF1000)   /* Start address of data flash */
#define TARGET_BLOCK (0)   /* Block number of target(0 ~ 3) 
#define BLOCK_SIZE (0x400)   /* Block size */
#define WRITE_SIZE (1)   /* Size of data to be written at once */
#define MAX_VALUE (0xFF)   /* Maximum value of writing */
#define MAX_ADDRESS ((TARGET_BLOCK + 1) * BLOCK_SIZE - 1)   /* Maximum address of writing */
#define PFDL_NG (1)   /* Failure to Data Flash */
#define FDL_FRQ (32)   /* Setting frequency (MHz) */
#define FDL_VOL (0x00)   /* Voltage mode */

r_main.c

#define EEPROM_START_ADDRESS 0x0010   //EEPROMアクセス先頭アドレス

今回は1度上記と同じ工程を踏んだ後、納入先の工場で再度違う情報を書き込む必要があり、書き込む前には

R_FDL_ClearDataFlash(); 又は R_FDL_Erase();を用いて消去する必要がある。と認識しています。

但し、上記の2関数共に1TARGETブロック(1KBytes)を丸々消去(all 0xFF)してしまうので、工場で1度書き込んだ値が消去されます。

理想的なのは、工場検査工程後又は納入先の工場で、例えばTARGET_BLOCKを1に切り替えてR_FDL_ClearDataFlash(); 又は R_FDL_Erase();を用いて消去して

納入先の工場で必要な情報をTARGET_BLOCK 1に書き込む。としたいのですが、可能なものでしょうか?

使用しているマイコンはRL78 G13 RF5F100AA 30pin フラッシュ領域4kbytesです。

逆にTARGET_BLOCKを切り替えられないとなると、4kBYTESを1kBYTES毎に区切る必要も無いような気がしますが如何なものでしょうか?

拙い文書で恐縮ですが、ご回答よろしくお願い致します。

Parents
  • チョコです。

    RL78でFDLは使ったことはありませんが、誰もリプライしていないようなので、コメントします。

    FDLのマニュアルには、以下のような記述があります。

    FDLのライブラリでは以下のような引数になっていると書かれています。

    つまり、ブロックを自由に指定できるということです。

    >但し、上記の2関数共に1TARGETブロック(1KBytes)を丸々消去(all 0xFF)してしまうので、工場で1度書き込んだ値が消去されます。

    消去が必要なら、残したいデータは前もって読み出し、消去が完了したら、書き戻すようなことも考えられます。

    >工場検査工程後又は納入先の工場で、例えばTARGET_BLOCKを1に切り替えてR_FDL_ClearDataFlash(); 又は R_FDL_Erase();を用いて消去して

    >納入先の工場で必要な情報をTARGET_BLOCK 1に書き込む。としたいのですが、可能なものでしょうか?

    FDLのライブラリの引数を適切に設定すれば、問題なくできるはずです。問題なのは、引数を#defineで定義してしまっていることです。

    そのようにしたことをきちんと明確化すべきですが。

    以上

     

Reply
  • チョコです。

    RL78でFDLは使ったことはありませんが、誰もリプライしていないようなので、コメントします。

    FDLのマニュアルには、以下のような記述があります。

    FDLのライブラリでは以下のような引数になっていると書かれています。

    つまり、ブロックを自由に指定できるということです。

    >但し、上記の2関数共に1TARGETブロック(1KBytes)を丸々消去(all 0xFF)してしまうので、工場で1度書き込んだ値が消去されます。

    消去が必要なら、残したいデータは前もって読み出し、消去が完了したら、書き戻すようなことも考えられます。

    >工場検査工程後又は納入先の工場で、例えばTARGET_BLOCKを1に切り替えてR_FDL_ClearDataFlash(); 又は R_FDL_Erase();を用いて消去して

    >納入先の工場で必要な情報をTARGET_BLOCK 1に書き込む。としたいのですが、可能なものでしょうか?

    FDLのライブラリの引数を適切に設定すれば、問題なくできるはずです。問題なのは、引数を#defineで定義してしまっていることです。

    そのようにしたことをきちんと明確化すべきですが。

    以上

     

Children
  • チョコ様

    ご回答頂き、ありがとうございます。

    チョコ様のご指摘を受け、#define TARGET_BLOCK 0を必要な場所で

    #undef TARGET_BLOCK

    #define TARGET_BLOCK   1

    に変更して対応してますが、その後が中々うまくいきません。

    とりあえずはご回答ありがとうございました。

  • チョコです。

    TARGET_BLOCKを1に変更するのは、いいのですが、実際に書き込むときのアドレスもこれに合わて、F1400~F17FFの範囲のアドレスになっていますか。

    ブロックとアドレスの関係がきちんとしていないとおかしな結果になります。

    以上