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

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

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

重要

该参考集成托管在已弃用的 Amazon-FreeRTOS 存储库中。当您创建新项目时,我们建议从此处开始。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目,请参阅 亚马逊免费版 RTOS 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。

设置您的 AWS 资源

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

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

  3. 打开AWS IoT 控制台

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

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

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

    2. 输入事物的名称,然后选择下一步

    3. 选择创建证书

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

    5. 选择附加策略

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

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

      注意
      • 这些iot:Connect权限允许您的设备通过 MQTT AWS IoT 进行连接。

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

      • AWS IoT OTA 直播主题的iot:Subscribeiot:Publish权限 (.../streams/*) 允许连接的设备从中获取 OTA 更新数据 AWS IoT。在通过 MQTT 执行固件更新时,需要这些权限。

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

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

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

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

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

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

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

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

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

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

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

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

  6. 要授予对的代码签名的访问权限 AWS IoT,请按照中的步骤操作授予对代码签名的访问权限 AWS 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. 选择瑞萨电子 FreeRTO GitHub S(含物联网库)项目。

    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(设置)。选择工具链选项卡,然后选择工具链版本

    瑞萨 CCRX 版本 v3.01.00 的工具链集成设置,可选择更改工具链。

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

    C/C++ 生成配置设置窗口显示编译器和链接器选项,例如输出十六进制文件、输出文件类型、输出目录和文件分割选项。
    界面设置树,包含堆栈分析、工具链编辑器、C/C++ 常规、MCU、项目参考等选项。
  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 密钥对”。

    代码编辑器显示一个 C 头文件,其中包含 CODE_SIGNER_PUBLIC_KEY 的定义和一个 PEM 编码的代码签名器公钥变量。

    然后构建项目以创建 boot_loader.mot

  12. 打开 aws_demos 项目。

    1. 打开AWS IoT 控制台

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

    3. 选择管理,然后选择事物。记下你的棋盘上的 AWS IoT 事物名称。

    4. aws_demos 项目中,打开 demos/include/aws_clientcredential.h 并指定以下值。

      #define clientcredentialMQTT_BROKER_ENDPOINT[] = "Your AWS IoT endpoint"; #define clientcredentialIOT_THING_NAME "The AWS IoT thing name of your board"
      显示 AWS IoT 事物名称和代理端点配置设置的代码片段。
    5. 打开 tools/certificate_configuration/CertificateConfigurator.html文件。

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

    7. 选择生成并保存 aws_clientcredential_keys.h,并在 demos/include/ 目录下替换此文件。

      证书配置工具,其中包含用于从 AWS IoT 控制台提供客户端证书和私钥 PEM 文件的字段,以及一个用于生成和保存 aws_clientcredial_keys.h 文件的按钮。
    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 密钥对”。

      源代码文件显示 C 代码,该代码定义了 PEM 编码的代码签名者证书常量字符串,其中包含经过编辑的证书数据。
  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. 部分查看器中更改以下设置。

      分区查看器窗口显示内存地址、分区名称(如 SU、SI、寄存器)以及接口组件(如网络缓冲区、异常和操作按钮)。
    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) 的位置。

      瑞萨电子的 Secure Flash 编程器窗口,其中包含 MCU、固件验证、序列号、AES 密钥路径和文件路径字段。
    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. 选择开始以擦除库。

      瑞萨电子 Flash Programmer 窗口显示了 RX Group 微控制器项目详细信息、文件路径和闪存操作选项,例如 “擦除”、“编程” 和 “使用 “开始” 和 “确定” 按钮进行验证。
    4. 要刷写 userprog.mot,请选择浏览...,导航到 init_firmware 目录,选择 userprog.mot 文件,然后选择开始

      瑞萨电子 Flash Programmer 窗口显示擦除操作设置,包括微控制器 RX 组、浏览程序文件的选项、“擦除” 和 “开始” 按钮以及要擦除的选定块的状态详细信息。
  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 目录。验证生成是否成功。

      瑞萨电子的 Secure Flash 编程器窗口,其中包含用于生成安全固件的 MCU 选择、固件验证类型、序列号、AES MAC 密钥字段和文件路径输入。
  19. 创建 Amazon S3 存储桶以存储更新中所述,将固件更新 userproj.rsu 上传到 Amazon S3 存储桶。

    Amazon S3 存储桶管理界面,包含文件夹、上传、版本和权限选项
  20. 创建作业以更新 RX65N-RSK 上的固件。

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

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

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

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

      • 选择 MQTT

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

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

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

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

    4. 选择下一步

      固件映像签名和 OTA 更新设置,可选择新固件签名、选择之前签名的固件、使用自定义签名的固件、指定代码签名配置文件、固件映像文件、设备上的路径以及 OTA 更新任务的 IAM 角色。
    5. 输入一个 ID,然后选择创建

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

    命令行输出显示线程的初始化以及与代理的连接。
  22. 在 AWS IoT 控制台上,验证任务状态是否为 “成功”。

    AFR OTA-demo 测试任务概述显示 1 个资源成功。