こんにちは。よこです。
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をしようと考えております。
ビルドを通した際に以下のエラーが出てきました。
どのように対処すればよいかご教授願いませんでしょうか。
シェルティです。こんにちは。
見たことのないエラーですね。コンパイラではなくて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.
ご返事ありがとうございます。
お手数をおかけしますが、よろしくお願い致します。
こんにちは。
デバッグを行い、原因を調べてみたところ、Socket通信を閉じるときのATコマンドで通信状態からコマンドモードに変更するときが正しく動作できていないようです。
プログラム上では、ATコマンドで"+++"をwifiモジュールに送っているようですが、wifiモジュールからの応答がなくてタイムアウトしています。
応答を受け取るにはどうすればよいでしょうか。
ご助言をいただければ幸いです。
よこ さん、こんにちは。NoMaYです。あいだが空いていますが、以下の話の直接の続きですよね。Failed to close connectionというログが表示される原因がそれだった、ということですが、一般論としては、オシロまたはロジアナで果たして何も返って来ていないのか確認するのがセオリー的な気がします。何かしら返ってきているけれども、信号がすごく踊っていた、とか、速攻でちゃんと返ってきていた、とか、本当にWiFiモジュールがダンマリになっている、とか、気になるのです。でも、その前に、ソフトウェア的に、まったく1バイトも受信されていない状態なのか、何かしら受信しているが受信バイト数が足りないのか、受信バイト数も足りているけれども期待値と違っていたことによってエラーになり結果さらに待ち続けてしまっているのか、そのあたり何か分かることは無いでしょうか、とかも、気になります。画面コピー上のコードを見る限り、ひとまず1バイトずつ受信バッファから取り出すようになっているようです。なので、ソースを一時的にちょっと加工して、タイムアウトした時に何バイト受信バッファから取り出していたかデバッグ出来るようなロジックを追加しておいて、タイムアウト時に確認してみる、とどうなりますでしょうか。(もっとも、そうしたところで、オシロまたはロジアナで確認するという作業をスキップ出来るわけでは無いですけれども。)
シェルティ said:ログありがとうございます。シェルティのログと比べてみたところ以下がクリティカルに異なりました。 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.
NoMaYさん
NoMaYさんの仰る通りでそちらの内容の続きになります。
説明不足で申し訳ありません。
オシロスコープで通信状態は確認できておりません。ですが、WiFiモジュールからの応答が有無に関わらず、ATコマンドが通ったことにするようにコードを書き換えて試したところリブートができるようになりました。
なので、一応、ATコマンドは送信されてモジュール側でコマンドを受け取っているようです。
オシロスコープでも確認してみます。
よこ さん、こんにちは。NoMaYです。その後どうでしょうか?r_wifi_sx_ulpgn_atcmd.cのat_recv()内で、Socket通信を閉じる時のATコマンドの"+++"をwifiモジュールに送った後のwifiモジュールからの応答を受け取れなくてタイムアウトしていた、とのことでしたけれども、新たに分かったことなど進展は何かありましたでしょうか?
ご連絡ありがとうございます。
恐縮ですが、進展がなくいまだ調べきれていない状況です。