本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在瑞萨 RX65N 上下载、构建、刷新和运行 FreeRTOS OTA 演示版
此参考集成托管在 Amazon-FreeRTOS 存储库中,该存储库已过时。建议您在创建新项目时从这里开始 如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目,请参阅亚马逊 FreeRTOS Github 存储库迁移指南。
本章介绍如何在瑞萨 RX65N 上下载、构建、刷新和运行 FreeRTOS OTA 演示应用程序。
设置操作环境
本节内容中的过程使用以下环境:
-
IDE:e 2 studio 7.8.0,e 2 studio 2020-07
-
工具链:CCRX 编译器 v3.0.1
-
目标设备:RSKRX65N-2MB
-
调试器:E 2、E 2 Lite 仿真器
-
软件:瑞萨 Flash 编程器、瑞萨的 Secure Flash Programmer.exe、Tera Term
设置硬件
-
将 E 2 Lite 仿真器和 USB 串行端口Connect 您的 RX65N 主板和电脑。
-
将电源Connect 到 RX65N。
设置Amazon资源
-
要运行 FreeRTOS 演示,您必须拥有一个拥有访问Amazon IoT服务权限的 IAM 用户的Amazon账户。如果您尚不了解,请按照中的步骤操作操作设置您的Amazon账户和权限。
-
要设置 OTA 更新,请按照中的步骤操作OTA 更新先决条件。特别是请按照中的步骤操作使用 MQTT 的 OTA 更新的先决条件。
-
打开 Amazon IoT 控制台
。 -
在左侧导航窗格中,选择 “管理”,然后选择 “事物” 以创建事物。
事物是表示中的设备或逻辑实体Amazon IoT。它可以是物理设备或传感器(例如,灯泡或墙壁上的开关)。此外,它也可以是逻辑实体(如应用程序实例),或没有连接到但与连接到Amazon IoT IoT 的设备相关的物理实体(例如,装有发动机传感器的汽车或控制面板)。 Amazon IoT提供了事物注册表来帮助您管理事物。
-
选择 “创建”,然后选择 “创建单个事物”。
-
为您的事物输入名称,然后选择 “下一步”。
-
选择创建证书。
-
下载创建的三个文件,然后选择 “激活”。
-
选择附加策略。
-
选择您在中创建的策略设备策略。
使用 MQTT 接收 OTA 更新的每台设备都必须注册为事物,Amazon IoT并且该设备必须具有与列出的策略相似的附加策略。您可以在Amazon IoT核心策略操作和Amazon IoT核心操作资源中找到有关
"Action"
和"Resource"
对象中项目的更多信息。注意
-
利用
iot:Connect
权限,您的设备可以通过 MQTT 连接到 Amazon IoT。 -
利用 Amazon IoT 作业 (
.../jobs/*
) 主题的iot:Subscribe
和iot:Publish
权限,连接的设备能够接收作业通知和作业文档,并发布作业执行的完成状态。 -
利用 Amazon IoT OTA 流 (
.../streams/*
) 主题的iot:Subscribe
和iot:Publish
权限,连接的设备能够从 Amazon IoT 中提取 OTA 更新数据。在通过 MQTT 执行固件更新时,需要这些权限。 -
利用
iot:Receive
权限,Amazon IoT Core 能够将有关这些主题的消息发布到连接的设备。每次传输 MQTT 消息时,都将检查此权限。您可以使用此权限,撤消对当前订阅主题的客户端的访问权限。
-
-
-
创建代码签名配置文件并在上注册代码签名证书Amazon。
-
要创建密钥和认证,请参阅瑞萨电子的 MCU 固件更新设计政策
中的 7.3 节 “使用 OpenSSL 生成 ECDSA-SHA256 密钥对”。 -
打开 Amazon IoT 控制台
。在左侧导航窗格中,选择管理,然后选择作业。选择创建Job,然后选择创建 OTA 更新任务。 -
在 “选择要更新的设备” 下,选择 “选择”,然后选择您之前创建的内容。选择 Next(下一步)。
-
在 Create(创建 FreeRTOS ice(创建 Freate Ser vice(创ate
-
对于 “选择固件映像传输协议”,选择 MQTT。
-
对于 “选择并签署您的固件映像”,选择 “为我签署新的固件映像”。
-
对于代码签名配置文件,选择创建。
-
在创建代码签名配置文件窗口中,输入配置文件名称。对于设备硬件平台,选择 Windows 模拟器。对于代码签名证书,选择导入。
-
浏览选择证书 (
secp256r1.crt
)、证书私钥 (secp256r1.key
) 和证书链 (ca.crt
)。 -
输入设备上代码签名证书的路径名。然后选择 Create (创建)。
-
-
-
要授予的代码签名访问权限Amazon IoT,请按照中的步骤操作授予 Code Signing for Amazon IoT 访问权限。
如果你的电脑上没有安装 Tera Term,你可以从 https://ttssh2.osdn.jp/index.html.en

导入、配置头文件并构建 aws_demos 和 boot_loader
首先,选择 FreeRTOS 软件包的最新版本,该软件包将从中下载 GitHub 并自动导入到项目中。这样你就可以专注于配置 FreeRTOS 和编写应用程序代码。
-
启动 e 2 工作室。
-
选择文件,然后选择导入...。
-
选择瑞萨电子的 GitHub FreeRTOS(含IoT 库)项目。
-
选择 “检查更多版本...” 以显示下载对话框。
-
选择最新的软件包。
-
选择 “同意” 接受最终用户许可协议。
-
请等待下载完成。
-
选择 aws_demos 和 boot_loader 项目,然后选择 “完成” 将其导入。
-
对于这两个项目,打开项目属性。在导航窗格中选择 Service(A mazon Serv ice
-
选择当前工具链。
-
选择当前生成器。
-
-
在导航窗格中,选择 Settings (设置)。选择工具链选项卡,然后选择工具链版本。
选择 “工具设置” 选项卡,展开 “转换器”,然后选择 “输出”。在主窗口中,确保选择输出十六进制文件,然后选择输出文件类型。
-
在引导加载程序项目中,打开
projects\renesas\rx65n-rsk\e2studio\boot_loader\src\key\code_signer_public_key.h
并输入公钥。有关如何创建公钥的信息,请参阅如何在 RX65N 上使用Amazon Web Services 实现 FreeRTOS OTA和瑞萨电子单片机固件更新设计政策 中的 7.3 节 “使用 OpenSSL 生成 ECDSA-SHA256 密钥对”。 然后生成要创建的项目
boot_loader.mot
。 -
打开
aws_demos
项目。-
打开 Amazon IoT 控制台
。 -
在左侧导航窗格中,选择 Settings (设置)。在设备数据端点文本框中记下您的自定义终端节点。
-
选择 “管理”,然后选择 “事物”。记下您主板的Amazon IoT物体名称。
-
在
aws_demos
项目中,打开demos/include/aws_clientcredential.h
并指定以下值。#define clientcredentialMQTT_BROKER_ENDPOINT[] = "
Your Amazon IoT endpoint
"; #define clientcredentialIOT_THING_NAME "The Amazon IoT thing name of your board
" -
打开
tools/certificate_configuration/CertificateConfigurator.html
文件。 -
导入您之前下载的证书 PEM 文件和私钥 PEM 文件。
-
选择 “生成并保存 aws_clientcredial_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
文件的更多信息,请参阅如何在 RX65N 上使用Amazon Web Services 实现 FreeRTOS OTA和瑞萨 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
。 -
在章节查看器中更改以下设置。
-
选择 “生成” 来创建
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 上刷新初始固件。
-
从 https://www.renesas.com/tw/en/products/software-tools/tools/programmer/renesas-flash-programmer-programming-gui.html
下载最新版本的 Renesas Flash Programer(编程 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 的更新。如果你在电脑上打开了 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 编程器创建
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 存储桶,如中所述创建 Amazon S3 存储桶来存储更新。
userproj.rsu
-
在 RX65N-RSK 上创建更新固件的任务。
Amazon IoTJobs 是一项服务,用于将待处理的作业通知一台或多台连接设备。作业可用于管理一组设备、更新设备上的固件和安全证书,或执行管理任务,例如重新启动设备和执行诊断。
-
登录到 Amazon IoT 控制台
。在导航窗格中选择选择(管理管理然后选择 Jobs(管理),选择 Job s -
选择 “创建任务”,然后选择 “创建 OTA 更新任务”。选择一件事,然后选择 “下一步”。
-
按如下方式创建 FreeRTOS OTA 更新任务:
-
选择 MQTT。
-
选择您在上一节中创建的代码签名配置文件。
-
选择您已上载到 Service Service ServAmazon S3 vice S
-
在设备上固件映像的路径名中,输入
test
。 -
选择您在上一节中创建的 IAM 角色。
-
-
选择 Next(下一步)。
-
输入 ID,然后选择 “创建”。
-
-
重新打开 Tera Term 以验证固件是否已成功更新到 OTA 演示版本 0.9.3。
-
在Amazon IoT控制台上,验证任务状态是否为 “成功”。