RX65N Cloud KitのFreeRTOS OTA(Over-The-Air)サンプルプログラムをデバッグする


環境準備

Renesas RX65N Cloud KitでFreeRTOS OTA(Over-The-Air)サンプルプログラムをデバッグする方法を確認してみました。

  • FreeRTOS OTAサンプルプログラムを動作させるためにはルネサス公式サイトの以下のアプリケーションノートが参考になります。
  • しかし、以下のアプリケーションノートはRenesas Flash ProgrammerでOTAサンプルプログラムをフラッシュメモリに書き込んで、プログラムを起動させるだけなので、OTAサンプルプログラムをe2 studioを使用してプログラムをデバッグすることができません。
  • e2 studioの機能でブートローダとファームウェアのプログラムを同時にRenesas RX65N Cloud Kitにダウンロードする機能もありますが、ブートローダがファームウェアを起動するために必要な署名検証データはRenesas Secure Flash Programmerを使用して付加されるものなので、同じくデバッグすることはできません (署名検証でFailします)。
  • そのため、今回は以下のアプリケーションノートの手順を変更してOTAサンプルプログラムをデバッグする方法を検討しました。

RX ファミリ RX65N における Amazon Web Services を利用したFreeRTOS OTA の実現方法
Renesas ルネサス MCU におけるファームウェアアップデートの設計方針

準備した環境は以下の通りです。
1. Renesas RX65N Cloud Kit (評価ボード)
2. e2 studio 2021-07 (統合開発環境)
3. GCC for Renesas 8.3.0.202004-GNURX Windows (RXマイコン用コンパイラ)
4. Win64 OpenSSL v3.0.1 (署名検証に必要)
5. Renesas Secure Flash Programmer = mot-file-converter v1.0.1 (署名検証データの付加に必要)
6. RX版 FreeRTOS v202002.00-rx-1.0.5

ファームウェアの初期バージョンを作成する

下記アプリケーションノートのPage.26まで進めてRenesas Secure Flash Programmerを使用して、userprog.motを作成します。
この時点でuserprog.motに署名検証データが付加されます。

RX ファミリ RX65N における Amazon Web Services を利用したFreeRTOS OTA の実現方法

アプリケーションノートはCC-RXコンパイラで説明されていますが、GCCコンパイラでも手順はほぼ同じです。
セクション設定の手順のみ異なるので、linker_script.ldを開き、linker_script.ldタブで以下のように設定します。

ファームウェアの初期バージョンをデバッグ可能な形式に変換する

ここからアプリケーションノートとは手順が異なります。
作成したuserprog.motをe2 studioでデバッグ可能なファイル形式に変換します。
コマンドプロンプトを起動して、e2 studioから出力されたデバッグサポート用のファイルが格納されているディレクトリに移動します。
通常であれば、C:\Users\%Username%\.eclipse\com.renesas.platform_xxxxxxxxxx\Utilities\ccrxに格納されています。

com.renesas.platform_xxxxxxxxxxのxxxxxxxxxはe2 studioのバージョンに依存すると思います。

移動したディレクトリにuserprog.motをコピーしておき、エンディアンによって以下のコマンドを実行します。

リトルエンディアンの場合
rx-elf-objcopy.exe userprog.mot -O elf32-rx-le -I srec userprog.elf
ビッグエンディアンの場合
rx-elf-objcopy.exe userprog.mot -O elf32-rx-be -I srec userprog.elf

もしCC-RXコンパイラを使用している場合は、追加で以下のコマンドを実行します。

CC-RXコンパイラを使用している場合
renesas_cc_converter.exe userprog.elf userprog.x

e2 studioを使用してデバッグを開始する

e2 studioの「デバッグ構成」からboot_loader HardwareDebugを選択して、以下のように設定を変更します。

  • 「メイン」タブで「C/C++アプリケーション」の参照を押して「userprog.elf」を指定する。

CC-RXコンパイラを使用している場合は、「userprog.x」を指定してください。

  • 「Debugger」タブの「Connection Setting」で「起動バンク」を「バンク0」に設定する。
  • 「デバッグツール設定」で「内蔵プログラムROMを書き換えるプログラムをデバッグする」を「はい」に設定する。
  • 「Startup」タブを開いて「イメージとシンボルをロード」を以下のように変更する。
    • 「userprog.elf」の「ロード・タイプ」を「イメージのみ」に変更する。
    • 「追加」から「aws_demos.elf」を追加して「ロード・タイプ」を「シンボルのみ」に変更する。
    • 「追加」から「boot_loader.elf」を追加して「ロード・タイプ」を「シンボルのみ」に変更する。

CC-RXコンパイラを使用している場合は、それぞれ.xファイルを指定してください。

デバッグボタンを押してデバッグを開始してください。
ブートローダの「boot_loader.c」のファームウェアを起動する処理でブレークポイントを貼って、プログラムを実行させると設定したブレークポイントでプログラムが停止することを確認します。
これでブートローダが署名検証データを使用して、ファームウェアの署名検証をPASSされたことが確認できます。

次にファームウェアの「main.c」内のmain関数にブレークポイントを貼って、プログラムを実行させると設定したブレークポイントでプログラムが停止することを確認します。
これでブートローダが正常にファームウェアを起動したことがわかります。

ファームウェア更新後の更新ファームウェアをデバッグする

最後にアプリケーションノートのPage.32以降の作業を進めて、ファームウェア更新後の更新ファームウェアをデバッグします。
ブートローダの「boot_loader.c」のファームウェアを起動する処理でブレークポイントを貼っておきます。

ファームウェア更新後に設定したブレークポイントでプログラムが停止することを確認したら、下記GDBコマンドを実行します。
GDBコマンドの実行はe2 studio下部の「Debugger Console」で実施します。
本GDBコマンドを実行することで、更新ファームウェアのシンボル情報がロードされます。

実行するGDBコマンド(更新ファームウェアの.elfファイルがTempフォルダ内にある場合)
symbol-file C:\/Temp\/aws_demos.elf -readnow

CC-RXコンパイラを使用している場合は、.xファイルを指定してください。

これでプログラムを再開させると更新ファームウェアのソースコードにプログラムカウンタが停止するはずです。

さいごに

今回はルネサスエレクトロニクス社が提供しているOTAサンプルプログラムをデバッグする方法について検討しました。
RXファミリのFreeRTOSにOTA機能を実装したい場合に参考になると思います。