在瑞萨 RX65N 上下载、构建、刷新和运行 FreeRTOS OTA 演示版 - FreeRTOS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在瑞萨 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

设置硬件
  1. 将 E 2 Lite 仿真器和 USB 串行端口Connect 您的 RX65N 主板和电脑。

  2. 将电源Connect 到 RX65N。

设置Amazon资源

  1. 要运行 FreeRTOS 演示,您必须拥有一个拥有访问Amazon IoT服务权限的 IAM 用户的Amazon账户。如果您尚不了解,请按照中的步骤操作操作设置您的Amazon账户和权限

  2. 要设置 OTA 更新,请按照中的步骤操作OTA 更新先决条件。特别是请按照中的步骤操作使用 MQTT 的 OTA 更新的先决条件

  3. 打开 Amazon IoT 控制台

  4. 在左侧导航窗格中,选择 “管理”,然后选择 “事物” 以创建事物。

    事物是表示中的设备或逻辑实体Amazon IoT。它可以是物理设备或传感器(例如,灯泡或墙壁上的开关)。此外,它也可以是逻辑实体(如应用程序实例),或没有连接到但与连接到Amazon IoT IoT 的设备相关的物理实体(例如,装有发动机传感器的汽车或控制面板)。 Amazon IoT提供了事物注册表来帮助您管理事物。

    1. 选择 “创建”,然后选择 “创建单个事物”。

    2. 为您的事物输入名称,然后选择 “下一步”。

    3. 选择创建证书

    4. 下载创建的三个文件,然后选择 “激活”。

    5. 选择附加策略

      
                            显示待下载文件的控制台屏幕
    6. 选择您在中创建的策略设备策略

      使用 MQTT 接收 OTA 更新的每台设备都必须注册为事物,Amazon IoT并且该设备必须具有与列出的策略相似的附加策略。您可以在Amazon IoT核心策略操作和Amazon IoT核心操作资源中找到有关"Action""Resource"对象中项目的更多信息。

      注意
      • 利用 iot:Connect 权限,您的设备可以通过 MQTT 连接到 Amazon IoT。

      • 利用 Amazon IoT 作业 (.../jobs/*) 主题的 iot:Subscribeiot:Publish 权限,连接的设备能够接收作业通知和作业文档,并发布作业执行的完成状态。

      • 利用 Amazon IoT OTA 流 (.../streams/*) 主题的 iot:Subscribeiot:Publish 权限,连接的设备能够从 Amazon IoT 中提取 OTA 更新数据。在通过 MQTT 执行固件更新时,需要这些权限。

      • 利用 iot:Receive 权限,Amazon IoT Core 能够将有关这些主题的消息发布到连接的设备。每次传输 MQTT 消息时,都将检查此权限。您可以使用此权限,撤消对当前订阅主题的客户端的访问权限。

  5. 创建代码签名配置文件并在上注册代码签名证书Amazon。

    1. 要创建密钥和认证,请参阅瑞萨电子的 MCU 固件更新设计政策中的 7.3 节 “使用 OpenSSL 生成 ECDSA-SHA256 密钥对”。

    2. 打开 Amazon IoT 控制台。在左侧导航窗格中,选择管理,然后选择作业。选择创建Job,然后选择创建 OTA 更新任务

    3. “选择要更新的设备” 下,选择 “选择”,然后选择您之前创建的内容。选择 Next(下一步)。

    4. 在 Create(创建 FreeRTOS ice(创建 Freate Ser vice(创ate

      1. 对于 “选择固件映像传输协议”,选择 MQTT

      2. 对于 “选择并签署您的固件映像”,选择 “为我签署新的固件映像”。

      3. 对于代码签名配置文件,选择创建

      4. 创建代码签名配置文件窗口中,输入配置文件名称。对于设备硬件平台,选择 Windows 模拟器。对于代码签名证书,选择导入

      5. 浏览选择证书 (secp256r1.crt)、证书私钥 (secp256r1.key) 和证书链 (ca.crt)。

      6. 输入设备上代码签名证书的路径名。然后选择 Create (创建)

  6. 要授予的代码签名访问权限Amazon IoT,请按照中的步骤操作授予 Code Signing for Amazon IoT 访问权限

如果你的电脑上没有安装 Tera Term,你可以从 https://ttssh2.osdn.jp/index.html.en 下载并按此处所示进行设置。确保将 USB 串行端口从设备插入 PC。


                Tera Term 串行端口设置窗口

导入、配置头文件并构建 aws_demos 和 boot_loader

首先,选择 FreeRTOS 软件包的最新版本,该软件包将从中下载 GitHub 并自动导入到项目中。这样你就可以专注于配置 FreeRTOS 和编写应用程序代码。

  1. 启动 e 2 工作室。

  2. 选择文件,然后选择导入...

  3. 选择瑞萨电子的 GitHub FreeRTOS(含IoT 库)项目

    
                        e-squared Studio
  4. 选择 “检查更多版本...” 以显示下载对话框。

    
                        e-squared 工作室下载对话框窗口
  5. 选择最新的软件包。

    
                        e-squared 工作室模块下载对话框窗口
  6. 选择 “同意” 接受最终用户许可协议。

    
                        e-squared 工作室最终用户许可协议对话
  7. 请等待下载完成。

    
                        下载进度栏
  8. 选择 aws_demosboot_loader 项目,然后选择 “完成” 将其导入。

    
                        导入项目窗口
  9. 对于这两个项目,打开项目属性。在导航窗格中选择 Service(A mazon Serv ice

    1. 选择当前工具链

    2. 选择当前生成器

    
                        e-squared 工作室属性窗口
  10. 在导航窗格中,选择 Settings (设置)。选择工具链选项卡,然后选择工具链版本

    选择 “工具设置” 选项卡,展开 “转换器”,然后选择 “输出”。在主窗口中,确保选择输出十六进制文件,然后选择输出文件类型

  11. 在引导加载程序项目中,打开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

  12. 打开aws_demos项目。

    1. 打开 Amazon IoT 控制台

    2. 在左侧导航窗格中,选择 Settings (设置)。在设备数据端点文本框中记下您的自定义终端节点

    3. 选择 “管理”,然后选择 “事物”。记下您主板的Amazon IoT物体名称。

    4. 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"
    5. 打开 tools/certificate_configuration/CertificateConfigurator.html 文件。

    6. 导入您之前下载的证书 PEM 文件和私钥 PEM 文件。

    7. 选择 “生成并保存 aws_clientcredial_keys.h”,然后替换demos/include/目录中的此文件。

    8. 打开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 密钥对”。

  13. 任务 A:安装固件的初始版本

    1. 打开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_ENABLEDCONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED

    2. 打开demos/include/ aws_application_version.h文件,并将固件的初始版本设置为0.9.2

    3. 章节查看器中更改以下设置。

    4. 选择 “生成” 来创建aws_demos.mot文件。

  14. userprog.mot使用瑞萨安全闪存编程器创建文件。 userprog.motaws_demos.mot和的组合boot_loader.mot。您可以将此文件烧录到 RX65N-RSK 以安装初始固件。

    1. 下载 https://github.com/renesas/Amazon-FreeRTOS-Tools 然后打开Renesas Secure Flash Programmer.exe

    2. 选择 “初始固定” 选项卡,然后设置以下参数:

      • 私钥路径 — 的位置secp256r1.privatekey

      • 启动加载器文件路径boot_loader.mot (projects\renesas\rx65n-rsk\e2studio\boot_loader\HardwareDebug) 的位置。

      • 文件路径-aws_demos.mot (projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug) 的位置。

    3. 创建名为 “init_firmware生成userprog.mot” 的目录并将其保存到该init_firmware目录中。验证是否成功生成。

  15. 在 RX65N-RSK 上刷新初始固件。

    1. https://www.renesas.com/tw/en/products/software-tools/tools/programmer/renesas-flash-programmer-programming-gui.html 下载最新版本的 Renesas Flash Programer(编程 GUI)。

    2. 打开vendors\renesas\rx_mcu_boards\boards\rx65n-rsk\aws_demos\flash_project\erase_from_bank\ erase.rpj文件以删除银行中的数据。

    3. 选择 “开始” 清除银行。

    4. 要刷新userprog.mot,请选择 “浏览...” 然后导航到该init_firmware目录,选择userprog.mot文件并选择 “开始”。

  16. 固件版本 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
  17. 任务 B:更新固件版本

    1. 打开demos/include/aws_application_version.h文件并将APP_VERSION_BUILD令牌值增加到0.9.3

    2. 重新构建项目。

  18. 使用 Renesas Secure Flash 编程器创建userprog.rsu文件以更新固件版本。

    1. 打开 Amazon-FreeRTOS-Tools\Renesas Secure Flash Programmer.exe 文件。

    2. 选择 “更新公司” 选项卡并设置以下参数:

      • 文件路径-aws_demos.mot 文件的位置 (projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug)。

    3. 创建名为 update _firmware 的目录。生成userprog.rsu并将其保存到update_firmware目录中。验证是否成功生成。

  19. 将固件更新上传到 Amazon S3 存储桶,如中所述创建 Amazon S3 存储桶来存储更新userproj.rsu

  20. 在 RX65N-RSK 上创建更新固件的任务。

    Amazon IoTJobs 是一项服务,用于将待处理的作业通知一台或多台连接设备。作业可用于管理一组设备、更新设备上的固件和安全证书,或执行管理任务,例如重新启动设备和执行诊断。

    1. 登录到 Amazon IoT 控制台。在导航窗格中选择选择(管理管理然后选择 Jobs(管理),选择 Job s

    2. 选择 “创建任务”,然后选择 “创建 OTA 更新任务”。选择一件事,然后选择 “下一步”。

    3. 按如下方式创建 FreeRTOS OTA 更新任务:

      • 选择 MQTT

      • 选择您在上一节中创建的代码签名配置文件。

      • 选择您已上载到 Service Service ServAmazon S3 vice S

      • 在设备上固件映像的路径名中,输入test

      • 选择您在上一节中创建的 IAM 角色。

    4. 选择 Next(下一步)

    5. 输入 ID,然后选择 “创建”。

  21. 重新打开 Tera Term 以验证固件是否已成功更新到 OTA 演示版本 0.9.3。

  22. 在Amazon IoT控制台上,验证任务状态是否为 “成功”。