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

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

在瑞萨电子 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 术语

设置硬件

  1. Connect E2Lite 模拟器和 USB 串行端口连接到 RX65N 板和 PC。

  2. 将电源 Connect 到 RX65N。

设置Amazon资源

  1. 要运行 FreeRTOS 演示,你必须有Amazon具有Amazon Identity and Access Management有权访问的 (IAM) 用户Amazon IoT服务。如果您尚不了解,请按照中的步骤进行操作。设置您的Amazon账户和权限.

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

  3. 打开 Amazon IoT 控制台

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

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

    1. 选择Create选择,然后选择创建单个事物.

    2. 输入名称为了您的事物,请选择下一步.

    3. 选择创建证书

    4. 下载创建的三个文件然后选择Activate.

    5. 选择附加策略

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

      每个使用 MQTT 接收 OTA 更新的设备都必须在中注册为事物。Amazon IoT此外,事物必须具有类似所列策略的附加策略。您可以在"Action""Resource"处的对象Amazon IoT核心策略操作Amazon IoT核心操作资源.

      备注

      • 利用 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. 要创建密钥和认证,请参阅中的第 7.3 节 “使用 OpenSSL 生成 ECDSA-SHA256 密钥对”瑞萨电子 MCU 固件更新设计政策.

    2. 打开 Amazon IoT 控制台。在左侧导航窗格中,选择Manage,那么作业. Select创建作业然后创建 OTA 更新 Job.

    3. 选择要更新的设备选择Select然后选择您之前创建的事物。选择 Next(下一步)。

    4. 在存储库的创建 FreeRTOS OTA 更新作业页面中,执行以下操作:

      1. 适用于选择固件映像传输协议,选择MQTT.

      2. 适用于选择并签署固件映像,选择为我签署新的固件映像.

      3. 适用于代码签名配置,选择Create.

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

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

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

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

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


                Tera Term 串行端口设置窗口

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

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

  1. 启动 e2演播室。

  2. 选择File (文件),然后选择导入....

  3. Select瑞萨电子 GitHub FreeRTOS(带 IoT 库)项目.

    
                        e 平方工作室导入窗口
  4. 选择查看更多版本...以显示下载对话框。

    
                        e 平方工作室下载对话框窗口
  5. 选择最新的套餐。

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

    
                        e 平方工作室 EULA 对话框
  7. 等待下载完成。

    
                        下载进度条
  8. 选择aws_demosboot_loader项目,然后选择Finish来导入它们。

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

    1. 选择当前工具链.

    2. 选择当前构建器.

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

    选择工具设置选项卡,展开转换器然后选择输出. 在主窗口中,确保输出 hex 文件处于选中状态,然后选择输出文件类型.

  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 密钥对”瑞萨电子 MCU 固件更新设计政策.

    然后构建要创建的项目boot_loader.mot.

  12. 打开aws_demos项目。

    1. 打开 Amazon IoT 控制台

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

    3. 选择Manage,然后选择事物. 记下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_clientential_keys_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";

      其中你的证书密钥是文件中的值。secp256r1.crt. 记得在认证的每一行之后添加 “\”。有关创建secp256r1.crt文件,请参阅如何在 RX65N 上使用 Amazon Web Services 来实施 FreeRTOS OTA和第 7.3 节 “使用 OpenSSL 生成 ECDSA-SHA256 密钥对”瑞萨电子 MCU 固件更新设计政策.

  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_ENABLED要么CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED.

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

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

    4. 选择构建创建aws_demos.mot文件。

  14. 创建文件userprog.mot使用瑞萨电子安全闪存程序员。userprog.mot是一种组合aws_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. 从下载最新版本的瑞萨电子 Flash 编程器(编程 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 更新。如果你已经在电脑上打开了 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. 创建userprog.rsu文件与瑞萨安全 Flash 程序员一起更新固件版本。

    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. 上传固件更新。userproj.rsu按如中所述,到 Amazon S3 存储桶中。创建 Amazon S3 存储桶以存储更新.

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

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

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

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

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

      • 选择MQTT.

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

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

      • 适用于设备上固件映像的路径名输入,test.

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

    4. 选择下一步

    5. 输入 ID 然后选择Create.

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

  22. 在存储库的Amazon IoT验证作业状态是否为Succeeded.