翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Renesas RX65N での FreeRTOS OTA デモのダウンロード、構築、フラッシュ、および実行
重要
このリファレンス統合は、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、ここから始めることをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「Amazon-FreeRTOS Github リポジトリ移行ガイド」を参照してください。
この章では、Renesas RX65N で FreeRTOS OTA デモアプリケーションをダウンロード、構築、フラッシュ、および実行する方法について説明します。
オペレーティング環境をセットアップする
このセクションの手順では、次の環境を使用します。
-
IDE: e2 studio 7.8.0、e2 studio 2020-07
-
ツールチェーン: CCRX Compiler v3.0.1
-
ターゲットデバイス: RSKRX65N-2MB
-
デバッガー: E2、E2 Lite エミュレータ
-
ソフトウェア: Renesas Flash Programmer、Renesas Secure Flash Programmer.exe、Tera Term
ハードウェアをセットアップするには
-
E2 Lite エミュレータと USB シリアルポートを RX65N ボードと PC に接続します。
-
電源を RX65N に接続します。
AWS リソースのセットアップ
-
FreeRTOS デモを実行するには、 AWS IoT サービスへのアクセス許可を持つ IAM ユーザーを持つ AWS アカウントが必要です。まだの場合は、AWS アカウントとアクセス許可の設定の手順に従ってください。
-
OTA の更新を設定するには、OTA 更新の前提条件の手順に従います。特に、を使用したOTA更新の前提条件 MQTT の手順を実行してください。
-
AWS IoT コンソール
を開きます。 -
左側のナビゲーションペインで、[Manage] (管理)、[Things] (モノ) の順に選択して、モノを作成します。
モノとは、 AWS IoTにおける特定のデバイスまたは論理エンティティを表します。物理的なデバイスやセンサー (電球や壁のスイッチなど) は、モノとして扱うことができます。また、アプリケーションのインスタンスなどの論理エンティティや AWS IoT、 に接続しないが、 に接続するデバイスに関連する物理エンティティ (エンジンセンサーやコントロールパネルがある自動車など) でもかまいません。 AWS IoT は、モノの管理に役立つモノレジストリを提供します。
-
[Create] (作成)、[Create a single thing] (単一のモノを作成する) の順に選択します。
-
モノの名前を [Name] (名前) に入力し、[Next] (次へ) を選択します。
-
[証明書の作成] を選択します。
-
作成された 3 つのファイルをダウンロードして、[Activate] (アクティブ化) を選択します。
-
[ポリシーのアタッチ] を選択します。
-
デバイスポリシーで作成したポリシーを選択します。
MQTT を使用して OTA 更新を受信する各デバイスは、 にモノとして登録する必要があり AWS IoT 、モノにはリストされているようなポリシーがアタッチされている必要があります。
"Action"
および"Resource"
オブジェクトの項目の詳細については、AWS IoT Core ポリシーアクションとAWS IoT Core アクションリソースを参照してください。メモ
-
アクセス
iot:Connect
許可により、デバイスは MQTT AWS IoT 経由で に接続できます。 -
AWS IoT ジョブ (
.../jobs/*
) のトピックに対するiot:Subscribe
およびiot:Publish
アクセス許可を使用すると、接続されたデバイスがジョブ通知とジョブドキュメントを受け取り、ジョブ実行の完了状態を公開できます。 -
AWS IoT OTA ストリーム (
.../streams/*
) のトピックに対するiot:Subscribe
および アクセスiot:Publish
許可により、接続されたデバイスは から OTA 更新データを取得できます AWS IoT。これらのアクセス許可は、MQTT を介してファームウェア更新を実行するために必要です。 -
アクセス
iot:Receive
許可により AWS IoT Core 、 はそれらのトピックに関するメッセージを接続されたデバイスに発行できます。このアクセス許可は、MQTT メッセージの配信ごとにチェックされます。このアクセス許可を使用して、トピックに現在サブスクライブしているクライアントへのアクセスを取り消すことができます。
-
-
-
コード署名プロファイルを作成し、コード署名証明書を に登録するには AWS。
-
キーと証明書を作成するには、Renesas MCU ファームウェア更新の設計ポリシー
のセクション 7.3「OpenSSL で ECDSA-SHA256 キーペアを生成する」を参照してください。 -
AWS IoT コンソール
を開きます。左側のナビゲーションペインで、[Manage] (管理)、[Jobs] (ジョブ) の順に選択します。[Create a job] (ジョブの作成) を選択して、[Create OTA update Job] (OTA 更新ジョブの作成) を選択します。 -
[Select devices to update] (更新するデバイスの選択) で、[Select] (選択) を選択して作成済みのモノを選択します。[次へ] を選択します。
-
[Create a FreeRTOS OTA update job] (FreeRTOS OTA 更新ジョブの作成) ページで、次の手順を実行します。
-
[Select the protocol for firmware image transfer] (ファームウェアイメージ転送プロトコルを選択) で、[MQTT] を選択します。
-
[Select and sign your firmware image] (ファームウェアイメージの選択と署名) で、[Sign a new firmware image for me] (新しいファームウェアイメージに署名します) を選択します。
-
[Code signing profile] (コード署名プロファイル) で、[Create] (作成) を選択します。
-
[Create a code signing profile] (コード署名プロファイルの作成) ウィンドウで、[Profile name] (プロファイル名) を入力します。[Device hardware platform] (デバイスハードウェアプラットフォーム) で、[Windows Simulator] を選択します。[Code signing certificate] (コード署名証明書) で、[Import] (インポート) を選択します。
-
証明書 (
secp256r1.crt
)、証明書のプライベートキー (secp256r1.key
)、証明書チェーン (ca.crt
) を参照して選択します。 -
[Pathname of code signing certificate on device] (デバイスのコード署名証明書のパス名) を入力します。次に [作成] を選択します。
-
-
-
のコード署名へのアクセスを許可するには AWS IoT、「」の手順に従いますのコード署名へのアクセスを許可する AWS IoT。
Tera Term が PC にインストールされていない場合は、以下のとおり https://ttssh2.osdn.jp/index.html.en
ヘッダーファイルをインポートして設定し、aws_demos と boot_loader を構築する
まず、最新バージョンの FreeRTOS パッケージを選択すると、これは から GitHub ダウンロードされ、プロジェクトに自動的にインポートされます。このようにして、FreeRTOS の設定とアプリケーションコードの記述に集中できます。
-
e2 studio を起動します。
-
[File] (ファイル) を選択して、[Import...] (インポート...) を選択します。
-
Renesas GitHub FreeRTOS (IoT ライブラリを含む) プロジェクト を選択します。
-
[Check for more version...] (他のバージョンを確認する...) を選択して、ダウンロードダイアログボックスを表示します。
-
最新のパッケージを選択します。
-
[Agree] (同意する) を選択して、エンドユーザー使用許諾契約に同意します。
-
ダウンロードが完了するまで待ちます。
-
aws_demos と boot_loader プロジェクトを選択し、[Finish] (完了) を選択してインポートします。
-
両方のプロジェクトで、プロジェクトプロパティを開きます。ナビゲーションペインで [Tool Chain Editor] (ツールチェーンエディタ) を選択します。
-
[Current toolchain] (現在のツールチェーン) を選択します。
-
[Current builder] (現在のビルダー) を選択します。
-
-
ナビゲーションペインで [設定] を選択します。[Toolchain] (ツールチェーン) タブで、ツールチェーンの [Version] (バージョン) を選択します。
[Tool Settings] (ツール設定) タブを選択して、[Converter] (コンバーター) を展開し、[Output] (出力) を選択します。メインウィンドウで [Output hex file] (16 進数ファイルの出力) が選択されていることを確認し、[Output file type] (出力ファイルタイプ) を選びます。
-
bootloader プロジェクトで、
projects\renesas\rx65n-rsk\e2studio\boot_loader\src\key\code_signer_public_key.h
を開き、パブリックキーを入力します。パブリックキーの作成方法については、Amazon Web Services を使用して RX65N で FreeRTOS OTA を実装する方法と Renesas MCU ファームウェア更新の設計ポリシー のセクション 7.3「OpenSSL で ECDSA-SHA256 キーペアを生成する」を参照してください。 次にプロジェクトを構築して、
boot_loader.mot
を作成します。 -
aws_demos
プロジェクトを開きます。-
AWS IoT コンソール
を開きます。 -
左のナビゲーションペインの [Settings] (設定) を選択します。[Device data endpoint] (デバイスデータエンドポイント) テキストボックスのカスタムエンドポイントをメモします。
-
[Manage] (管理) を選択して、[Things] (モノ) を選択します。ボードの AWS IoT モノの名前を書き留めます。
-
aws_demos
プロジェクトで、demos/include/aws_clientcredential.h
を開き、次の値を指定します。#define clientcredentialMQTT_BROKER_ENDPOINT[] = "
Your AWS IoT endpoint
"; #define clientcredentialIOT_THING_NAME "The AWS IoT thing name of your board
" -
tools/certificate_configuration/CertificateConfigurator.html
ファイルを開きます。 -
ダウンロード済みの証明書 PEM ファイルとプライベートキー PEM ファイルをインポートします。
-
[Generate and save aws_clientcredential_keys.h] (aws_clientcredential_keys.h の生成と保存) を選択して、
demos/include/
ディレクトリのこのファイルを置き換えます。 -
vendors/renesas/boards/rx65n-rsk/aws_demos/config_files/ota_demo_config.h
ファイルを開いて、次の値を指定します。#define otapalconfigCODE_SIGNING_CERTIFICATE [] = "
your-certificate-key
";ここで、
your-certificate-key
はファイルsecp256r1.crt
の値です。証明書の各行の後に必ず「\」を追加してください。secp256r1.crt
ファイルの作成方法については、Amazon Web Services を使用して RX65N で FreeRTOS OTA を実装する方法と Renesas MCU ファームウェア更新の設計ポリシー のセクション 7.3「OpenSSL で ECDSA-SHA256 キーペアを生成する」を参照してください。
-
-
タスク A: ファームウェアの初期バージョンをインストールする
-
vendors/renesas/boards/board/aws_demos/config_files/aws_demo_config.h
ファイルを開き、#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED
をコメントアウトして、CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED
またはCONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED
を定義します。 -
demos/include/ aws_application_version.h
ファイルを開き、ファームウェアの初期バージョンを0.9.2
に設定します。 -
[Section Viewer] (セクションビューワー) で以下の設定を変更します。
-
[Build] (構築) を選択して、
aws_demos.mot
ファイルを作成します。
-
-
Renesas Secure Flash Programmer を使用してファイル
userprog.mot
を作成します。userprog.mot
はaws_demos.mot
とboot_loader.mot
の組み合わせです。このファイルを RX65N-RSK にフラッシュすると、初期ファームウェアをインストールできます。-
https://github.com/renesas/Amazon-FreeRTOS-Tools
をダウンロードして、 Renesas Secure Flash Programmer.exe
を開きます。 -
[Initial Firm] (初期ファーム) タブを選択し、以下のパラメータを設定します。
-
[Private Key Path] (プライベートキーのパス):
secp256r1.privatekey
の場所。 -
[Boot Loader File Path] (ブートローダーファイルパス):
boot_loader.mot
の場所 (projects\renesas\rx65n-rsk\e2studio\boot_loader\HardwareDebug
)。 -
[File Path] (ファイルパス):
aws_demos.mot
の場所 (projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug
)。
-
-
init_firmware
という名前のディレクトリを作成し、userprog.mot
を生成してinit_firmware
ディレクトリに保存します。生成が成功したことを確認します。
-
-
RX65N-RSK で初期ファームウェアをフラッシュします。
-
Renesas Flash Programmer (プログラミング GUI) の最新バージョンを https://www.renesas.com/tw/en/products/software-tools/tools/programmer/renesas-flash-programmer-programming-gui.html
からダウンロードします。 -
vendors\renesas\rx_mcu_boards\boards\rx65n-rsk\aws_demos\flash_project\erase_from_bank\ erase.rpj
ファイルを開いて銀行のデータを消去します。 -
[Start] (開始) を選択して、銀行を消去します。
-
userprog.mot
をフラッシュするには、[Browse...] (参照...) を選択してinit_firmware
ディレクトリに移動し、userprog.mot
ファイルを選択して、[Start] (開始) を選択します。
-
-
バージョン 0.9.2 (初期バージョン) のファームウェアが RX65N-RSK にインストールされました。RX65N-RSK ボードは OTA 更新をリッスンするようになりました。PC で Tera Term を開いている場合、初期ファームウェアの実行時に次のように表示されます。
------------------------------------------------- RX65N secure boot program ------------------------------------------------- Checking flash ROM status. bank 0 status = 0xff [LIFECYCLE_STATE_BLANK] bank 1 status = 0xfc [LIFECYCLE_STATE_INSTALLING] bank info = 1. (start bank = 0) start installing user program. copy secure boot (part1) from bank0 to bank1...OK copy secure boot (part2) from bank0 to bank1...OK update LIFECYCLE_STATE from [LIFECYCLE_STATE_INSTALLING] to [LIFECYCLE_STATE_VALID] bank1(temporary area) block0 erase (to update LIFECYCLE_STATE)...OK bank1(temporary area) block0 write (to update LIFECYCLE_STATE)...OK swap bank... ------------------------------------------------- RX65N secure boot program ------------------------------------------------- Checking flash ROM status. bank 0 status = 0xf8 [LIFECYCLE_STATE_VALID] bank 1 status = 0xff [LIFECYCLE_STATE_BLANK] bank info = 0. (start bank = 1) integrity check scheme = sig-sha256-ecdsa bank0(execute area) on code flash integrity check...OK jump to user program 0 1 [ETHER_RECEI] Deferred Interrupt Handler Task started 1 1 [ETHER_RECEI] Network buffers: 3 lowest 3 2 1 [ETHER_RECEI] Heap: current 234192 lowest 234192 3 1 [ETHER_RECEI] Queue space: lowest 8 4 1 [IP-task] InitializeNetwork returns OK 5 1 [IP-task] xNetworkInterfaceInitialise returns 0 6 101 [ETHER_RECEI] Heap: current 234592 lowest 233392 7 2102 [ETHER_RECEI] prvEMACHandlerTask: PHY LS now 1 8 3001 [IP-task] xNetworkInterfaceInitialise returns 1 9 3092 [ETHER_RECEI] Network buffers: 2 lowest 2 10 3092 [ETHER_RECEI] Queue space: lowest 7 11 3092 [ETHER_RECEI] Heap: current 233320 lowest 233320 12 3193 [ETHER_RECEI] Heap: current 233816 lowest 233120 13 3593 [IP-task] vDHCPProcess: offer c0a80a09ip 14 3597 [ETHER_RECEI] Heap: current 233200 lowest 233000 15 3597 [IP-task] vDHCPProcess: offer c0a80a09ip 16 3597 [IP-task] IP Address: 192.168.10.9 17 3597 [IP-task] Subnet Mask: 255.255.255.0 18 3597 [IP-task] Gateway Address: 192.168.10.1 19 3597 [IP-task] DNS Server Address: 192.168.10.1 20 3600 [Tmr Svc] The network is up and running 21 3622 [Tmr Svc] Write certificate... 22 3697 [ETHER_RECEI] Heap: current 232320 lowest 230904 23 4497 [ETHER_RECEI] Heap: current 226344 lowest 225944 24 5317 [iot_thread] [INFO ][DEMO][5317] ---------STARTING DEMO--------- 25 5317 [iot_thread] [INFO ][INIT][5317] SDK successfully initialized. 26 5317 [iot_thread] [INFO ][DEMO][5317] Successfully initialized the demo. Network type for the demo: 4 27 5317 [iot_thread] [INFO ][MQTT][5317] MQTT library successfully initialized. 28 5317 [iot_thread] [INFO ][DEMO][5317] OTA demo version 0.9.2 29 5317 [iot_thread] [INFO ][DEMO][5317] Connecting to broker... 30 5317 [iot_thread] [INFO ][DEMO][5317] MQTT demo client identifier is rx65n-gr-rose (length 13). 31 5325 [ETHER_RECEI] Heap: current 206944 lowest 206504 32 5325 [ETHER_RECEI] Heap: current 206440 lowest 206440 33 5325 [ETHER_RECEI] Heap: current 206240 lowest 206240 38 5334 [ETHER_RECEI] Heap: current 190288 lowest 190288 39 5334 [ETHER_RECEI] Heap: current 190088 lowest 190088 40 5361 [ETHER_RECEI] Heap: current 158512 lowest 158168 41 5363 [ETHER_RECEI] Heap: current 158032 lowest 158032 42 5364 [ETHER_RECEI] Network buffers: 1 lowest 1 43 5364 [ETHER_RECEI] Heap: current 156856 lowest 156856 44 5364 [ETHER_RECEI] Heap: current 156656 lowest 156656 46 5374 [ETHER_RECEI] Heap: current 153016 lowest 152040 47 5492 [ETHER_RECEI] Heap: current 141464 lowest 139016 48 5751 [ETHER_RECEI] Heap: current 140160 lowest 138680 49 5917 [ETHER_RECEI] Heap: current 138280 lowest 138168 59 7361 [iot_thread] [INFO ][MQTT][7361] Establishing new MQTT connection. 62 7428 [iot_thread] [INFO ][MQTT][7428] (MQTT connection 81cfc8, CONNECT operation 81d0e8) Wait complete with result SUCCESS. 63 7428 [iot_thread] [INFO ][MQTT][7428] New MQTT connection 4e8c established. 64 7430 [iot_thread] [OTA_AgentInit_internal] OTA Task is Ready. 65 7430 [OTA Agent T] [prvOTAAgentTask] Called handler. Current State [Ready] Event [Start] New state [RequestingJob] 66 7431 [OTA Agent T] [INFO ][MQTT][7431] (MQTT connection 81cfc8) SUBSCRIBE operation scheduled. 67 7431 [OTA Agent T] [INFO ][MQTT][7431] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Waiting for operation completion. 68 7436 [ETHER_RECEI] Heap: current 128248 lowest 127992 69 7480 [OTA Agent T] [INFO ][MQTT][7480] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Wait complete with result SUCCESS. 70 7480 [OTA Agent T] [prvSubscribeToJobNotificationTopics] OK: $aws/things/rx65n-gr-rose/jobs/$next/get/accepted 71 7481 [OTA Agent T] [INFO ][MQTT][7481] (MQTT connection 81cfc8) SUBSCRIBE operation scheduled. 72 7481 [OTA Agent T] [INFO ][MQTT][7481] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Waiting for operation completion. 73 7530 [OTA Agent T] [INFO ][MQTT][7530] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Wait complete with result SUCCESS. 74 7530 [OTA Agent T] [prvSubscribeToJobNotificationTopics] OK: $aws/things/rx65n-gr-rose/jobs/notify-next 75 7530 [OTA Agent T] [prvRequestJob_Mqtt] Request #0 76 7532 [OTA Agent T] [INFO ][MQTT][7532] (MQTT connection 81cfc8) MQTT PUBLISH operation queued. 77 7532 [OTA Agent T] [INFO ][MQTT][7532] (MQTT connection 81cfc8, PUBLISH operation 818b80) Waiting for operation completion. 78 7552 [OTA Agent T] [INFO ][MQTT][7552] (MQTT connection 81cfc8, PUBLISH operation 818b80) Wait complete with result SUCCESS. 79 7552 [OTA Agent T] [prvOTAAgentTask] Called handler. Current State [RequestingJob] Event [RequestJobDocument] New state [WaitingForJob] 80 7552 [OTA Agent T] [prvParseJSONbyModel] Extracted parameter [ clientToken: 0:rx65n-gr-rose ] 81 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: execution 82 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: jobId 83 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: jobDocument 84 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: afr_ota 85 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: protocols 86 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: files 87 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: filepath 99 7651 [ETHER_RECEI] Heap: current 129720 lowest 127304 100 8430 [iot_thread] [INFO ][DEMO][8430] State: Ready Received: 1 Queued: 0 Processed: 0 Dropped: 0 101 9430 [iot_thread] [INFO ][DEMO][9430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 102 10430 [iot_thread] [INFO ][DEMO][10430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 103 11430 [iot_thread] [INFO ][DEMO][11430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 104 12430 [iot_thread] [INFO ][DEMO][12430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 105 13430 [iot_thread] [INFO ][DEMO][13430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 106 14430 [iot_thread] [INFO ][DEMO][14430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 107 15430 [iot_thread] [INFO ][DEMO][15430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0
-
タスク B: ファームウェアのバージョンを更新する
-
demos/include/aws_application_version.h
ファイルを開き、APP_VERSION_BUILD
トークン値を0.9.3
に増やします。 -
プロジェクトを再構築します。
-
-
Renesas Secure Flash Programmer で
userprog.rsu
ファイルを作成し、ファームウェアのバージョンを更新します。-
Amazon-FreeRTOS-Tools\Renesas Secure Flash Programmer.exe
ファイルを開きます。 -
[Update Firm] (ファームの更新) タブを選択し、以下のパラメータを設定します。
-
[File Path] (ファイルパス):
aws_demos.mot
ファイルの場所 (projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug
)。
-
-
update _firmware
という名前のディレクトリを作成します。userprog.rsu
を生成して、update_firmware
ディレクトリに保存します。生成が成功したことを確認します。
-
-
更新を保存する Amazon S3 バケットを作成する のとおり、ファームウェア更新
userproj.rsu
を Amazon S3 バケットに更新します。 -
RX65N-RSK でファームウェアを更新するジョブを作成します。
AWS IoT Jobs は、1 つ以上の接続されたデバイスに保留中のジョブ を通知するサービスです。ジョブは、多数のデバイスの管理、デバイス上のファームウェアおよびセキュリティ証明書の更新、デバイスの再起動や診断の実行などの管理タスクの実行に使用できます。
-
AWS IoT コンソール
にサインインします。ナビゲーションペインで、[Manage] (管理)、[Jobs] (ジョブ) の順に選択します。 -
[Create a job] (ジョブの作成) を選択して、[Create OTA Update job] (OTA 更新ジョブの作成) を選択します。モノを選択して、[Next] (次へ) を選択します。
-
FreeRTOS OTA 更新ジョブを次のように作成します。
-
[MQTT] を選択します。
-
前のセクションで作成したコード署名プロファイルを選択します。
-
Amazon S3 バケットにアップロードしたファームウェアイメージを選択します。
-
[Pathname of firmware image on device] (デバイスのファームウェアイメージのパス名) で、
test
と入力します。 -
前のセクションで作成した IAM ロールを選択します。
-
-
[次へ] をクリックします。
-
ID を入力して、[Create] (作成) を選択します。
-
-
Tera Term を再度開いて、ファームウェアが OTA デモバージョン 0.9.3 に正常に更新されたことを確認します。
-
AWS IoT コンソールで、ジョブのステータスが「成功」であることを確認します。