r_fwup Rev.2.00 はリトルエンディアン限定でしょうか?

お世話になっています。

よしとです。

r_fwup Rev.1.06 を使って RX66N のセルフアップデート動作を組み込んでいましたが、r_fwup Rev.2.00 でシリアルポートの制御がユーザアプリケーション側で設定できるようになったため、r_fwup Rev.2.00 への移行を検討しています。

以下の条件で初期書き込みファイルを生成して Renesas Flash Programmer で書き込んだ後、bootloader のエリア(128kB) だけを消去して上書きする設置で bootloader のプロジェクトをデバッグしています。

【条件】

MCU :RX66N デュアrモード(R5F566NNDxBD_DUAL)

エンディアン:Big

bootloader サイズ:128kB(ボードの初期化処理が必要なため、64kB では厳しい)

メインエリア:0xFFE00000 ~ 0xFFFDFFFF

bootloaderエリア:0xFFFE0000 ~ 0xFFFFFFFF

バッファエリア:0xFFC00000 ~ 0xFFDFFFFF

認証方式:sha256-ecdsa

hash_sha256() 関数で読み込まれる st_fw_desc_t 構造体部分のデータは下記の様になっています。

n の値は 2 であるはずだと思うのですが、0x02000000 となっており、とんでもなく大きな値になってしまって、

hash_sha256() の検証ループから延々抜け出せないような状況になってしまっていました。

r_fwup Rev.2.00 のアプリケーションノートには、動作確認環境として「リトルエンディアン」と明記されていますが、

ビッグエンディアンのプロジェクトは考慮されていないのでしょうか。

或いは Renesas Image Generator で初期書き込みファイルを生成する時にビッグエンディアンのプロジェクトの場合

指定すべきオプションが存在するのでしょうか?

何かとんでもない間違いをしでかしているような気もしますが、ご教授頂ければ幸いです。

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

  • よしとです。

    自己レスをお許しください。

    Renesas Image Generator の  Python ファイル image-gen.py 内に有る little の文字列を全て big に書き換えて

    初期書き込みファイルを生成し直してそれを書き込みましたところ rsu ヘッダ内の情報はビッグエンディアンのバイト配置で

    出力され、dc に読み込んだデータも正しくなり、R_FWUP_VerifyImage(FWUP_AREA_MAIN) での検証をパスするようになりました。

    取り敢えずこれでデバッグを続けることにします。

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

  • お世話になっています。 よしとです。

    続けて質問させてください。

    その後、メインファームで SCI 経由のファームアップ機能のデバッグを行っております。

    FWUP_FLASH_BUF_SIZE が (128 * 2) と定義されていますので、.rsu ファイルの先頭 256 バイトを受信したときに

    R_FWUP_WriteImage() がコールされ、マジックコードのチェックをパスして、バッファエリアを消去するために

    erase_area() がコールされます。 erase_area() からは r_fwup_wrap_flash_erase() が呼び出されるわけですが、

    その先頭に下記の記述が有ります。

    #if (FLASH_TYPE == FLASH_TYPE_1)
        blk_addr = addr;
    #else
        blk_addr = addr + (FWUP_CFG_CF_BLK_SIZE * (num_blocks - 1));
    #endif

    この最初の #if の条件は (FLASH_TYPE != FLASH_TYPE_1) が正解ではないでしょうか。

    使っているのは RX66N でフラッシュタイプは 4 ですが、オリジナルのコードでは下記の様にフラッシュタイプ 1 の

    消去する最終ブロックを R_FLASH_Erase() の第一引数に指定する仕様となってしまっています。

    ご教授よろしくお願いいたします。

  • よしとです。

    すみません、上記の質問は私の勘違いでした。

    フラッシュモジュールのアプリケーションノートに記載されている下記の記述をブロック番号が大きくなる方向を

    「アドレスが大きくなる方向」であると勘違いしていました。

    /* フラッシュタイプ3、4の製品の場合 */
    /* コードフラッシュメモリのブロック5を起点にブロック番号が大きくなる方向にイレーズされる */
    /* 以下の場合、コードフラッシュメモリのブロック5、6がイレーズされる */

    アドレスの昇順とブロック番号の昇順は逆に定義されていましたので、オリジナルの記述で正解ですね。

    申し訳ありませんでした。