本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在瑞萨电子 RX65N 上下载、构建、刷写并运行 FreeRTOS OTA 演示
本章向您展示如何在瑞萨电子 RX65N 上下载、构建、闪存和运行 FreeRTOS OTA 演示应用程序。
设置操作环境
本节中的过程使用以下环境:
-
IDE:2工作室 7.8.0, e22020-07
-
工具链:CCRX 编译器 v3.0.1
-
目标设备:RSKRX65N-2MB
-
调试器:E2, 环2精简版仿真器
-
软件:瑞萨电子 Flash 程序员,瑞萨安全 Flash Programmer.exe,Tera 术语
设置硬件
-
Connect E2Lite 模拟器和 USB 串行端口连接到 RX65N 板和 PC。
-
将电源 Connect 到 RX65N。
设置Amazon资源
-
要运行 FreeRTOS 演示,你必须有Amazon具有Amazon Identity and Access Management有权访问的 (IAM) 用户Amazon IoT服务。如果您尚不了解,请按照中的步骤进行操作。设置您的Amazon账户和权限.
-
要设置 OTA 更新,请按照中的步骤操作OTA 更新先决条件. 特别是,按照中的步骤进行操作使用 MQTT 的 OTA 更新的先决条件.
-
打开 Amazon IoT 控制台
。 -
在左侧导航窗格中,选择Manage选择,然后选择事物创建事物。
事物是中的设备或逻辑实体的表示形式。Amazon IoT. 它可以是物理设备或传感器(例如,灯泡或墙壁上的开关)。它也可以是逻辑实体,如应用程序实例或未连接到的物理实体Amazon IoT(例如,装有发动机传感器的汽车或控制面板)。Amazon IoT提供了事物注册表来帮助您管理事物。
-
选择Create选择,然后选择创建单个事物.
-
输入名称为了您的事物,请选择下一步.
-
选择创建证书。
-
下载创建的三个文件然后选择Activate.
-
选择附加策略。
-
选择您在中创建的策略。设备策略.
每个使用 MQTT 接收 OTA 更新的设备都必须在中注册为事物。Amazon IoT此外,事物必须具有类似所列策略的附加策略。您可以在
"Action"
和"Resource"
处的对象Amazon IoT核心策略操作和Amazon IoT核心操作资源.备注
-
利用
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.
-
要创建密钥和认证,请参阅中的第 7.3 节 “使用 OpenSSL 生成 ECDSA-SHA256 密钥对”瑞萨电子 MCU 固件更新设计政策
. -
打开 Amazon IoT 控制台
。在左侧导航窗格中,选择Manage,那么作业. Select创建作业然后创建 OTA 更新 Job. -
下选择要更新的设备选择Select然后选择您之前创建的事物。选择 Next(下一步)。
-
在存储库的创建 FreeRTOS OTA 更新作业页面中,执行以下操作:
-
适用于选择固件映像传输协议,选择MQTT.
-
适用于选择并签署固件映像,选择为我签署新的固件映像.
-
适用于代码签名配置,选择Create.
-
在创建代码签名配置文件窗口中,输入Profile name. 对于设备硬件平台选择Windows 模拟器. 对于代码签名证书选择导入.
-
浏览以选择证书 (
secp256r1.crt
)、证书私钥 (secp256r1.key
)和证书链(ca.crt
)。 -
输入设备上代码签名证书的路径名. 然后选择 Create (创建)。
-
-
-
授予对代码签名的访问权限Amazon IoT按照中的步骤进行操作授予 Code Signing for Amazon IoT 访问权限.
如果您的 PC 上没有安装 Tera Tera Term,您可以从中下载它。https://ttssh2.osdn.jp/index.html.en

导入、配置头文件并构建 aws_demos 和 boot_loader
首先,您选择最新版本的 FreeRTOS 软件包,然后将从 GitHub 下载并自动导入到项目中。这样你就可以专注于配置 FreeRTOS 和编写应用程序代码。
-
启动 e2演播室。
-
选择File (文件),然后选择导入....
-
Select瑞萨电子 GitHub FreeRTOS(带 IoT 库)项目.
-
选择查看更多版本...以显示下载对话框。
-
选择最新的套餐。
-
选择同意接受最终用户许可协议。
-
等待下载完成。
-
选择aws_demos和boot_loader项目,然后选择Finish来导入它们。
-
对于这两个项目,请打开项目属性。在导航窗格中,选择工具链编辑器.
-
选择当前工具链.
-
选择当前构建器.
-
-
在导航窗格中,选择 Settings (设置)。选择工具链选择选项卡,然后选择工具链版本.
选择工具设置选项卡,展开转换器然后选择输出. 在主窗口中,确保输出 hex 文件处于选中状态,然后选择输出文件类型.
-
在引导加载程序项目中,打开
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 密钥对”瑞萨电子 MCU 固件更新设计政策 . 然后构建要创建的项目
boot_loader.mot
. -
打开
aws_demos
项目。-
打开 Amazon IoT 控制台
。 -
在左侧导航窗格中,选择 Settings (设置)。在中记下您的自定义终端节点设备数据端点文本框。
-
选择Manage,然后选择事物. 记下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_clientential_keys_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和第 7.3 节 “使用 OpenSSL 生成 ECDSA-SHA256 密钥对”瑞萨电子 MCU 固件更新设计政策 .
-
-
任务 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 上的初始固件。
-
从下载最新版本的瑞萨电子 Flash 编程器(编程 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
文件来擦除银行上的数据。 -
选择启动要抹掉银行。
-
闪存
userprog.mot
,选择浏览...然后,导航到init_firmware
目录中,选择userprog.mot
文件然后选择启动.
-
-
RX65N-RSK 已安装固件的版本 0.9.2(初始版本)。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
文件与瑞萨安全 Flash 程序员一起更新固件版本。-
打开
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 上的固件。
Amazon IoT作业是通知一个或多个已连接的设备有待处理的服务作业. 作业可用于管理设备队列、更新设备上的固件和安全证书,或执行管理任务,例如重新启动设备和执行诊断。
-
登录到 Amazon IoT 控制台
。在导航窗格中,选择Manage,然后选择作业. -
选择创建作业选择,然后选择创建 OTA 更新作业. 选择一件事物,然后选择下一步.
-
按如下方式创建 FreeRTOS OTA 更新作业:
-
选择MQTT.
-
选择您在上一部分中创建的代码签名配置文件。
-
选择您上传到 Amazon S3 存储桶的固件映像。
-
适用于设备上固件映像的路径名输入,
test
. -
选择您在上一部分中创建的 IAM 角色。
-
-
选择下一步。
-
输入 ID 然后选择Create.
-
-
重新打开 Tera 期限以验证固件是否已成功更新到 OTA 演示版 0.9.3。
-
在存储库的Amazon IoT验证作业状态是否为Succeeded.