データフラッシュライブラリ Type4 PFDL_ERR_PARAMETER について

RL78/G13(R5F100MF) にて、データフラッシュライブラリ Type4を使用しています。

データフラッシュの容量が、8K のマイコンです。

仕様としては、ブロックイレース⇒データ書き込みを、1ブロック分のデータ書き込み完了時次のブロックを消去して順次書き込みする形としています。

問題は、0(相対アドレス0)と1(相対アドレス0x400)の2ブロックまではうまくいくのですが、ブロック#2 相対アドレス0x800 のブロック消去(PFDL_OK)し、書き込みコマンドを実行すると、なぜか”PFDL_ERR_PARAMETER”(パラメータのエラー) が返ってきてしまいます。

ブロック0/1がうまくいっているので、何か 2ブロック以降の相対アドレスが書き込めない状況になっていると思われます。API引数が、アドレスとバイト数、配列だけなので、0x800以降が無視されるような根本的な問題のような気もします。

設定など、思い当たるところがないので、行き詰っています。アドバイスをいただきたいと思い、投稿していますのでよろしくお願いします。

  • ライブラリパッケージVer.は、2.00 で、e2studio + CCRL の環境です。この環境での データフラッシュの設定資料が見つけられないのですが、もしそれも知っている人がいたらご紹介いただけると助かります。 

  • Breezeさん、こんにちは。NoMaYと申します。

    > ライブラリパッケージVer.は、2.00 で、e2studio + CCRL の環境です。この環境での データフラッシュの設定資料が見つけられないのですが、もしそれも知っている人がいたらご紹介いただけると助かります。

    私は以下のドキュメントでよいと思うのですけれども、これは見付かりませんでしたのでしょうか?

    RL78 ファミリ データ・フラッシュ・ライブラリType04 日本リリース版
    R01US0049JJ0106 Rev.1.06 Pages 2018.10.31
    www.renesas.com/jp/ja/document/mat/rl78-family-data-flash-library-type04-users-manual
     

  • はい、これは持っておりますし、これに従って実装はして、ブロック#0と#1は動作しています。今回欲しい資料は、e2studio+CCRLのプロジェクト上の必要設定資料です。V2.00のパッケージ中の資料(R20UT0749JJ0105、Rev.1.05、2018.10.25)において、CubeSuiteなどの古い環境の設定資料しか、ありませんでした。e2studio になってから久しいと思うのですが、e2studio版が欲しい。

    ーー

    今回困っているのは、ブロック#2以降のアドレス指定時、関数戻り値のエラーとなり使えないので、推測の域を脱しないですが何らかのブロック設定(使用アドレス設定)等があるのではという推測に基づいています。資料が更新されてないなら、すでに設定している方にアドバイスをいただきたいという感じです。

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

    以下でGoogle検索して最初の3ページにありませんので存在しないと思いますよ。私が思うに、もう皆さん、コード生成機能でデータフラッシュライブラリを使うよう設定して、いざビルドしてみると幾つかファイルが足りないことに気付いて、(憤慨しつつ)ファイルをネットで探してダウンロードして追加して、ビルドに成功したら、後は普通に使えている、という状況だと思うのですけれども。(たぶん、過去5年ぐらいでは、今回の案件に記憶が無いですので。それ以前となると、かふぇルネにお邪魔していませんでしたので、ちょっと分からないですけれども。)

    Google検索: RL78 データフラッシュ
    https://www.google.com/search?q=RL78+データフラッシュ

    ただ、あまりに簡単なテストプログラムだと、先程のドキュメントの以下の2つの注意事項の2番目に該当してしまうケースはあるようでした。(記憶があいまいですが、そんなことが私にもあった気がします。)

    2. 2. 2 セルフRAM
    2. 2. 4 スタック、データ・バッファ

  • 回答ありがとうございます

    セルフRAMのリスト(R20UT2943JJ0305)をみても、確保は不要なマイコン種となってます。スタックやバッファならば、ブロック位置に関係なくエラーになると思います。

    きっちり、ブロック#2(0x800)以降、コマンド受付エラーになるので、何か根本的な要素があるのかもしれないとは思っています。

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

    そうでしたか。手持ちのRL78/G14ボードで試作してみますね。(RL78/G13で無くて申し訳ないのですけれども。)

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

    自分で試して思ったのですけれども、以下のことを試して書き換えられるか確認して頂けませんか?

    (1) コード生成機能でデータフラッシュライブラリを使うだけのプロジェクトを作る(ウォッチドッグタイマも使わない)
    (2) 以下のzipファイルのCC-RL用サンプルのr_pfdl_sample_c.cをe2 studioのプロジェクトのsrcフォルダへコピーする
    (3) 同zipファイルのpfdl関連ファイルをe2 studioのプロジェクトへコピーする(今されている通りで構わないです)
    (4) e2 studioのsrcフォルダのr_main.cをビルドから除外する(main()がr_pfdl_sample_c.cと重複してしまうからです)
    (5) CC-RL用サンプルのr_pfdl_sample_c.cを以下のように変更する
    (6) ビルドしてダウンロードする
    (7) CC-RL用サンプルのr_pfdl_sample_c.cの終了箇所にブレークポイントを設定して実行する(以下の画面コピーを参照)
    (8) メモリウィンドウで0xF1800番地を確認する(以下の画面コピーを参照)

    RL78ファミリ データフラッシュライブラリ Type04 パッケージ Ver.2.00
    www.renesas.com/jp/ja/document/upr/data-flash-library-type04-package-ver200-rl78-family
    FDL_RL78_Type04_Installer_V200-doc-j.zip解凍後にインストーラを実行
    インストール後のFDL/CCRL_100/Sample/C/r_pfdl_sample_c.c

    e2 studioのプロジェクトのsrcフォルダへコピーしたCC-RL用サンプルのr_pfdl_sample_c.cの変更箇所(赤文字箇所)

    /* 基本データ */
    #define R_PFDL_SAM_BLOCK_SIZE   0x400l  /* 標準ブロック・サイズ               */
    #define R_PFDL_SAM_TARGET_BLOCK 2/*0*/       /* 書き込み開始ブロック(0x0:F1000H)   */
    #define R_PFDL_SAM_WRITE_SIZE   10      /* 書き込みデータサイズ               */
    #define R_PFDL_SAM_DREAD_OFSET  0x1800/*0x1000*/  /* 直接読み込みオフセット・アドレス   */

     

    /******************************************************************************
    * Outline           : hdwinit function
    * Include           : none
    * Declaration       : void hdwinit(void)
    * Description       : Initialization of the hardware.
    * Argument          : none
    * Return Value      : none
    * Calling Functions : start-up routine
    ******************************************************************************/
    void hdwinit_WHICH_IS_USED_WHEN_WITHOUT_CG( void )
    {
    。。。途中省略。。。
    }

     
    以下、e2 studioの画面コピーです。




     

  • NoMaYさん、いろいろ貴重なお時間にて調査いただきありがとうございました。m(__)m

    設定した内容をログを埋めながら調査を進めていたところ私のプログラムミスであることがわかりました。

    不具合内容的には、ブロック#2以降に限り、アドレスの処理ミスがあり、正常に動作できてませんでした。

    また、ソース修正後正常に全ブロック、全エリア 順次消去書き込みができる確認もできました。

    別途投稿にて、e2studio+CCRLにおいて、今後使用する方々のために、データフラッシュ を使うまでの足取りをまとめておきます

  • e2studio + CCRL で、データフラッシュを使用するまでのまとめ

    <必要資料とその概要>

    RL78G13_データフラッシュType4_アプリケーションノート

    (ファイル名)REN_r01an2827jj0100_rl78_APN_20150528_1.pdf

    ⇒データフラッシュ使用時のハードソフトの全体像がつかめる資料

     

    RL78セルフRAMリスト

    (ファイル名)REN_r20ut2943jj0305_rl78_MAH_20210205.pdf

    ⇒マイコン種類ごとの設定要不要と必要なセルフRAMのアドレスを参照できます

     

    RL78データフラッシュライブラリType04ユーザーズマニュアル

    (ファイル名)REN_r01us0049jj0106_rl78_MAT_20181031.pdf

    ⇒ソフト実装に必要な情報:実装フローや実行サイクル、注意事項などの詳細

     

    V2.00モジュールダウンロード資料:FDL_RL78_Type04_Installer_V200-doc-j

    (ファイル名)r20ut0749jj0105_rl78.pdf

    ⇒モジュールのインストール方法とプロジェクトの設定

     ※プロジェクトはCS+とかCubesuiteベースなので、e2studioとは差異があります

     

    <モジュールのダウンロードとインストール>

    RL78 データフラッシュライブラリ Type04 V2.00

    [概要]

    CC-RLコンパイラ用パッケージ Ver.1.05とCA78K0Rコンパイラ用パッケージVer.1.05が、一つのファイルに統合されてV2.00としているだけ

    [ダウンロード]

    FDL_RL78_Type04_Installer_V200-doc-j

    [解凍]

    RENESAS_RL78_FDL_T04_2V00.exe を実行すると、以下ファイル群が解凍される

    pfdl_types.h

    pfdl.h

    pfdl.inc ※アセンブラで記述しない場合は不要

    ・pfdl.lib 

    [インストール]

    ⇒これらのファイルを、プロジェクトファイルのフォルダに入れるだけ

    E2studioでは、フォルダに入れるとプロジェクト読み込み時自動でプロジェクトに組み込まれる

    ⇒プロパティ⇒C/C++ビルド⇒設定⇒ツール設定⇒Linker⇒入力 にて、ライブラリに.lib ファイル追加 ※ワークスペース相対登録要

     

    <プロジェクト上の設定>

    [プロパティ設定]

    プロパティ⇒C/C++ビルド⇒設定⇒Linker⇒セクションの自動セクションのチェックをつけてると自動でセクション設定される ※リンクディレクティブ不要

    ⇒その他は、r20ut0749jj0105_rl78.pdf の記述を参考に設定する

    プロパティ⇒C/C++ビルド⇒設定⇒ツール設定⇒Linker⇒デバイス内の以下の項目設定する

    ビルド後に、できる map にて、生成アドレスが正しいかを確認しておく

     

    [自動生成]

    ⇒コード生成⇒クロック発生回路⇒データフラッシュにて、アクセス許可と使用するをチェックする。コードを生成するを実行すると、r_cg_pfdl.c/h ができる

     

    <実装>

    サンプルがモジュール解凍時に入っている(r_pfdl_sample_c.c)ので、参考に前述資料を見ながら実装

  • データフラッシュ使用時のノーレッジFAQ のページを載せ忘れたので、記載しておきます。

    ja.na4.teamsupport.com/.../17797456