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

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

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

本章说明如何在 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 程序员、Renesas Secure Flash 程序员 exe、Tera Term

设置硬件

  1. 将 E2 Lite 仿真器和 USB 串行端口连接到 RX65N 主板和 PC。

  2. 将电源连接到 RX65N。

设置 AWS 资源

  1. 要运行 FreeRTOS 演示,您必须拥有 AWS 账户,该账户具有有权访问 AWS Identity and Access Management 服务的 IAM (AWS IoT) 用户。如果您尚未这样做,请按照设置 AWS 账户和权限中的步骤操作。

  2. 要设置 OTA 更新,请按照OTA 更新先决条件中的步骤操作。具体而言,请按照使用 MQTT 的 OTA 更新的先决条件中的步骤操作。

  3. 打开 AWS IoT 控制台.

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

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

    1. 选择 Create (创建),然后选择 Create a single thing (创建单个事物)

    2. 为您的事物输入 Name (名称),然后选择 Next (下一步)

    3. 选择 Create certificate.

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

    5. 选择附加策略.

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

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

      Notes

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

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

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

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

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

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

    2. 打开 AWS IoT 控制台. 在左侧导航窗格中,选择 Manage (管理),然后选择 Jobs (作业)。选择 Create a job (创建作业),然后选择 Create OTA update Job (创建 OTA 更新作业)

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

    4. Create a FreeRTOS OTA update job (创建 OTA 更新作业) 页面上,执行以下操作:

      1. 对于 Select the protocol for firmware image transfer (选择固件映像传输协议),选择 MQTT

      2. 对于 Select and sign your firmware image (选择并签署固件映像),选择 Sign a new firmware image for me (为我签署新的固件映像)

      3. 对于 Code signing profile (代码签名配置文件),选择 Create (创建)

      4. Create a code signing profile (创建代码签名配置文件) 窗口中,输入 Profile name (配置文件名称)。对于 Device hardware platform (设备硬件平台),选择 Windows Simulator (Windows 模拟器)。对于 Code signing certificate (代码签名证书),选择 Import (导入)

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

      6. 输入 Pathname of code signing certificate on device (设备上代码签名证书的路径名)。然后选择 Create (创建).

  6. 要授予对 AWS IoT 代码签名的访问权限,请按照授予 Code Signing for 访问权限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. 选择 File (文件),然后选择 Import... (导入...)

  3. 选择 Renesas GitHub FreeRTOS (具有 IoT 库) Project

    
                        e-squared Studio 导入窗口
  4. 选择 Check for more version... (检查更多版本...) 以显示下载对话框。

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

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

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

    
                        下载进度栏
  8. 选择 aws_demosboot_loader 项目,然后选择 Finish (完成) 以导入它们。

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

    1. 选择 Current toolchain (当前工具链)

    2. 选择 Current builder (当前生成器)

    
                        e-squared Studio 属性窗口
  10. 在导航窗格中,选择 Settings. 选择 Toolchain 选项卡,然后选择工具链 Version

    选择 Tool Settings 选项卡,展开 Converter,然后选择 Output。在主窗口中,确保选中 Output hex file (输出十六进制文件),然后选择 Output file type (输出文件类型)

  11. 在启动加载程序项目中,打开 projects\renesas\rx65n-rsk\e2studio\boot_loader\src\key\code_signer_public_key.h 并输入公有密钥。有关如何创建公有密钥的信息,请参阅 Renesas MCU 固件更新设计策略FreeRTOS中的Amazon Web Services如何通过在 RX65N 上使用 来实施 OpenSSL OTA 和第 7.3 节“使用 生成 ECDSA-SHA256 密钥对”。

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

  12. 打开 aws_demos 项目。

    1. 打开 AWS IoT 控制台.

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

    3. 选择 Manage (管理),然后选择 Things (事物)。记下主板的 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"
    5. 打开 tools/certificate_configuration/CertificateConfigurator.html 文件。

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

    7. 选择 Generate and save aws_clientcredential_keys.h (生成并保存 aws_clientcredential_keys.h),然后在 /demos/include/ 目录中替换此文件。

    8. 打开 /demos/include/aws_ota_codesigner_certificate.h 文件,并指定这些值。

      #define signingcredentialSIGNING_CERTIFICATE_PEM [] = "your-certificate-key";

      其中 your-certificate-key 是来自文件 secp256r1.crt 的值。 请记住,在认证中的每一行后添加“\\”。有关创建 secp256r1.crt 文件的更多信息,请参阅 Renesas MCU 固件更新设计策略FreeRTOS中的如何通过在 RX65N 上使用 Amazon Web Services 来实施 OpenSSL OTA 和第 7.3 节“使用 生成 ECDSA-SHA256 密钥对”。

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

    1. 打开 vendors/renesas/boards/board/aws_demos/config_files/aws_demo_config.h 文件,注释掉 #define CONFIG_MQTT_DEMO_ENABLED 并定义 CONFIG_OTA_UPDATE_DEMO_ENABLED

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

    3. 更改 Section Viewer (部分查看器) 中的以下设置。

    4. 选择 Build 以创建 aws_demos.mot 文件。

  14. 使用 Renesas 安全闪存程序员创建文件 userprog.motuserprog.motaws_demos.motboot_loader.mot 的组合。 您可以将此文件刷写到 RX65N-RSK 以安装初始固件。

    1. 下载 https://github.com/renesas/Amazon-<gls id=1>FreeRTOS</gls>-Tools 并打开 Renesas Secure Flash Programmer.exe

    2. 选择 InitialConfirmer 选项卡,然后设置以下参数:

      • 私有密钥路径 – 的位置。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 程序员(编程 GUI)。

    2. 打开 vendors\renesas\rx_mcu_boards\boards\rx65n-rsk\aws_demos\flash_project\erase_from_bank\ erase.rpj 文件可擦除库中的数据。

    3. 选择 Start (开始) 以擦除库。

    4. 要刷写 userprog.mot,请选择 Browse... (浏览...) 并导航到 init_firmware 目录,选择 userprog.mot 文件,然后选择 Start (开始)

  16. 固件的版本 0.9.2(初始版本)已安装在您的 RX65N-RSK 中。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 安全闪存程序员创建 userprog.rsu 文件,以更新固件的版本。

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

    2. 选择 UpdateCrm 选项卡并设置以下参数:

      • 文件路径 – 文件 (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 上的固件。

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

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

    2. 选择 Create a job (创建作业),然后选择 Create OTA Update job (创建 OTA 更新作业)。选择事物,然后选择 Next (下一步)

    3. 创建 FreeRTOS OTA 更新作业,如下所示:

      • 选择 MQTT

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

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

      • 对于 Pathname of firmware image on device (设备上固件映像的路径名),输入 test

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

    4. 选择 Next (下一步).

    5. 输入 ID,然后选择 Create (创建)

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

  22. 在 AWS IoT 控制台上,验证作业状态为 Succeeded (已成功)