

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

# 在瑞萨 N 上下载、构建、刷新并运行 FreeRTOS OTA 演示 RX65
<a name="download-rx65n-ota"></a>

**重要**  <a name="deprecation-message"></a>
该参考集成托管在已弃用的 Amazon-FreeRTOS 存储库中。当您创建新项目时，我们建议[从此处开始](freertos-getting-started-modular.md)。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目，请参阅 [Amazon-FreeRTOS Github 存储库迁移指南](github-repo-migration.md)。

本章向您展示如何在瑞萨 N 上下载、构建、刷新和运行 FreeRTOS OTA 演示应用程序。 RX65

**Topics**
+ [设置操作环境](#download-rx65n-ota-environment)
+ [设置您的 AWS 资源](#download-rx65n-ota-setup)
+ [导入、配置头文件并构建 aws\$1demos 和 boot\$1loader](#download-rx65n-ota-import-configure)

## 设置操作环境
<a name="download-rx65n-ota-environment"></a>

在本节中，此过程使用以下环境：
+ **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. 将 E 2 Lite 仿真器和 USB 串行端口连接到 RX65 N 主板和电脑。

1. 将电源连接到 RX65 N。

## 设置您的 AWS 资源
<a name="download-rx65n-ota-setup"></a>

1. 要运行 FreeRTOS 演示，您必须拥有 AWS 一个拥有有权访问服务的 IAM 用户的账户。 AWS IoT 如果尚未执行此操作，请按照[设置您的AWS账户和权限](freertos-prereqs.md#freertos-account-and-permissions)中的步骤操作。

1. 要设置 OTA 更新，请按照 [OTA 更新先决条件](ota-prereqs.md)中的步骤操作。特别是，请按照[使用 MQTT 的 OTA 更新的先决条件](ota-mqtt-freertos.md)中的步骤操作。

1. 打开 [AWS IoT 控制台](https://console.aws.amazon.com/iot/home)。

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

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

   1. 选择**创建**，然后选择**创建单个事物**。

   1. 输入事物的**名称**，然后选择**下一步**。

   1. 选择**创建证书**。

   1. 下载创建的三个文件，然后选择**激活**。

   1. 选择**附加策略**。  
![\[显示要下载的文件的控制台屏幕\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/download-these-files-rx65n.png)

   1. 选择在 [设备策略](ota-mqtt-freertos.md#ota-mqtt-freertos-device-policy) 中创建的策略。

      每台使用 MQTT 接收 OTA 更新的设备都必须注册为事物， AWS IoT 并且该设备必须具有与列出的策略类似的附加策略。您可以在 [AWS IoT 核心策略操作](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html)和 [AWS IoT 核心操作资源](https://docs.aws.amazon.com/iot/latest/developerguide/iot-action-resources.html)中找到有关 `"Action"` 和 `"Resource"` 对象中项目的更多信息。

**注意**
      + 这些`iot:Connect`权限允许您的设备通过 MQTT AWS IoT 进行连接。
      + 利用 AWS IoT 作业 (`.../jobs/*`) 主题的 `iot:Subscribe` 和 `iot:Publish` 权限，连接的设备能够接收作业通知和作业文档，并发布作业执行的完成状态。
      +  AWS IoT OTA 直播主题的`iot:Subscribe`和`iot:Publish`权限 (`.../streams/*`) 允许连接的设备从中获取 OTA 更新数据 AWS IoT。在通过 MQTT 执行固件更新时，需要这些权限。
      + 这些`iot:Receive`权限 AWS IoT Core 允许将有关这些主题的消息发布到连接的设备。每次传输 MQTT 消息时，都将检查此权限。您可以使用此权限，撤消对当前订阅主题的客户端的访问权限。

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

   1. 要创建密钥和认证，请参阅[瑞](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)萨微控制器固件更新设计政策中的第 7.3 节 “使用 OpenSSL 生成 ECDSA-SHA256 密钥对”。

   1. 打开 [AWS IoT 控制台](https://console.aws.amazon.com/iot/home)。在左导航窗格中，选择**管理**，然后选择**作业**。选择**创建作业**，然后选择**创建 OTA 更新作业**。

   1. 在**选择要更新的设备**下，选择**选择**，然后选择之前创建的事物。选择**下一步**。

   1. 在**创建 FreeRTOS OTA 更新作业**页面上，执行以下操作：

      1. 在**选择固件映像传输协议**中，选择 **MQTT**。

      1. 对于**选择并签署固件映像**，选择**为我签署一个新的固件映像**。

      1. 对于**代码签名配置文件**，选择**创建**。

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

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

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

1. 要授予对的代码签名的访问权限 AWS IoT，请按照中的步骤操作[授予对代码签名的访问权限 AWS IoT](code-sign-policy.md)。

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

![\[Tera Term 串行端口设置窗口\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/tera-team-rx65n.png)


## 导入、配置头文件并构建 aws\$1demos 和 boot\$1loader
<a name="download-rx65n-ota-import-configure"></a>

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

1. 启动 e2 Studio。

1. 选择**文件**，然后选择**导入…**。

1. 选择**瑞萨电子 FreeRTO GitHub S（含物联网库）项目。**  
![\[e-squared studio 导入窗口\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/import-renesas-project-rx65n.png)

1. 选择**查看更多版本…**以显示下载对话框。  
![\[e-squared studio 下载对话框窗口\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/check-more-version-rx65n.png)

1. 选择最新的程序包。  
![\[e-squared studio 模块下载对话框窗口\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/choose-latest-version-rx65n.png)

1. 选择**同意**以接受最终用户许可协议。  
![\[e-squared studio EULA 对话框\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/eula-rx65n.png)

1. 等待下载完成。  
![\[下载进度条\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/downloading-rx65n.png)

1. 选择 **aws\$1demos** 和 **boot\$1loader** 项目，然后选择**完成**以将其导入。  
![\[导入项目窗口\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/import-projects-rx65n.png)

1. 对于这两个项目，打开项目属性。在导航窗格中，选择**工具链编辑器**。

   1. 选择**当前工具链**。

   1. 选择**当前生成器**。  
![\[e-squared studio 属性窗口\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/project-properties-rx65n.png)

1. 在导航窗格中，选择**设置**。选择**工具链**选项卡，然后选择工具链**版本**。  
![\[Renesas CCRX 版本 v3.01.00 的工具链集成设置，其中包含更改工具链的选项。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/project-properties-toolchain-rx65n.png)

   选择**工具设置**选项卡，展开**转换器**，然后选择**输出**。在主窗口中，确保选中**输出十六进制文件**，然后选择**输出文件类型**。  
![\[C/C++ 构建配置设置窗口，展示了编译器和链接器选项（如输出 hex 文件、输出文件类型、输出目录和文件拆分选项）。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/project-properties-settings-rx65n.png)  
![\[界面设置树，其中包含“对战分析”、“工具链编辑器”、“C/C++ 常规”、“MCU”、“项目参考”等选项。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/project-properties-settings-2-rx65n.png)

1. 在引导加载程序项目中，打开 `projects\renesas\rx65n-rsk\e2studio\boot_loader\src\key\code_signer_public_key.h` 并输入公钥。[有关如何创建公钥的信息，请参阅[如何在 N 上使用 Amazon Web Services 实现 FreeRTOS OTA](https://www.renesas.com/us/en/document/apn/rx-family-how-implement-freertos-ota-using-amazon-web-services-rx65n) 和瑞萨 MCU 固件更新设计政策中的第 7.3 节 “使用 OpenSSL 生成 ECDSA-SHA256 密钥对”。 RX65](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)  
![\[代码编辑器，展示了一个 C 表头文件，其中包含 CODE_SIGNER_PUBLIC_KEY 的定义以及一个 PEM 编码的代码签署者公钥变量。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/open-bootloader-project-rx65n.png)

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

1. 打开 `aws_demos` 项目。

   1. 打开 [AWS IoT 控制台](https://console.aws.amazon.com/iot/home)。

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

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

   1. 在 `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 事物名称和代理端点配置设置的代码片段。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/client-credential-rx65n.png)

   1. 打开 `tools/certificate_configuration/CertificateConfigurator.html` 文件。

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

   1. 选择**生成并保存 aws\$1clientcredential\$1keys.h**，并在 `demos/include/` 目录下替换此文件。  
![\[证书配置工具，其中包含用于从 AWS IoT 控制台提供客户端证书和私钥 PEM 文件的字段，以及一个用于生成和保存 aws_clientcredial_keys.h 文件的按钮。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/certificate-config-tool-rx65n.png)

   1. 打开 `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`。记得在证书的每一行后面加上“\$1”。[有关创建`secp256r1.crt`文件的更多信息，请参阅[如何在 N 上使用 Amazon Web Services 实现 FreeRTOS OTA](https://www.renesas.com/us/en/document/apn/rx-family-how-implement-freertos-ota-using-amazon-web-services-rx65n) 和瑞萨 MCU 固件更新设计政策中的第 7.3 节 “使用 OpenSSL 生成 ECDSA-SHA256 密钥对”。 RX65](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)  
![\[源代码文件，展示了一段 C 代码，该代码定义了 PEM 编码的代码签署者证书常量字符串，证书数据已被编辑。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/codesigner-cert-rx65n.png)

1. **任务 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`。

   1. 打开 `demos/include/ aws_application_version.h` 文件，并将固件的初始版本设置为 `0.9.2`。  
![\[代码片段，展示了应用程序的版本定义，包括主版本号、次要版本号和构建版本号的宏。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/firmware-version-rx65n.png)

   1. 在**部分查看器**中更改以下设置。  
![\[段查看器窗口，展示了内存地址、段名称（如 SU 和 SI）寄存器和接口组件（如网络缓冲区、异常和操作按钮）。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/section-viewer-rx65n.png)

   1. 选择**构建**以创建 `aws_demos.mot` 文件。

1. 使用 Renesas Secure Flash Programmer 创建文件 `userprog.mot`。`userprog.mot` 是 `aws_demos.mot` 和 `boot_loader.mot` 的组合。您可以将此文件刷新到 RX65 N-RSK 以安装初始固件。

   1. 下载[ https://github.com/renesas/亚马逊 FreerTOS-Too](https://github.com/renesas/Amazon-FreeRTOS-Tools) ls 并打开。`Renesas Secure Flash Programmer.exe`

   1. 选择**初始固件**选项，然后设置以下参数：
      + **私钥路径** – `secp256r1.privatekey` 的位置。
      + **引导加载程序文件路径** – `boot_loader.mot` (`projects\renesas\rx65n-rsk\e2studio\boot_loader\HardwareDebug`) 的位置。
      + **文件路径** – `aws_demos.mot` (`projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug`) 的位置。  
![\[Renesas 安全闪存编程器窗口，其中包含 MCU、固件验证、序列号、AES 密钥路径和文件路径字段。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/secure-flash-rx65n.png)

   1. 创建一个名为 `init_firmware` 的目录，生成 `userprog.mot`，并将其保存到 `init_firmware` 目录中。验证生成是否成功。

1. 在 RX65 N-RSK 上刷新初始固件。

   1. 从 [ https://www.renesas.com/tw/en/products/software-tools/tools/programmer/renesas-flash-programmer-programming-gui](https://www.renesas.com/tw/en/products/software-tools/tools/programmer/renesas-flash-programmer-programming-gui.html) .html 下载最新版本的瑞萨 Flash Programmer（编程 GUI）。

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

   1. 选择**开始**以擦除库。  
![\[Renesas 闪存编程器窗口，展示了 RX 系列微控制器项目详细信息、文件路径和闪存操作选项（如“擦除”、“程序”和“验证”），以及“启动”和“确定”按钮。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/flash-programmer-erasing-rx65n.png)

   1. 要刷写 `userprog.mot`，请选择**浏览...**，导航到 `init_firmware` 目录，选择 `userprog.mot` 文件，然后选择**开始**。  
![\[Renesas 闪存编程器窗口，展示了“擦除”操作设置，包括微控制器 RX 系列、浏览程序文件的选项、“擦除”和“启动”按钮以及要擦除的选定块的状态详细信息。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/flash-programmer-complete-rx65n.png)

1. 固件的 0.9.2 版（初始版本）已安装到您 RX65的 N-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
   ```

1. **任务 B：更新固件版本**

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

   1. 重新构建项目。

1. 使用 Renesas Secure Flash Programmer 创建 `userprog.rsu` 文件以更新固件版本。

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

   1. 选择**更新固件**选项卡并设置以下参数：
      + **文件路径** – `aws_demos.mot` 文件 (`projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug`) 的位置。

   1. 创建一个名为 `update _firmware` 的目录。生成 `userprog.rsu` 并将其保存到 `update_firmware` 目录。验证生成是否成功。  
![\[Renesas 安全闪存编程器窗口，其中包含 MCU 选择、固件验证类型、序列号、AES MAC 密钥字段以及用于生成安全的固件的文件路径输入。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/update-firmware-rx65n.png)

1. 如[创建 Amazon S3 存储桶以存储更新](dg-ota-bucket.md)中所述，将固件更新 `userproj.rsu` 上传到 Amazon S3 存储桶。  
![\[Amazon S3 存储桶管理界面，其中包含文件夹、上传、版本和权限选项\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/upload-firmware-rx65n.png)

1. 创建任务以更新 RX65 N-RSK 上的固件。

   AWS IoT Jobs 是一项向一台或多台连接的设备通知待处理[任务](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html)的服务。作业可用于管理设备队列、更新设备上的固件和安全证书，或者执行管理任务，例如重新启动设备和执行诊断。

   1. 登录 [AWS IoT 控制台](https://console.aws.amazon.com/iotv2/)。在导航窗格中，选择**管理**，然后选择**作业**。

   1. 选择**创建作业**，然后选择**创建 OTA 更新作业**。选择一个事物，然后选择**下一步**。

   1. 按照以下方式创建 FreeRTOS OTA 更新作业：
      + 选择 **MQTT**。
      + 选择在上一节中创建的代码签名配置文件。
      + 选择上传到 Amazon S3 存储桶的固件映像。
      + 对于**设备上固件映像的路径名**，请输入**test**。
      + 选择在上一部分中创建的 IAM 角色。

   1. 选择**下一步**。  
![\[固件映像签名和 OTA 更新设置，其中包含签署新固件、选择之前签署的固件、使用自定义已签署固件、指定代码签名配置文件、固件映像文件、设备上的路径以及 OTA 更新作业的 IAM 角色的选项。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/create-job-next-rx65n.png)

   1. 输入一个 ID，然后选择**创建**。

1. 重新打开 Tera Term 以验证固件是否已成功更新到 OTA 演示版 0.9.3。  
![\[命令行输出，展示了线程的初始化以及与代理的连接。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/update-successful-rx65n.png)

1. 在 AWS IoT 控制台上，验证任务状态是否为 “**成功**”。  
![\[AFR OTA-demo 测试作业概览，展示了 1 个资源已成功。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/completed-succeeded-rx65n.png)