RX66N ファームアップでバンクスワップ動作しない

RX66N をデュアルモードでファームアップを検討しています。
モジュールのバージョンと設定などは以下の様になっています。
バンクスワップが巧くいかないため、ご教授をよろしくお願いいたします。

デバッグ環境:e2studio + E2 Lite
エンディアン:Big
r_fwup : 1.06
r_flash_rx : 4.91
プロジェクト(スマートコンフィグレータの「ボード」タブ内)ターゲットデバイス :R5F566NNDxBD_DUAL
デバッグ構成の Target Device  :R5F566NN_DUAL
内蔵プログラムを書き換えるプログラムをデバッグする:はい
内蔵データ・フラッシュを書き換えるプログラムをデバッグする:はい
起動バンクを変更する:(意味を取り違えている可能性を考え、「はい」と「いいえ」の両方を試しましたが同じ結果)
起動バンク:バンク0

サンプルプロジェクトの bootloader を参考に bootloader をデバッガで動作させ、
初期ファーム単体を .rsu ファイルに変換して SCI で転送して書き込みを行い
ハッシュによる正当性チェックは OK となっています。

その後、bootloader はバンクスワップへと進むのですが、実際にはスワップが成功せず
バンクスワップを行う動作の無限ループに陥ってしまいます。

以下は SCI による転送の末尾付近からの様子を示す Renesas Debug Virtual Console の出力です。

----------- Renesas Debug Virtual Console ここから ---- >8 ------
(前略)
installing const data...96%(31/32KB).
installing const data...100%(32/32KB).
completed installing const data.
integrity check scheme = hash-sha256
bank1(temporary area) on code flash integrity check...OK
software reset...
-------------------------------------------------
BOOTLOADER demo version 0.1.1
FWUP FIT module version 1.06
-------------------------------------------------
Secure boot program
-------------------------------------------------
Checking flash ROM status.
bank 0 status = 0xff [LIFECYCLE_STATE_BLANK]
bank 1 status = 0xfe [LIFECYCLE_STATE_TESTING]
bank info = 1. (start bank = 0)
integrity check scheme = hash-sha256
bank1(temporary area) on code flash integrity check...OK
update LIFECYCLE_STATE from [LIFECYCLE_STATE_TESTING] to [LIFECYCLE_STATE_VALID]
bank1(temporary area) block0 erase (to update LIFECYCLE_STATE)...OK
bank1(temporary area) block0 write (to update LIFECYCLE_STATE)...OK
swap bank...[FWUP_STATE_BANK1_UPDATE_LIFECYCLE_WRITE_COMPLETE and LIFECYCLE_STATE_VALID]
-------------------------------------------------
BOOTLOADER demo version 0.1.1
FWUP FIT module version 1.06
-------------------------------------------------
Secure boot program
-------------------------------------------------
Checking flash ROM status.
bank 0 status = 0xff [LIFECYCLE_STATE_BLANK]
bank 1 status = 0xf8 [LIFECYCLE_STATE_VALID]
bank info = 1. (start bank = 0)
bank0(current) is blank, but bank1(previous) is still alive.
swap bank...-------------------------------------------------
BOOTLOADER demo version 0.1.1
FWUP FIT module version 1.06
-------------------------------------------------
Secure boot program
-------------------------------------------------
Checking flash ROM status.
bank 0 status = 0xff [LIFECYCLE_STATE_BLANK]
bank 1 status = 0xf8 [LIFECYCLE_STATE_VALID]
bank info = 1. (start bank = 0)
bank0(current) is blank, but bank1(previous) is still alive.
swap bank...
(以下繰り返し)
----------- Renesas Debug Virtual Console ここまで ---- >8 ------

r_flash_type4.c に有る flash_toggle_banksel_reg() の関数から return する直前で
ブレークして BANKSEL レジスタを見ると下記の様に FFFFFFFF のままで
BANKSWP が 000 になっていません。
なお、MDE は下記の様に FFFFFF88 となっており、DUAL mode になっています。

BANKSEL 0x00000000FE7F5D20 FFFFFFFF
MDE 0x00000000FE7F5D00 FFFFFF88

何か大ボケをかましていますでしょうか。

以上、よろしくお願いいたします。

