本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Renesas RX65N 上下載、建置、刷新和執行 FreeRTOS OTA 示範
重要
此參考整合託管在已棄用的 Amazon-FreeRTOS 儲存庫上。我們建議您在建立新專案時從這裡開始。如果您已經有以現在已棄用 Amazon-FreeRTOS 儲存庫為基礎的現有 FreeRTOS 專案,請參閱 Amazon-FreeRTOS Github 儲存庫遷移指南。 FreeRTOS
本章說明如何在 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 更新先決條件。特別是,請遵循中的步驟使用 MQTT 進行 OTA 更新的先決條件。
-
開啟 AWS IoT 主控台
。 -
在左側導覽窗格中,選擇管理,然後選擇要建立物件的物件。
物件是其中裝置或邏輯實體的表示法 AWS IoT。它可以是實體裝置或感應器 (例如燈泡或牆上的開關)。它也可以是邏輯實體,例如未連線的應用程式執行個體或實體實體 AWS IoT,但與這樣做的裝置相關 (例如具有引擎感應器或控制面板的汽車)。 AWS IoT 提供物件登錄檔,協助您管理物件。
-
選擇建立,然後選擇建立單一物件。
-
輸入物件的名稱,然後選擇下一步。
-
選擇 Create certificate (建立憑證)。
-
下載建立的三個檔案,然後選擇啟用。
-
選擇 Attach a policy (連接政策)。
-
選取您在 中建立的政策裝置政策。
使用 MQTT 接收 OTA 更新的每個裝置都必須在 中註冊為物件, AWS IoT 而且該物件必須具有如所列之附加政策。如需
"Action"
和"Resource"
物件中的項目的詳細資訊,請參閱 AWS IoT 核心政策動作和 AWS IoT 核心動作資源。備註
-
iot:Connect
許可允許您的裝置 AWS IoT 透過 MQTT 連線至 。 -
AWS IoT 工作 (
.../jobs/*
) 主題的iot:Subscribe
和iot:Publish
許可允許連接的裝置接收工作通知和工作文件,並發佈工作執行的完成狀態。 -
OTA 串流 (
.../streams/*
) AWS IoT 主題的iot:Subscribe
和iot:Publish
許可允許連接的裝置從中擷取 OTA 更新資料 AWS IoT。需要這些許可才能透過 MQTT 執行韌體更新。 -
iot:Receive
許可允許 AWS IoT Core 在這些主題上發佈訊息到連接的裝置。每次交付 MQTT 訊息時,都會檢查此許可。您可以使用此許可來撤銷目前訂閱主題之用戶端的存取權。
-
-
-
建立程式碼簽署設定檔並註冊程式碼簽署憑證 AWS。
-
若要建立金鑰和認證,請參閱 Renesas MCU 韌體更新設計政策
中的第 7.3 節「使用 OpenSSL 產生 ECDSA-SHA256 金鑰對」。 -
開啟 AWS IoT 主控台
。在左側導覽窗格中,選取管理,然後選取任務。選取建立任務,然後選取建立 OTA 更新任務。 -
在選取要更新的裝置下,選擇選取,然後選擇您先前建立的物件。選取下一步。
-
在建立 FreeRTOS OTA 更新任務頁面上,執行下列動作:
-
針對選取韌體映像傳輸的通訊協定,選擇 MQTT。
-
針對選取並簽署您的韌體映像,選擇為我簽署新的韌體映像。
-
針對程式碼簽署設定檔,選擇建立。
-
在建立程式碼簽署設定檔視窗中,輸入設定檔名稱。針對裝置硬體平台,選取 Windows Simulator。針對程式碼簽署憑證,選擇匯入。
-
瀏覽以選取憑證 (
secp256r1.crt
)、憑證私有金鑰 (secp256r1.key
) 和憑證鏈 (ca.crt
)。 -
在裝置上輸入程式碼簽署憑證的路徑名稱。然後選擇 Create (建立)。
-
-
-
若要授予 程式碼簽署的存取權 AWS IoT,請遵循中的步驟授予 程式碼簽署的存取權 AWS IoT。
如果您的 PC 未安裝 Tera Term,您可以從 https://ttssh2.osdn.jp/index.html.en

匯入、設定標頭檔案並建置 aws_demos 和 boot_loader
若要開始,請選取最新版本的 FreeRTOS 套件,這會從 GitHub 下載並自動匯入專案。如此一來,您就可以專注於設定 FreeRTOS 和撰寫應用程式程式碼。
-
啟動 e2 Studio。
-
選擇檔案,然後選擇匯入...。
-
選取 Renesas GitHub FreeRTOS (使用 IoT 程式庫) 專案。
-
選擇檢查更多版本... 以顯示下載對話方塊。
-
選取最新的套件。
-
選擇同意以接受最終使用者授權合約。
-
等待下載完成。
-
選取 aws_demos 和 boot_loader 專案,然後選擇完成以匯入專案。
-
對於這兩個專案,開啟專案屬性。在導覽窗格中,選擇工具鏈編輯器。
-
選擇目前的工具鏈。
-
選擇目前的建置器。
-
-
在導覽窗格中,選擇設定。選擇工具鏈索引標籤,然後選擇工具鏈版本。
選擇工具設定索引標籤,展開轉換器,然後選擇輸出。在主視窗中,確定已選取輸出十六進位檔案,然後選擇輸出檔案類型。
-
在開機載入器專案中,開啟
projects\renesas\rx65n-rsk\e2studio\boot_loader\src\key\code_signer_public_key.h
並輸入公有金鑰。如需有關如何建立公有金鑰的資訊,請參閱 Renesas MCU 韌體更新設計政策中的如何在 RX65N 上使用 Amazon Web Services 實作 FreeRTOS OTA ,以及第 7.3 節「使用 OpenSSL 產生 ECDSA-SHA256 金鑰對」。 然後建置專案以建立
boot_loader.mot
。 -
開啟
aws_demos
專案。-
開啟 AWS IoT 主控台
。 -
在左側的導覽窗格中,選擇設定。在裝置資料端點文字方塊中記下您的自訂端點。
-
選擇管理,然後選擇物件。記下電路板的 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 檔案。
-
選擇產生並儲存 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
檔案的詳細資訊,請參閱 Renesas MCU 韌體更新設計政策中的如何在 RX65N 上使用 Amazon Web Services 實作 FreeRTOS OTA ,以及第 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
。 -
在區段檢視器中變更下列設定。
-
選擇建置以建立
aws_demos.mot
檔案。
-
-
userprog.mot
使用 Renesas Secure Flash Programmer 建立 檔案。userprog.mot
是aws_demos.mot
和 的組合boot_loader.mot
。您可以將此檔案刷新至 RX65N-RSK 以安裝初始韌體。-
下載 https://github.com/renesas/Amazon-FreeRTOS-Tools
並開啟 Renesas Secure Flash Programmer.exe
。 -
選擇初始公司索引標籤,然後設定下列參數:
-
私密金鑰路徑 – 的位置
secp256r1.privatekey
。 -
Boot Loader 檔案路徑 –
boot_loader.mot
() 的位置projects\renesas\rx65n-rsk\e2studio\boot_loader\HardwareDebug
。 -
檔案路徑 –
aws_demos.mot
() 的位置projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug
。
-
-
建立名為 的目錄
init_firmware
、產生userprog.mot
,並將其儲存至init_firmware
目錄。確認產生成功。
-
-
快閃 RX65N-RSK 上的初始韌體。
-
從 https://www.renesas.com/tw/en/products/software-tools/tools/programmer/renesas-flash-programmer-programming-gui.html
:// 下載最新版本的 Renesas Flash Programmer (程式設計 GUI)。 -
開啟
vendors\renesas\rx_mcu_boards\boards\rx65n-rsk\aws_demos\flash_project\erase_from_bank\ erase.rpj
檔案以清除銀行上的資料。 -
選擇開始以清除銀行。
-
若要刷新
userprog.mot
,請選擇瀏覽... 並導覽至init_firmware
目錄,選取userprog.mot
檔案,然後選擇開始。
-
-
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
檔案。 -
選擇更新公司索引標籤,並設定下列參數:
-
檔案路徑 –
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 任務是一項服務,可通知一或多個連線裝置待定任務。任務可用來管理裝置機群、更新裝置上的韌體和安全憑證,或執行重新啟動裝置和執行診斷等管理任務。
-
登入 AWS IoT 主控台
。在導覽窗格中,選擇管理,然後選擇任務。 -
選擇建立任務,然後選擇建立 OTA 更新任務。選取物件,然後選擇下一步。
-
建立 FreeRTOS OTA 更新任務,如下所示:
-
選擇 MQTT。
-
選取您在上一節中建立的程式碼簽署設定檔。
-
選取您上傳至 Amazon S3 儲存貯體的韌體映像。
-
針對裝置上的韌體映像路徑名稱,輸入
test
。 -
選擇您在上一節中建立的 IAM 角色。
-
-
選擇 Next (下一步)。
-
輸入 ID,然後選擇建立。
-
-
重新開啟 Tera Term 以確認韌體已成功更新至 OTA 示範 0.9.3 版。
-
在 AWS IoT 主控台上,確認任務狀態是否成功。