お世話になっています。
よしとです。
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 で初期書き込みファイルを生成する時にビッグエンディアンのプロジェクトの場合
指定すべきオプションが存在するのでしょうか?
何かとんでもない間違いをしでかしているような気もしますが、ご教授頂ければ幸いです。
以上、よろしくお願いいたします。
お世話になっています。 よしとです。
続けて質問させてください。
その後、メインファームで 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がイレーズされる */
アドレスの昇順とブロック番号の昇順は逆に定義されていましたので、オリジナルの記述で正解ですね。
申し訳ありませんでした。