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

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

在 Renesas RX65N 上下载、构建、刷写和运行 FreeRTOS OTA 演示

重要

该参考集成托管在已弃用的 Amazon-FreeRTOS 存储库中。当您创建新项目时,我们建议从此处开始。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目,请参阅 Amazon-FreeRTOS Github 存储库迁移指南

本章介绍如何在 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

设置硬件
  1. 将 E2 Lite 模拟器和 USB 串行端口连接到 RX65N 主板和 PC。

  2. 将电源连接到 RX65N。

设置 Amazon 资源

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

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

  3. 打开 Amazon IoT 控制台

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

    事物是 Amazon IoT 中的特定设备或逻辑实体的表示形式。它可以是物理设备或传感器(例如,灯泡或墙壁上的开关)。此外,它也可以是逻辑实体(如应用程序实例),或没有连接到 Amazon 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. 要创建密钥和认证,请参阅 Renesas MCU 固件更新设计政策中的第 7.3 节“使用 OpenSSL 生成 ECDSA-SHA256 密钥对”。

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

    3. 选择要更新的设备下,选择选择,然后选择之前创建的事物。选择下一步

    4. 创建 FreeRTOS OTA 更新作业页面上,执行以下操作:

      1. 选择固件映像传输协议中,选择 MQTT

      2. 对于选择并签署固件映像,选择为我签署一个新的固件映像

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

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

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

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

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

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


                Tera Term 串行端口设置窗口

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

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

  1. 启动 e2 Studio。

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

  3. 选择 Renesas GitHub FreeRTOS(包含 IoT 库)项目

    
                        e-squared studio 导入窗口
  4. 选择查看更多版本…以显示下载对话框。

    
                        e-squared studio 下载对话框窗口
  5. 选择最新的程序包。

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

    
                        e-squared studio EULA 对话框
  7. 等待下载完成。

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

    
                        导入项目窗口
  9. 对于这两个项目,打开项目属性。在导航窗格中,选择工具链编辑器

    1. 选择当前工具链

    2. 选择当前生成器

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

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

  11. 在引导加载程序项目中,打开 projects\renesas\rx65n-rsk\e2studio\boot_loader\src\key\code_signer_public_key.h 并输入公钥。有关如何创建公钥的信息,请参阅 如何在 RX65N 上使用 Amazon Web Services 实现 FreeRTOS OTARenesas MCU 固件更新设计政策中的第 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_clientcredential_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 OTARenesas 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. 使用 Renesas Secure Flash Programmer 创建文件 userprog.motuserprog.motaws_demos.motboot_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. 从以下 URL 下载最新版本的 Renesas Flash Programmer(编程 GUI):https://www.renesas.com/tw/en/products/software-tools/tools/programmer/renesas-flash-programmer-programming-gui.html

    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. RX65N-RSK 上已安装固件的 0.9.2 版本(初始版本)。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
  17. 任务 B:更新固件版本

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

    2. 重新构建项目。

  18. 使用 Renesas Secure Flash Programmer 创建 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 存储桶以存储更新中所述,将固件更新 userproj.rsu 上传到 Amazon S3 存储桶。

  20. 创建作业以更新 RX65N-RSK 上的固件。

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

    1. 登录到 Amazon IoT 控制台。在导航窗格中,选择管理,然后选择作业

    2. 选择创建作业,然后选择创建 OTA 更新作业。选择一个事物,然后选择下一步

    3. 按照以下方式创建 FreeRTOS OTA 更新作业:

      • 选择 MQTT

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

      • 选择上传到 Amazon S3 存储桶的固件映像。

      • 对于设备上固件映像的路径名,请输入test

      • 选择在上一部分中创建的 IAM 角色。

    4. 选择 Next(下一步)。

    5. 输入一个 ID,然后选择创建

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

  22. 在 Amazon IoT 控制台上,验证作业状态是否为成功