こんにちは。よこです。
wifiドライバをプロジェクトにインクルードしたら、以下のエラーが発生しました。
改善方法についてご教授願えないでしょうか。
よこさん
シェルティです、こんにちは。
私がRX用のwifiドライバ設計しました。お手数おかけしております。
どのようなプロジェクトにwifiドライバをインクルードされたか情報いただけますか?
こちらでは以下のようにプロジェクト新規作成→wifiドライバをスマートコンフィグレータでインクルード、としてみたところ特に問題ありませんでした。
step1) プロジェクト新規作成でFreeRTOSを選ぶ(wifiドライバがFreeRTOSかAzure RTOSに依存)
step2) スマートコンフィグレータでwifiドライバをインポート。そのままビルドするとwifiドライバがSCIのTEI(送信完了割込み)を利用しているのでSCIの設定を見直すようエラーがでるので、スマートコンフィグレータ上でSCIのTEIをEnableにする。ビルド→OK。
以上です
シェルティさん
こんにちは。 よこです。
幾度も支援していただき誠にありがとうございます。
適応しようとしているプロジェクトはアプリケーションノート"RX65N における Amazon Web Services を利用した FreeRTOS OTA の実現方法"のサンプルコードです。
目的: rx65n starter kitとwifi pmod expansion boardを使ってwifiを用いたOTAをしようと考えております。
ご対応していただき、心から感謝申し上げます。
シェルティさんはrx65n cloud kitを改造してrx65n rskに適応させておられましたが、rx65n rskにwifiモジュールを適応しても今回のような制限事項は発生いたしますでしょうか。
こんにちは、シェルティです。
発生すると思います。それとMCUベースのシステムはドライバソフトの付け替えが動的にできるようになっていない場合が多く(システムにたくさんドライバを抱えるとROMが膨れる)、Etherとwifiの切り替えはソースコード群の構成から変更が必要でして、さらに実は今回素材にした①RX65N RSK(Ether)と、②RX65N Cloud Kit(wifi)は、TCP/IPプロトコル処理について①の場合RX65N側、②の場合WIFIモジュール側となっており、Etherからwifiに構成を変更するのに一筋縄ではいきません。よって、今回RX65N RSK(wifi)を実現するために、RX65N Cloud Kit(wifi)をベースにしました。
あと、制限事項ですが、もう少し解析したら制限解除できると思うので週末にもう少し追ってみようと思います。また続報します。よこさんの方では、もしよければ上記ガイドを試してみていただければ、と思います。
ご返信ありがとうございます。
制限事項の件、承知いたしました。
まず、シェルティさんが作成してくださったガイドを試してみます。
シェルティです。こんにちは。
バンクスワップがうまく動かない原因がわかりました。ガイド中にある「ボードの変更」の項目において以下2点の設定がデフォルトに戻っていて、それを復旧させるガイドが足りていませんでした。
①リンカ設定における「ROMからRAMにマッピングするセクション」
②RX65Nの利用デバイスがR5F565NEDxFC_DUAL と "_DUAL" とう接尾語がついたものでなければならないところ、R5F565NEDxFCで再設定されていた
このあたり含めて、今回作成したガイドが不要になるようスマートコンフィグレータでボード変更した際にうまいことアプリに合わせて設定値が "成る" ように改善していきたいと思います。
ガイド更新しました。以下で試してみてください。
cafe_rene_202012.00_2.txt ■環境 e2 studio 2022-01 CC-RX V304 Amazon FreeRTOS v202012.00-rx-1.0.0 Renesas Secure Flash Programmer v1.0.1 ■操作手順 (1)プロジェクトインポート e2 studioのimport projectで "Renesas GitHub FreeRTOS (with IoT Libraries) Project" を選択 Amazon FreeRTOSのバージョン v202012.00-rx-1.0.0 を選択 aws_demos -> \projects\rx65n-cloud-kit-uart-sx-ulpgn\e2studio\aws_demos と boot_loader -> \projects\rx65n-cloud-kit-uart-sx-ulpgn\e2studio\boot_loader を選択しインポート (2)aws_demosとboot_loaderのセクション設定を保存 プロジェクトエクスプローラのaws_demosで右クリック->プロパティを選択 C/C++ビルド->設定->ツール設定->Linker->セクション->...ボタン->エクスポート->aws_demos.esiとして保存 プロジェクトエクスプローラのboot_loaderで右クリック->プロパティを選択 C/C++ビルド->設定->ツール設定->Linker->セクション->...ボタン->エクスポート->boot_loader.esiとして保存 (3)コンパイラのバージョン変更 プロジェクトエクスプローラのaws_demosで右クリック->プロパティを選択 C/C++ビルド->設定->Toolchain ツールチェイン: Renesas CCRX バージョン: v3.04.00 プロジェクトエクスプローラのboot_loaderで右クリック->プロパティを選択 C/C++ビルド->設定->Toolchain ツールチェイン: Renesas CCRX バージョン: v3.04.00 (4)ブートローダの設定 boot_loader.scfg をダブルクリック -> RXファミリの開発環境を始めて利用する際はこの時点でRX Driver Packageの最新版のダウンロードが要求されるのでダウンロードしておく(2022/02/26時点でV133が最新版) ボードタブ Custom User Board -> RSKRX65N-2MB (download additional boardsボタンを押して最新のボードファイル(*.bdf)をインストールしておく) クロックタブ メインクロックに変更。後段のクロックが最速になるよう調整 [USBシリアル関連の設定] コンポーネントタブ もし灰色のコンポーネントがあればダウンロードを選択(GitHubをサーチして足りないコンポーネントを自動でダウンロード/インストールする) r_sci_rx channel5: Include -> Not に変更 channel8: Not -> Include に変更 -> 画面下の方にスクロールしていき、SCI8の端子でRXD8とTXD8が「使用する」になっていることを確認 端子タブ SCI8の設定、端子割当のところで、RXD8がPJ1、TXD8がPJ2になっていることを確認 プロジェクトエクスプローラでboot_loader -> src -> smc_gen -> r_bsp_config.h を開く (スマートコンフィグレータ非対応の設定項目を手動設定必要) MY_BSP_CFG_SERIAL_TERM_SCI: 5 -> 8 プロジェクトエクスプローラでboot_loaderを右クリック、Renesas C/C++ Project Settings -> Change Device Target Board は Custom とし、ターゲットデバイスは RX600 -> RX65N -> RX65N -176 pin -> R5F565NEDxFC_DUAL を選択 セクション設定が初期状態に戻るので、boot_loader.esiを読み込む -> プロジェクトエクスプローラのboot_loaderで右クリック->プロパティを選択 C/C++ビルド->設定->ツール設定->Linker->セクション->...ボタン->インポート->boot_loader.esiを読み込み ROMからRAMにマッピングするセクションの設定が初期状態に戻るので、追加設定する。 プロジェクトエクスプローラでboot_loaderを右クリック -> プロパティ -> C/C++ビルド -> 設定 -> ツール設定 -> Linker -> セクション -> シンボル・ファイル -> ROMからRAMにマップするセクション -> PFRAM2=RPFRAM2 を追加 (5)アプリの設定 aws_demos.scfg をダブルクリック ボードタブ Custom User Board -> RSKRX65N-2MB クロックタブ メインクロックに変更。後段のクロックが最速になるよう調整 [USBシリアル関連の設定] コンポーネントタブ もし灰色のコンポーネントがあればダウンロードを選択(GitHubをサーチして足りないコンポーネントを自動でダウンロード/インストールする) r_sci_rx channel5: Include -> Not に変更 channel8: Not -> Include に変更 -> 画面下の方にスクロールしていき、SCI8の端子でRXD8とTXD8が「使用する」になっていることを確認 端子タブ SCI8の設定、端子割当のところで、RXD8がPJ1、TXD8がPJ2になっていることを確認 プロジェクトエクスプローラでaws_demos -> vendors -> renesas -> boards -> rx65n-cloud-kit-uart-sx-ulpgn -> aws_demos -> src -> smc_gen -> r_config -> r_bsp_config.h を開く (スマートコンフィグレータ非対応の設定項目を手動設定必要) MY_BSP_CFG_SERIAL_TERM_SCI: 5 -> 8 [Wifiモジュール関連の設定] コンポーネントタブ もし灰色のコンポーネントがあればそれをクリックしダウンロードを選択(GitHubをサーチして足りないコンポーネントを自動でダウンロード/インストールする)。 この時点でr_wifi_sx_ulpgnは灰色のままでOK。 r_sci_rx channel0: Include -> Not に変更 channel1: Include -> Not に変更 channel6: Not -> Include に変更 ASYNC mode TX queue buffer size for channel 0: 2180 -> 80 ASYNC mode TX queue buffer size for channel 1: 2180 -> 80 ASYNC mode TX queue buffer size for channel 6: 80 -> 2180 ASYNC mode RX queue buffer size for channel 0: 4096 -> 80 ASYNC mode RX queue buffer size for channel 1: 4096 -> 80 ASYNC mode RX queue buffer size for channel 6: 80 -> 4096 -> 画面下の方にスクロールしていき、SCI6の端子でRXD6とTXD6とCTS6#が「使用する」になっていることを確認 注意: 操作手順通りの場合、CTS6# を「使用する」、SCK6を「使用しない」に変更が必要 端子タブ SCI6の設定、端子割当のところで、RXD6とTXD6とCTS6#の「使用する」チェックを入れる 注意: 操作手順通りの場合、SMISO6とSMOSI6の「使用する」チェックを外す変更が必要 RXD6がP01、TXD6がP00、CTS6#がPJ3になっていることを確認 -> 念のためボード回路図を確認し、上記設定の通りの回路になっていること確認 https://www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rx65n-2mb-starter-kit-plus-renesas-starter-kit-rx65n-2mb Renesas Starter Kit+ for RX65N-2MB CPU Board Schematics プロジェクトエクスプローラでaws_demos -> vendors -> renesas -> boards -> rx65n-cloud-kit-uart-sx-ulpgn -> aws_demos -> src -> smc_gen -> r_config -> r_bsp_config.h を開く (スマートコンフィグレータ非対応の設定項目を手動設定必要) MY_BSP_CFG_SERIAL_TERM_SCI: 5 -> 8 もう一度コンポーネントタブに戻る 本バージョンで参照されているwifiドライバの r_wifi_sx_ulpgn v1.11 はGitHubにアップしていない試作版のため 上記ダウンロード機能を用いてGitHubからサーチしても灰色のままになっているはず。それをクリックしバージョン変更を選択しV113を選択。 r_wifi_sx_ulpgn SCI Channel number for SX-ULPGN initial Command Port for AT command communication の値を 6 に変更(SCIチャネル6を使用してWIFIモジュール制御を行うという意味) SCI Channel number for SX-ULPGN second Command Port for AT command communication の値を 6 に変更(SCIチャネル6を使用してWIFIモジュール制御を行うという意味) General-purpose port PDR register connected to the SX-ULPGN EN pin の値を PORTD から PORTF に変更 General-purpose port PODR register connected to the SX-ULPGN EN pin の値を 0 から 5 に変更 注意: コメントがおかしい。修正中。SX-ULPGNのEN端子(POWER端子)の制御をRXマイコン側のポート何番で行うか、の設定項目。このボードではPF5端子を使う回路となっている。 Configure RTS Port No. for WIFI_CFG_SCI_CHANNEL の値を PORT2 から PORT0 に変更 Configure RTS Pin No. for WIFI_CFG_SCI_CHANNEL の値を 2 になっていること確認 プロジェクトエクスプローラのaws_demosを右クリック -> system explorer を開く エクスプローラ上で5階層上り、 vendors -> renesas -> boards -> rx65n-cloud-kit-uart-sx-ulpgn -> aws_demos -> src -> smc_gen -> r_wifi_sx_ulpgn -> フォルダ全体をコピー vendors -> renesas -> boards -> rx_driver_package -> v125 -> r_wifi_sx_ulpgn -> r_wifi_sx_ulpgn -> フォルダ全体を削除 vendors -> renesas -> boards -> rx_driver_package -> v125 -> r_wifi_sx_ulpgn -> r_wifi_sx_ulpgn -> フォルダ全体をペースト r_wifi_sx_ulpgnの新しい版(v1.13)で廃止になったファイルを手動で削除する プロジェクトエクスプローラの vendors -> renesas -> rx_driver_package -> v125 -> r_wifi_sx_ulpgn -> src -> r_wifi_sx_ulpgn_queue.c を右クリック、削除 プロジェクトエクスプローラの vendors -> renesas -> rx_driver_package -> v125 -> r_wifi_sx_ulpgn -> src -> r_wifi_sx_ulpgn_recv_task.c を右クリック、削除 r_wifi_sx_ulpgnの新しい版(v1.13)で追加になったファイルを手動で追加する プロジェクトエクスプローラの vendors -> renesas -> rx_driver_package -> v125 -> r_wifi_sx_ulpgn -> src で右クリック -> 新規 -> ファイル 以下のようにリンクファイルとして3ファイル追加 拡張 -> ファイル・システム内のファイルにリンク にチェックを入れて、以下入力 (これでプロジェクト外ファイルを相対参照できる。外部ライブラリ・ソースコード等リンクの常套手段) AWS_IOT_MCU_ROOT\vendors\renesas\rx_driver_package\v125\r_wifi_sx_ulpgn\src\r_wifi_sx_ulpgn_atcmd.c AWS_IOT_MCU_ROOT\vendors\renesas\rx_driver_package\v125\r_wifi_sx_ulpgn\src\r_wifi_sx_ulpgn_os_wrap.c AWS_IOT_MCU_ROOT\vendors\renesas\rx_driver_package\v125\r_wifi_sx_ulpgn\src\r_wifi_sx_ulpgn_os_wrap.h プロジェクトエクスプローラでaws_demosを右クリック、Renesas C/C++ Project Settings -> Change Device Target Board は Custom とし、ターゲットデバイスは RX600 -> RX65N -> RX65N -176 pin -> R5F565NEDxFC_DUAL を選択 セクション設定が初期状態に戻るので、boot_loader.esiを読み込む -> プロジェクトエクスプローラのboot_loaderで右クリック->プロパティを選択 C/C++ビルド->設定->ツール設定->Linker->セクション->...ボタン->インポート->boot_loader.esiを読み込み ROMからRAMにマッピングするセクションの設定が初期状態に戻るので、追加設定する。 プロジェクトエクスプローラでboot_loaderを右クリック -> プロパティ -> C/C++ビルド -> 設定 -> ツール設定 -> Linker -> セクション -> シンボル・ファイル -> ROMからRAMにマップするセクション -> PFRAM2=RPFRAM2 を追加
■環境 e2 studio 2022-01 CC-RX V304 Amazon FreeRTOS v202012.00-rx-1.0.0 Renesas Secure Flash Programmer v1.0.1 ■操作手順 (1)プロジェクトインポート e2 studioのimport projectで "Renesas GitHub FreeRTOS (with IoT Libraries) Project" を選択 Amazon FreeRTOSのバージョン v202012.00-rx-1.0.0 を選択 aws_demos -> \projects\rx65n-cloud-kit-uart-sx-ulpgn\e2studio\aws_demos と boot_loader -> \projects\rx65n-cloud-kit-uart-sx-ulpgn\e2studio\boot_loader を選択しインポート (2)aws_demosとboot_loaderのセクション設定を保存 プロジェクトエクスプローラのaws_demosで右クリック->プロパティを選択 C/C++ビルド->設定->ツール設定->Linker->セクション->...ボタン->エクスポート->aws_demos.esiとして保存 プロジェクトエクスプローラのboot_loaderで右クリック->プロパティを選択 C/C++ビルド->設定->ツール設定->Linker->セクション->...ボタン->エクスポート->boot_loader.esiとして保存 (3)コンパイラのバージョン変更 プロジェクトエクスプローラのaws_demosで右クリック->プロパティを選択 C/C++ビルド->設定->Toolchain ツールチェイン: Renesas CCRX バージョン: v3.04.00 プロジェクトエクスプローラのboot_loaderで右クリック->プロパティを選択 C/C++ビルド->設定->Toolchain ツールチェイン: Renesas CCRX バージョン: v3.04.00 (4)ブートローダの設定 boot_loader.scfg をダブルクリック -> RXファミリの開発環境を始めて利用する際はこの時点でRX Driver Packageの最新版のダウンロードが要求されるのでダウンロードしておく(2022/02/26時点でV133が最新版) ボードタブ Custom User Board -> RSKRX65N-2MB (download additional boardsボタンを押して最新のボードファイル(*.bdf)をインストールしておく) クロックタブ メインクロックに変更。後段のクロックが最速になるよう調整 [USBシリアル関連の設定] コンポーネントタブ もし灰色のコンポーネントがあればダウンロードを選択(GitHubをサーチして足りないコンポーネントを自動でダウンロード/インストールする) r_sci_rx channel5: Include -> Not に変更 channel8: Not -> Include に変更 -> 画面下の方にスクロールしていき、SCI8の端子でRXD8とTXD8が「使用する」になっていることを確認 端子タブ SCI8の設定、端子割当のところで、RXD8がPJ1、TXD8がPJ2になっていることを確認 プロジェクトエクスプローラでboot_loader -> src -> smc_gen -> r_bsp_config.h を開く (スマートコンフィグレータ非対応の設定項目を手動設定必要) MY_BSP_CFG_SERIAL_TERM_SCI: 5 -> 8 プロジェクトエクスプローラでboot_loaderを右クリック、Renesas C/C++ Project Settings -> Change Device Target Board は Custom とし、ターゲットデバイスは RX600 -> RX65N -> RX65N -176 pin -> R5F565NEDxFC_DUAL を選択 セクション設定が初期状態に戻るので、boot_loader.esiを読み込む -> プロジェクトエクスプローラのboot_loaderで右クリック->プロパティを選択 C/C++ビルド->設定->ツール設定->Linker->セクション->...ボタン->インポート->boot_loader.esiを読み込み ROMからRAMにマッピングするセクションの設定が初期状態に戻るので、追加設定する。 プロジェクトエクスプローラでboot_loaderを右クリック -> プロパティ -> C/C++ビルド -> 設定 -> ツール設定 -> Linker -> セクション -> シンボル・ファイル -> ROMからRAMにマップするセクション -> PFRAM2=RPFRAM2 を追加 (5)アプリの設定 aws_demos.scfg をダブルクリック ボードタブ Custom User Board -> RSKRX65N-2MB クロックタブ メインクロックに変更。後段のクロックが最速になるよう調整 [USBシリアル関連の設定] コンポーネントタブ もし灰色のコンポーネントがあればダウンロードを選択(GitHubをサーチして足りないコンポーネントを自動でダウンロード/インストールする) r_sci_rx channel5: Include -> Not に変更 channel8: Not -> Include に変更 -> 画面下の方にスクロールしていき、SCI8の端子でRXD8とTXD8が「使用する」になっていることを確認 端子タブ SCI8の設定、端子割当のところで、RXD8がPJ1、TXD8がPJ2になっていることを確認 プロジェクトエクスプローラでaws_demos -> vendors -> renesas -> boards -> rx65n-cloud-kit-uart-sx-ulpgn -> aws_demos -> src -> smc_gen -> r_config -> r_bsp_config.h を開く (スマートコンフィグレータ非対応の設定項目を手動設定必要) MY_BSP_CFG_SERIAL_TERM_SCI: 5 -> 8 [Wifiモジュール関連の設定] コンポーネントタブ もし灰色のコンポーネントがあればそれをクリックしダウンロードを選択(GitHubをサーチして足りないコンポーネントを自動でダウンロード/インストールする)。 この時点でr_wifi_sx_ulpgnは灰色のままでOK。 r_sci_rx channel0: Include -> Not に変更 channel1: Include -> Not に変更 channel6: Not -> Include に変更 ASYNC mode TX queue buffer size for channel 0: 2180 -> 80 ASYNC mode TX queue buffer size for channel 1: 2180 -> 80 ASYNC mode TX queue buffer size for channel 6: 80 -> 2180 ASYNC mode RX queue buffer size for channel 0: 4096 -> 80 ASYNC mode RX queue buffer size for channel 1: 4096 -> 80 ASYNC mode RX queue buffer size for channel 6: 80 -> 4096 -> 画面下の方にスクロールしていき、SCI6の端子でRXD6とTXD6とCTS6#が「使用する」になっていることを確認 注意: 操作手順通りの場合、CTS6# を「使用する」、SCK6を「使用しない」に変更が必要 端子タブ SCI6の設定、端子割当のところで、RXD6とTXD6とCTS6#の「使用する」チェックを入れる 注意: 操作手順通りの場合、SMISO6とSMOSI6の「使用する」チェックを外す変更が必要 RXD6がP01、TXD6がP00、CTS6#がPJ3になっていることを確認 -> 念のためボード回路図を確認し、上記設定の通りの回路になっていること確認 https://www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rx65n-2mb-starter-kit-plus-renesas-starter-kit-rx65n-2mb Renesas Starter Kit+ for RX65N-2MB CPU Board Schematics プロジェクトエクスプローラでaws_demos -> vendors -> renesas -> boards -> rx65n-cloud-kit-uart-sx-ulpgn -> aws_demos -> src -> smc_gen -> r_config -> r_bsp_config.h を開く (スマートコンフィグレータ非対応の設定項目を手動設定必要) MY_BSP_CFG_SERIAL_TERM_SCI: 5 -> 8 もう一度コンポーネントタブに戻る 本バージョンで参照されているwifiドライバの r_wifi_sx_ulpgn v1.11 はGitHubにアップしていない試作版のため 上記ダウンロード機能を用いてGitHubからサーチしても灰色のままになっているはず。それをクリックしバージョン変更を選択しV113を選択。 r_wifi_sx_ulpgn SCI Channel number for SX-ULPGN initial Command Port for AT command communication の値を 6 に変更(SCIチャネル6を使用してWIFIモジュール制御を行うという意味) SCI Channel number for SX-ULPGN second Command Port for AT command communication の値を 6 に変更(SCIチャネル6を使用してWIFIモジュール制御を行うという意味) General-purpose port PDR register connected to the SX-ULPGN EN pin の値を PORTD から PORTF に変更 General-purpose port PODR register connected to the SX-ULPGN EN pin の値を 0 から 5 に変更 注意: コメントがおかしい。修正中。SX-ULPGNのEN端子(POWER端子)の制御をRXマイコン側のポート何番で行うか、の設定項目。このボードではPF5端子を使う回路となっている。 Configure RTS Port No. for WIFI_CFG_SCI_CHANNEL の値を PORT2 から PORT0 に変更 Configure RTS Pin No. for WIFI_CFG_SCI_CHANNEL の値を 2 になっていること確認 プロジェクトエクスプローラのaws_demosを右クリック -> system explorer を開く エクスプローラ上で5階層上り、 vendors -> renesas -> boards -> rx65n-cloud-kit-uart-sx-ulpgn -> aws_demos -> src -> smc_gen -> r_wifi_sx_ulpgn -> フォルダ全体をコピー vendors -> renesas -> boards -> rx_driver_package -> v125 -> r_wifi_sx_ulpgn -> r_wifi_sx_ulpgn -> フォルダ全体を削除 vendors -> renesas -> boards -> rx_driver_package -> v125 -> r_wifi_sx_ulpgn -> r_wifi_sx_ulpgn -> フォルダ全体をペースト r_wifi_sx_ulpgnの新しい版(v1.13)で廃止になったファイルを手動で削除する プロジェクトエクスプローラの vendors -> renesas -> rx_driver_package -> v125 -> r_wifi_sx_ulpgn -> src -> r_wifi_sx_ulpgn_queue.c を右クリック、削除 プロジェクトエクスプローラの vendors -> renesas -> rx_driver_package -> v125 -> r_wifi_sx_ulpgn -> src -> r_wifi_sx_ulpgn_recv_task.c を右クリック、削除 r_wifi_sx_ulpgnの新しい版(v1.13)で追加になったファイルを手動で追加する プロジェクトエクスプローラの vendors -> renesas -> rx_driver_package -> v125 -> r_wifi_sx_ulpgn -> src で右クリック -> 新規 -> ファイル 以下のようにリンクファイルとして3ファイル追加 拡張 -> ファイル・システム内のファイルにリンク にチェックを入れて、以下入力 (これでプロジェクト外ファイルを相対参照できる。外部ライブラリ・ソースコード等リンクの常套手段) AWS_IOT_MCU_ROOT\vendors\renesas\rx_driver_package\v125\r_wifi_sx_ulpgn\src\r_wifi_sx_ulpgn_atcmd.c AWS_IOT_MCU_ROOT\vendors\renesas\rx_driver_package\v125\r_wifi_sx_ulpgn\src\r_wifi_sx_ulpgn_os_wrap.c AWS_IOT_MCU_ROOT\vendors\renesas\rx_driver_package\v125\r_wifi_sx_ulpgn\src\r_wifi_sx_ulpgn_os_wrap.h プロジェクトエクスプローラでaws_demosを右クリック、Renesas C/C++ Project Settings -> Change Device Target Board は Custom とし、ターゲットデバイスは RX600 -> RX65N -> RX65N -176 pin -> R5F565NEDxFC_DUAL を選択 セクション設定が初期状態に戻るので、boot_loader.esiを読み込む -> プロジェクトエクスプローラのboot_loaderで右クリック->プロパティを選択 C/C++ビルド->設定->ツール設定->Linker->セクション->...ボタン->インポート->boot_loader.esiを読み込み ROMからRAMにマッピングするセクションの設定が初期状態に戻るので、追加設定する。 プロジェクトエクスプローラでboot_loaderを右クリック -> プロパティ -> C/C++ビルド -> 設定 -> ツール設定 -> Linker -> セクション -> シンボル・ファイル -> ROMからRAMにマップするセクション -> PFRAM2=RPFRAM2 を追加
またOTA正常動作時のAmazon FreeRTOSのログも載せておきます。
teraterm.txt
OTAに関して性能面・およびセキュリティ面で以下改善中の項目があることをお知らせします。参考になれば幸いです。
#個人的には性能を突き詰めて実装したいのですが、現在ユーザビリティ面の改善を優先しています。OTAはややこしいので使いやすくしてほしいと方々からリクエストいただいています。
上の投稿にあるシステムログ teraterm.txt において以下2点性能面の考察、1点セキュリティ面の考察ができます。いずれも課題ではありますが、Trusted Secure IPといういろんなルネサスマイコンに入っている暗号IPを活用することで対策済です。現在まだスマートコンフィグレータ等ツールで簡単に使いこなせるようにはなっておらず先行的に開発している段階がようやく終わりユーザビリティを向上させていく段階です。OTAのややこしさ対策と合わせて改善を図っていきたいと考えています。
■性能面考察
①AWSとの暗号通信 (TLS: Transport Layer Security) でOTAデータ (RX65Nのバンク1面分の1MB (厳密にはブートローダの256KBを引いた768KB) ) の転送にかかる時間
参考: https://github.com/renesas/rx72n-envision-kit/wiki/Trusted-Secure-IP%28TSIP%29%E3%81%AB%E3%82%88%E3%82%8BSSL%E3%81%AE%E5%8A%A0%E9%80%9F
②ブートローダにおいてユーザアプリの正当性検証にかかる時間
参考: https://www.wolfssl.com/renesas-rx72n-envision-kit-supported/
■セキュリティ面の考察
セキュアブートとユーザアプリ(AWS接続用)を結合したMOTファイルをバイナリ化しバイナリエディタで覗くとAWS接続用のデバイス秘密鍵(ウェブ認証のユーザパスワードに相当)とデバイス証明書(ウェブ認証のユーザIDに相当)が平文で見える。AWSにアップロードするOTA用の新しいファームウェアデータも同様。
こちらも以下カラクリを駆使することで対策済です。
https://github.com/renesas/rx72n-envision-kit/wiki/1-Trusted-Secure-IP%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90
(日本語ページにリンク貼りなおしました)
余裕がありましたらセキュリティ面の検証も実施いただけるとよいと思います。
Trusted Secure IP搭載のマイコンボードかどうかはよくよくご確認ください。少しわかりづらいですがRX65N RSKはTrusted Secure IP有り版と無し版があります。
https://www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rx65n-2mb-starter-kit-plus-renesas-starter-kit-rx65n-2mb?
現在Trusted Secure IP入りのRXファミリのマイコンボードでおすすめはRX72N Envision Kitですね。
https://www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rx72n-envision-kit-rx72n-envision-kit?
輸出管理の課題がクリアになり暗号IP入りのマイコンボードを販売する道筋を立てることができたので今後出すRXファミリのマイコンボードはTrusted Secure IP有りが基軸になります。(マイコン自体にTrusted Secure IPが入ってないタイプもあるのでその場合はその限りではありません)
ご丁寧に性能面、セキュリティ面のガイドまで作成していただき、心から感謝いたします。
再度、シェルティさんのガイドをもとにOTAをやってみます。
私が使っている評価ボードはTrusted Secure IP有り版だった気がしたのでTrusted Secure IPの設定も含めてやってみます。
ビルドを通した際に以下のエラーが出てきました。
どのように対処すればよいかご教授願いませんでしょうか。
見たことのないエラーですね。コンパイラではなくてJavaのエラーログに見えるので、CC-RX(コンパイラ)ではなくてe2 studio(Javaベース)から出ているエラーと思います。これすみません。もう少し全景が見えるようにe2 studioの画面全体を撮ってもらってよいでしょうか。
以下にe2studioの画面全体を添付いたします。
ファイルに!(ビックリマーク)が付いているので、ファイルのパスが見つからないのだと思います。ログと合わせて考えるとAWS_IOT_MCU_ROOTがどこのフォルダを指すのか分からない状態(存在しないフォルダを指しているとか)だと推察します。プロジェクトの環境変数にAWS_IOT_MCU_ROOTがあるか確認してみてください。ファイルプロパティの「リソース」欄でリンク先のファイルパスが見られます。直ったかどうかはそこで確認できます。
シェルティです、こんにちは
本件すこし社内を聞きまわっています。
ほやさんのご指摘通り、AWS_IOT_MCU_ROOTの参照先が見えないのかと思って、以下のように強引に \aa という存在しないフォルダ指定をAWS_IOT_MCU_ROOT末尾につけてみましたが、コンパイルエラーが出るだけで、よこさんの現象を再現させることはできませんでした。
URIスキームを~ のエラーは、エディタの画面の中で出ているエラーで、ビルドコンソールのエラーとは直接関係ないと思います。まあ、参照しているファイルがないと言う意味では同じ原因なのでしょうけど。
ほやさん、シェルティさん
ご返信していただき誠にありがとうございます。
ほやさんとシェルティさんの通りに原因を調べてみました。
AWS_IOT_MCU_ROOTのショートカットがありませんでした。
ですが、シェルティさんのスクリーンショットを見てみますとAFR_HOMEが該当のパスのようなのでAWS_IOT_MCU_ROOTの代わりにAFR_HOMEを適応しました。
ビルドしてみるとソースファイルがなくてエラーを吐いています。
なので、自分なりに調べてみましたら以下のディレクトリにガイドに載っていた同じ名前のソースファイルがありました。
C:\Users\mio\e2_studio\workspace\vendors\renesas\rx_mcu_boards\rx_driver_package\v125\r_wifi_sx_ulpgn\src
こちらのファイルはシェルティさんのガイドに示しているファイルでしょうか?(ソースコードをお送りしたかったのですが、本フォームで送れませんでした。申し訳ありません。)
長文で申し訳ありませんが、よろしくお願いいたします。
ほやさん
なるほど、ありがとうございます。よこさんにいただいた情報も活用してだいたい原因が分かってきました。確かに「URIスキームを~」のエラーはエディタで出てますね。再現させることもできました。続いてよこさんの書き込みにリプライします。
情報提供ありがとうございます。だいたい原因が分かりました。
まずご質問にお答えします。
>>C:\Users\mio\e2_studio\workspace\vendors\renesas\rx_mcu_boards\rx_driver_package\v125\r_wifi_sx_ulpgn\src
>>こちらのファイルはシェルティさんのガイドに示しているファイルでしょうか?
いえ、ガイドと異なりますね。このご質問を見て閃きました。どうやらよこさんが使っているAmazon FreeRTOSのバージョンが間違っていますね。以下試していただけますか?
(1)ガイドの通りAmazon FreeRTOS v202012.00-rx-1.0.0 をインポートする
(2)e2 studio起動時のワークスペース内部もいったん全部消す
以下詳細です。
よこさんが試されているAmazon FreeRTOSのバージョン:v202002.00-rx-1.0.5 (OTAのアプリノートに記載のバージョン)
→①ホームのショートカットの定義=AFR_HOME
→②ガイドのショートカットの定義=AWS_IOT_MCU_ROOT
→③①②不一致により「URIスキームを~ のエラー」が再現する
ガイドに載せているAmazon FreeRTOSのバージョン:v202012.00-rx-1.0.0
→①ホームのショートカットの定義=AWS_IOT_MCU_ROOT
→③①②一致により「URIスキームを~ のエラー」が再現しない
e2 studio起動時のワークスペース内部もいったん全部消すのをお勧めします。
Amazon FreeRTOSをGitHubからダウンロードしてプロジェクトインポート時に以下ワーニングが出て「重複する場合は置き換え」とは書いてありますが「バージョン違いでファイル・フォルダ構成が異なる場合」の言及が書いてなくおそらく単純に上書きの動作になると思うので、バージョン違いのAmazon FreeRTOSを同じワークスペースにインポートしてフォルダ構成が異なると、ORでフォルダ・ファイルが残ってしまう気がしますね。
ご丁寧に解説をしていただき心から感謝申し上げます。
シェルティさんの通りに再度設定を行ってみます。
シェルティさんのおかげでwifiを使ってawsに接続できるようになりました。
心から感謝申し上げます。
awsからファームウェアをダウンロードすることができましたが、ダウンロード後に自動的にリブートできません。
ですが、マイコンのリセットボタンを押すと問題なく起動してソフトウェアのswapして起動しました。
原因としてはファームウェアのセクション設定が間違っているため、発生しているのでしょうか。
ご教授願えませんでしょうか。
ご推察の通りで、aws_demos側において、以下設定のうち「①リンカ設定における「ROMからRAMにマッピングするセクション」が抜けていると予想します。
https://japan.renesasrulz.com/cafe_rene/f/002-2095199602/7917/thread/41335#41335
あとwifiでaws接続可能、OTA動作も(一部動作不良はあるが)できた、とのことでご連絡ありがとうございます。
IoT機器的にはEtherやWifiよりセルラーの方が実ビジネスに近いと考えており、現在RYZ014AというルネサスのセルラーモジュールでもAWSに接続できるようにFreeRTOSやAzure RTOSの開発を各種マイコン向けに進めています。
https://www.renesas.com/jp/ja/products/interface-connectivity/wireless-communications/cellular-iot-modules/ryz014a-lte-cat-m1-cellular-iot-module
一般家庭に設置する機械ならEtherかWifiでもいいかもしれませんが、自販機やマンホールのフタの裏や生物などの動体とかに設置する機械ならセルラーが良いですね。将来製品などでセルラーも検討されるとよいかもしれません。工場設備向けには依然としてEtherが使われるのでEtherのカラクリも調査するとよいかもしれません。
引き続きいろいろなケースに対応できるよう、また、導入時にもっと簡単に試作検討が進むよう環境づくりを進めてまいります。あと最終的には低消費と小型化を突き詰めていって電池がなくてもインターネット通信ができる無線通信機用の超小型マイコン、みたいなのを作りたいと思っています。
よこです。
aws_demoのセクションを確認したところ、セクションに問題はなさそうです。
そのため、セクション以外に問題が有ると思い、デバイス設定を見ましたが、こちらも問題なさそうです。
私なりに他の原因を考えてみましたが思いつかない次第です。
お手数おかけしますが、ご助言いただけませんでしょうか。
参考にteratermのログを以下に示します。
動作は"5847 356381 [iot_thread] [prvStopRequestTimer] Stopping request timer."の箇所で止まってしまいます。
5792 338829 [OTA Agent T] [prvIngestDataBlock] Received file block 765, size 10245793 338829 [OTA Agent T] [prvPAL_WriteBlock] is called.5794 338830 [OTA Agent T] [prvIngestDataBlock] Remaining: 25795 338831 [OTA Agent T] [prvExecuteHandler] Called handler. Current State [WaitingForFileBlock] Event [ReceivedFil eBlock] New state [WaitingForFileBlock]5796 338844 [OTA Agent T] [INFO ][MQTT][338844] (MQTT connection 80f3b8) MQTT PUBLISH operation queued.5797 338844 [OTA Agent T] [prvRequestFileBlock_Mqtt] OK: $aws/things/rx65n_fota_wifi/streams/AFR_OTA-1cdb62ec-71cf-4 e59-9d83-f469b8042db4/get/cbor5798 338844 [OTA Agent T] [prvExecuteHandler] Called handler. Current State [WaitingForFileBlock] Event [RequestFile Block] New state [WaitingForFileBlock]5799 339117 [OTA Agent T] [prvIngestDataBlock] Received file block 766, size 10245800 339117 [OTA Agent T] [prvPAL_WriteBlock] is called.5801 339118 [OTA Agent T] [prvIngestDataBlock] Remaining: 15802 339119 [OTA Agent T] [prvExecuteHandler] Called handler. Current State [WaitingForFileBlock] Event [ReceivedFil eBlock] New state [WaitingForFileBlock]5803 339132 [OTA Agent T] [INFO ][MQTT][339132] (MQTT connection 80f3b8) MQTT PUBLISH operation queued.5804 339132 [OTA Agent T] [prvRequestFileBlock_Mqtt] OK: $aws/things/rx65n_fota_wifi/streams/AFR_OTA-1cdb62ec-71cf-4 e59-9d83-f469b8042db4/get/cbor5805 339132 [OTA Agent T] [prvExecuteHandler] Called handler. Current State [WaitingForFileBlock] Event [RequestFile Block] New state [WaitingForFileBlock]5806 339381 [iot_thread] [INFO ][DEMO][339381] State: WaitingForFileBlock Received: 769 Queued: 0 Processed: 0 Dropped: 0
5807 339384 [OTA Agent T] [prvIngestDataBlock] Received file block 767, size 5125808 339384 [OTA Agent T] [prvPAL_WriteBlock] is called.5809 339385 [OTA Agent T] [prvIngestDataBlock] Received final expected block of file.5810 339386 [OTA Agent T] [prvStopRequestTimer] Stopping request timer.5811 339386 [OTA Agent T] [prvPAL_CheckFileSignature] Started sig-sha256-ecdsa signature verification, file: demo5812 339386 [OTA Agent T] [prvPAL_ReadAndAssumeCertificate] No such certificate file: demo. Using aws_ota_codesigner _certificate.h.5813 340350 [OTA Agent T] [prvPAL_CheckFileSignature] PASS: Finished sig-sha256-ecdsa signature verification, signat ure verification passed5814 340352 [OTA Agent T] [prvPAL_CloseFile] User firmware header updated.5815 340352 [OTA Agent T] [prvIngestDataBlock] File receive complete and signature is valid.5816 340353 [OTA Agent T] [prvStopRequestTimer] Stopping request timer.5817 340353 [OTA Agent T] [prvPublishStatusMessage] Msg: {"status":"IN_PROGRESS","statusDetails":{"self_test":"ready ","updatedBy":"0x90002"}}5818 340364 [OTA Agent T] [INFO ][MQTT][340364] (MQTT connection 80f3b8) MQTT PUBLISH operation queued.5819 340364 [OTA Agent T] [INFO ][MQTT][340364] (MQTT connection 80f3b8, PUBLISH operation 810070) Waiting for opera tion completion.5820 340381 [iot_thread] [INFO ][DEMO][340381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5821 340668 [OTA Agent T] [INFO ][MQTT][340668] (MQTT connection 80f3b8, PUBLISH operation 810070) Wait complete wit h result SUCCESS.5822 340668 [OTA Agent T] [prvPublishStatusMessage] 'IN_PROGRESS' to $aws/things/rx65n_fota_wifi/jobs/AFR_OTA-rx65n_ ota_demo_wifi20220412v4/update5823 340668 [OTA Agent T] [INFO ][DEMO][340668] Received eOTA_JobEvent_Activate callback from OTA Agent.
5824 340668 [OTA Agent T] [INFO ][MQTT][340668] (MQTT connection 80f3b8) Disconnecting connection.5825 340672 [OTA Agent T] [INFO] [MQTT] [core_mqtt.c:2149] 5826 340672 [OTA Agent T] Disconnected from the broker.58 27 340672 [OTA Agent T]5828 341381 [iot_thread] [INFO ][DEMO][341381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5829 342381 [iot_thread] [INFO ][DEMO][342381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5830 343381 [iot_thread] [INFO ][DEMO][343381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5831 344381 [iot_thread] [INFO ][DEMO][344381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5832 345381 [iot_thread] [INFO ][DEMO][345381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5833 346381 [iot_thread] [INFO ][DEMO][346381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5834 347381 [iot_thread] [INFO ][DEMO][347381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5835 348381 [iot_thread] [INFO ][DEMO][348381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5836 349381 [iot_thread] [INFO ][DEMO][349381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5837 350381 [iot_thread] [INFO ][DEMO][350381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5838 351381 [iot_thread] [INFO ][DEMO][351381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5839 352381 [iot_thread] [INFO ][DEMO][352381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5840 353381 [iot_thread] [INFO ][DEMO][353381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5841 354381 [iot_thread] [INFO ][DEMO][354381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5842 355381 [iot_thread] [INFO ][DEMO][355381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5843 356334 [OTA Agent T] [WARN ][NET][356334] Failed to close connection.5844 356334 [OTA Agent T] [INFO ][MQTT][356334] (MQTT connection 80f3b8) Network connection closed.5845 356334 [OTA Agent T] [INFO ][DEMO][356334] Mqtt disconnected due to invoking diconnect function.
5846 356381 [iot_thread] [INFO ][DEMO][356381] State: WaitingForFileBlock Received: 770 Queued: 0 Processed: 0 Dropped: 0
5847 356381 [iot_thread] [prvStopRequestTimer] Stopping request timer.
ログありがとうございます。シェルティのログと比べてみたところ以下がクリティカルに異なりました。
OTA AgentがMQTTの接続を切断する際に成功するのと失敗するのとで違いが出ていますね。
ファームウェアアップデート動作とファームウェア署名検証とその後のAWSへのMQTTによる報告通信は成功しているので、よこさんの環境でもこのままシステムリセットすればただしくアップデートが完了となります。
残るは何故よこさんの環境ではMQTTの接続を切断する際に失敗するか、ですね。この方向で掘り下げてみます。
■よこさんのログ
5843 356334 [OTA Agent T] [WARN ][NET][356334] Failed to close connection.
■シェルティのログ
5566 81111 [OTA Agent T] [INFO ][MQTT][81111] (MQTT connection 80f3b8) Network connection closed.