本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在瑞薩 RX65N 上下載、建置、快閃及執行 FreeRTOS OTA 示範
重要
此參考集成託管在亞馬遜的 FreeRTOS 存儲庫上,該存儲庫已被棄用。我們建議您在建立新專案時從這裡開始。如果您已經有一個現有的 FreeRTOS 專案以目前已取代的亞馬遜免費伺服器儲存庫為基礎,請參閱. Amazon-FreeRTOS Github 儲存庫遷移指南
本章說明如何在瑞薩 RX65N 上下載、建置、快速執行 FreeRTOS OTA 示範應用程式。
設定您的作業環境
本節中的程序使用下列環境:
-
IDE:電子工作室 7.8.0,和 2 工作室
-
工具鏈:CCRX 編譯器
-
目標裝置:RSKRX65N-2MB
-
調試器:E 2,E 2 精簡版模擬器
-
軟體:瑞薩快閃記憶體程式設計師,瑞薩安全快閃記憶體 Programmer.exe,Tera 術語
若要設定您的硬體
-
將 E 2 精簡版模擬器和 USB 串行端口 Connect 到您的 RX65N 主板和 PC。
-
將電源 Connect 至 RX65N。
設定您的 AWS 資源
-
若要執行 FreeRTOS 示範,您必須擁有具有存 AWS IoT 取服務權限的 IAM 使用者 AWS 帳戶。如果您還沒有,請按照中的步驟操作設定 AWS 您的帳戶和許可。
-
若要設定 OTA 更新,請遵循中的步驟OTA 更新先決條件。尤其是,請遵循中的步驟使用 進行OTA更新的先決條件 MQTT。
-
開啟 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
許可允許連接的裝置接收工作通知和工作文件,並發佈工作執行的完成狀態。 -
AWS IoT OTA 流(
.../streams/*
)主題的iot:Subscribe
和iot:Publish
權限允許連接的設備從中獲取 OTA 更新數據 AWS IoT。需要這些許可才能透過 MQTT 執行韌體更新。 -
iot:Receive
權限允許 AWS IoT Core 將這些主題的消息發佈到連接的設備。每次交付 MQTT 訊息時,都會檢查此許可。您可以使用此許可來撤銷目前訂閱主題之用戶端的存取權。
-
-
-
若要建立程式碼簽署設定檔,並在上註冊程式碼簽署憑證。 AWS
-
若要建立金鑰與認證,請參閱瑞薩 MCU 韌體更新
設計原則中的第 7.3 節「使用 OpenSSL 產生 ECDSA-SHA256 金鑰配對」。 -
開啟 AWS IoT 主控台
。在左側導覽窗格中,選取管理,然後選取工作。選取建立 Job,然後選取建立 OTA 更新工作。 -
在 [選取要更新的裝置] 下選擇 [選取],然後選擇您先前建立的項目 選取下一步。
-
在 [建立 FreeRTOS OTA 更新工作] 頁面上,執行下列動作:
-
對於選擇韌體影像傳輸的通訊協定,請選擇 MQ TT。
-
對於選擇並簽署您的固件映像,請選擇為我簽署新的固件映像。
-
針對程式碼簽章設定檔,選擇 [建立]
-
在「建立程式碼簽章設定檔」視窗中,輸入設定檔名稱。針對裝置硬體平台,選取視窗模擬器。對於代碼簽名證書,選擇導入。
-
瀏覽以選取憑證 (
secp256r1.crt
)、憑證私密金鑰 (secp256r1.key
) 和憑證鏈結 (ca.crt
)。 -
輸入裝置上程式碼簽章憑證的路徑名稱。然後選擇 Create (建立)。
-
-
-
若要授與的程式碼簽章存取權 AWS IoT,請遵循中的步驟授予 程式碼簽署的存取權 AWS IoT。
如果您的電腦上沒有安裝 Tera Term,您可以從 https://ttssh2.osdn.jp/index.html.en

導入,配置頭文件並構建 aws_demo 和引導加載器
若要開始,請選取 FreeRTOS 套件的最新版本,這會從下載 GitHub 並自動匯入到專案中。這樣,您就可以專注於配置 FreeRTOS 和編寫應用程序代碼。
-
啟動 e 2 工作室。
-
選擇 [檔案],然後選擇 [匯入...]。
-
選取「瑞薩 GitHub FreeRTOS (含 IoT 程式庫) 專案」。
-
選擇檢查更多版本... 以顯示下載對話方塊。
-
選取最新的套件。
-
選擇 [同意] 以接受使用者授權合約。
-
等待下載完成。
-
選擇 aws_demo 和引導加載程序項目,然後選擇完成導入它們。
-
對於這兩個項目,請打開項目屬性。在導覽窗格中,選擇「工具鏈編輯器」。
-
選擇「目前」工具鏈。
-
選擇目前的產生器。
-
-
在導覽窗格中,選擇設定。選擇工具鏈標籤,然後選擇工具鏈版本。
選擇工具設定標籤,展開轉換器,然後選擇輸出。在主視窗中,確定已選取 [輸出十六進位檔案],然後選擇 [輸出檔案類型]。
-
在引導加載程序項目中,打開
projects\renesas\rx65n-rsk\e2studio\boot_loader\src\key\code_signer_public_key.h
並輸入公鑰。如需如何建立公開金鑰的詳細資訊,請參閱如何在 RX65N 上使用 Amazon Web Services 實作 FreeRTOS OTA,以及瑞薩 MC U 韌體更新設計政策中的第 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_Client 認證 _keys .h,並取代目錄中的這個檔案。
demos/include/
-
開啟
vendors/renesas/boards/rx65n-rsk/aws_demos/config_files/ota_demo_config.h
檔案,並指定這些值。#define otapalconfigCODE_SIGNING_CERTIFICATE [] = "
your-certificate-key
";您的證書密鑰
是文件中的值。secp256r1.crt
請記住在認證中的每一行之後添加「\」。如需建立secp256r1.crt
檔案的詳細資訊,請參閱如何在 RX65N 上使用 Amazon Web Services 實作 FreeRTOS OTA,以及瑞薩 MC U 韌體更新設計政策中的第 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
使用瑞薩安全快閃記憶體程式設計師建立檔案。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.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 上的初始韌體。
-
打開文
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 更新。如果您已在電腦上開啟 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
。 -
重新建置專案。
-
-
使用瑞薩安全快閃記憶體程式設計師建立
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
錄中。確認產生成功。
-
-
如中所述
userproj.rsu
,將韌體更新上傳到 Amazon S3 儲存貯體建立 Amazon S3 儲存貯體以儲存您的更新。 -
建立工作以更新 RX65N-RSK 上的韌體。
AWS IoT Jobs 是一種服務,用於通知一個或多個連接的設備有待處理的 Job。工作可用於管理裝置群組、更新裝置上的韌體和安全憑證,或執行系統管理工作,例如重新啟動裝置和執行診斷。
-
登入 AWS IoT 主控台
。在導覽窗格中,選擇 [管理],然後選擇 [工作]。 -
選擇「建立工作」,然後選擇「建立 OTA 更新工作」。選取項目,然後選擇「下一步」。
-
建立 FreeRTOS OTA 更新工作,如下所示:
-
選擇 MQTT。
-
選取您在上一節中建立的程式碼簽章設定檔。
-
選取您上傳到 Amazon S3 儲存貯體的韌體映像。
-
針對裝置上韌體影像的路徑名稱,輸入
test
。 -
選擇您在上一節中建立的 IAM 角色。
-
-
選擇下一步。
-
輸入 ID,然後選擇 [建立]。
-
-
重新打開 Tera 術語以驗證固件是否已成功更新為 OTA 演示版本 0.9.3。
-
在 AWS IoT 主控台上,確認工作狀態為 [成功]。