Parents
  • よしと さん、こんにちは。NoMaYです。

    暗号化処理ありのブートローダのサンプルでのことなのですね。LIFECYCLE_STATEがどうだとか色々表示されていますね。すみません、触ったことが無いのですけれども、サンプルプログラムにはRX66Nのものは入っていなかったのでしょうか?(ごめんなさい、後で自分でもサンプルプログラムのURLを探してみます。)


    [メモ]

    後で調べてみることのメモです。(すみません、置かせて下さい。)

    ・e2 studioはオプション設定メモリのe2 studio内/gdb内/gdbserver内のキャッシュをちゃんと破棄しているだろうか?(CS+なら信頼出来るが)
    ・bank0(current) is blank, but bank1(previous) is still alive.のメッセージを出しているのはソースのどこか?

  • NoMaY さん、コメントありがとうございます。

    サンプルコードにはRX66Nは入っていません。

    一番近いのはRX72Nかと思います。

  • よしとさん

    こんにちは、シェルティです。

    このログ、私が書いたコードですね。お手数おかけしてすみません。各バンクが以下状態になるまでは期待通りで、そのあとバンクスワップしてVALIDになったファームがBank0にスワップされてBank0が起動する、というのが期待ですが、バンクスワップ出来てない感じですね。

    bank 0 status = 0xff [LIFECYCLE_STATE_BLANK]
    bank 1 status = 0xf8 [LIFECYCLE_STATE_VALID]

    https://github.com/renesas/rx-driver-package/blob/master/source/r_flash_rx/r_flash_rx_vx.xx/r_flash_rx/doc/ja/r01an2184jj0491-rx-flash.pdf

    1個気になるところとしてこのマニュアルの「5.3.1.2 デュアルバンク機能を使用してコードフラッシュを書き換える場合」が設定済かどうか、ですね。

    RX66Nなのでたぶん新規プロジェクト作成されたと思うのですが、その場合、このあたりの設定を手動で実行しないといけなくて、上記が抜けているのではないかなと推測しています。ただでもこの設定が抜けていたとして、たぶん暴走して止まるからソフトウェアリセットが発行されずログの出方が異なるかもしれないなあとも考えており、別要因かもしれません。

    NoMaYさんのご質問に答えますと「bank0(current) is blank, but bank1(previous) is still alive.」は以下にあります。

    https://github.com/renesas/rx-driver-package/blob/efa200d686d4f5083e21a8b9ef57f49950dd3c3c/source/r_fwup/r_fwup_vx.xx/r_fwup/src/r_fwup_boot_loader.c#L775

    以上です

  • シェルティさん、こんにちは。

    コメントありがとうございます。

    「5.3.1.2 デュアルバンク機能を使用してコードフラッシュを書き換える場合」を確認しましたところ、コードフラッシュのセクション(PFRAM2)のアドレスをRAMのセクション(RPFRAM2)のアドレスにマッピングする部分が抜けていました。

    設定は追加しましたが、今はデバッグ環境に接続できないので、今夜遅くか明日にでも動作を確認させていただきます。

    マニュアルをちゃんと読みつくしておらず、ご面倒をお掛けしているにもかかわらずご丁寧な説明、ありがとうございます。

    結果は後程ご報告いたします。

  • シェルティさん

    おはようございます。

    昨日ご指摘いただきました設定の追加を行ったプロジェクトで動作確認を行いました。

    その結果、flash_toggle_banksel_reg() がRAM上に配置され、jump to user program が正常に機能することを確認いたしました。

    的確なご指摘、ありがとうございました。

    以上、よろしくお願いいたします。

  • よしとさん

    シェルティです、こんにちは。

    ご連絡ありがとうございます! RX66Nでも動作して良かったです。

    他にもおかしな動きがあれば教えてください。可能な限り支援いたします。

    以上です

Reply
  • よしとさん

    シェルティです、こんにちは。

    ご連絡ありがとうございます! RX66Nでも動作して良かったです。

    他にもおかしな動きがあれば教えてください。可能な限り支援いたします。

    以上です

Children
  • シェルティさん

    お言葉に甘えて一つだけ申し上げますと、r_fwup のスマートコンフィグレータでのカスタマイズ項目の Port symbol of I/O port と Bit symbol of I/O port が e2studioプラグインの画面上ではグレーアウトして設定が変更できない項目になっています。

    しかし、私が使っているのはカスタムボードですのでここの設定変更が必要で、.scfg ファイルを直接エディタで編集して変更いたしました。

    スマートコンフィグレータ画面上で変更ができると便利かと思いました。

    以上、よろしくお願いいたします。

  • よしとさん

    シェルティです、こんにちは。

    r_fwupの社内GitLabリポジトリのIssueにこの要望をコピペして書き込んでおきました。ご指摘の通りでカスタムボードの時にスマートコンフィグレータはまだちょっと融通が利かないところ(ユーザがちょっとトンチを働かせないといけないところ)が残ってますね。

    改善を目指します。ご指摘感謝いたします。

    以上です

  • シェルティさん

    こんにちは。

    GitLabリポジトリへIssueを書き込んでいただいたとのこと、ありがとうございました。

    また何かありましたらよろしくお願いいたします。

    以上です