OTA 请求者

Matter 无线软件更新( OTA )是一个允许 Matter 设备在一个 Fabric 中更新其固件的过程。 Matter 核心规范 要求每个设备都实现一个固件更新方法以确保安全。 这个 OTA 请求者示例演示了使用 Matter 操作网络查询和下载新固件镜像的方法。

可以将此示例作为创建自己应用程序的参考。

  • OTA 提供者 - 这是一个可以响应 OTA 请求者关于可用软件更新的查询,并与其共享更新包的节点。

  • OTA 请求者 - 这可以是任何需要软件更新的节点,它与 OTA 提供者通信以获取适用的软件更新。

在此示例中,OTA 提供者将是一个 Linux 应用程序,此示例将作为 OTA 请求者。 Realtek OTA 方案根据 Flash 布局的不同,可以分为 支持 Bank 切换不支持 Bank 切换 ,请参考 方案介绍 以获取更多信息。 此示例将展示 支持 Bank 切换 的方案。

环境需求

该示例支持以下开发套件:

支持的开发套件

硬件平台

板卡名称

RTL8777G HDK

RTL8777G EVB

准备 Matter 环境

要设置 Matter 环境,请按照 开发环境设置 中列出的步骤操作。

准备 CHIP Tool

CHIP Tool(chip-tool)是 Matter 的控制器实现,允许将 Matter 设备加入网络并使用 Matter 消息与其通信,这些消息可能包含数据模型的相关操作,例如群集命令。该工具还提供其他特定于 Matter 的实用程序,如解析设置负载或执行发现操作。

要构建 CHIP Tool,请按照 CHIP Tool 步骤操作。

配置选项

以下配置可用于此示例。

CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION

用于标识设备上运行的软件版本的单调数字

CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING

标识设备上运行的软件版本的字符串

请参阅 Matter APP 配置 以获取有关配置项的更多信息。 另外,./subsys/openthread 目录下的 CMakePresets.json 文件也会使用到, 本示例将使用 dual 这组配置。

ENABLE_OTA_REQUESTOR

是否使能 Matter OTA Requestor 功能

OTA_VERSION

OTA Header 的版本号

编译和下载

编译

导航到指定目录并编译 ota-requestor 应用。

$ cd ./subsys/matter/samples
$ rm -r build/
$ ./build.py rtl8777g ota-requestor --preset dual

下载

编译成功后,应用程序 bin 文件 matter-cli-ftd_bank0_MP_dev_*.bin 将在目录 build/bank0/bin 中生成。

要将应用程序 bin 文件下载到 EVB 板,按照 快速入门固件下载 中列出的步骤操作。如果工厂数据已启用,请参阅 工厂数据 中的 烧录工厂数据

然后按下 EVB 板上的重置按钮,它将开始运行。

备注

MPTool 需要加载 ./subsys/openthread/vendor/bee4/rtl8777g_dual 目录下的 flash_map.ini 文件。

其他需要烧录的文件如 对应烧录文件所示,System Config FileOTA Header File 可以 参考 快速入门System Config FileOTA Header 来生成。

对应烧录文件

文件类型

文件

文件路径

System Config File

configFile_xxx.bin

(MP Tool 生成)

Bank0 Boot Patch Image

BANK0_boot_patch_MP_release_xxx.bin

\subsys\openthread\vendor\bee4\rtl8777g_dual\firmware\bank0

Bank0 OTA Header File

OTAHeader_Bank0_xxx.bin

(MP Tool 生成)

Bank0 System Patch Image

sys_patch_MP_release_xxx.bin

\subsys\openthread\vendor\bee4\rtl8777g_dual\firmware\bank0

Bank0 Bluetooth Stack Patch Image

bt_stack_patch_MP_master_xxx.bin

\subsys\openthread\vendor\bee4\rtl8777g_dual\firmware\bank0

Bank0 Bluetooth Host Image

bt_host_MP_xxx.bin

\subsys\openthread\vendor\bee4\rtl8777g_dual\firmware\bank0

准备 OTA 镜像

要验证启动更新的 OTA 请求者镜像,必须执行以下操作:

  1. OTA 请求者应用程序的当前软件版本由 CHIPProjectConfig.h 中的 CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION 定义, 将 CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSIONCHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION_STRING 修改为大于当前运行版本的值。

  2. 修改 ./subsys/openthread 目录下的 CMakePresets.json 文件,将 dual 配置下的 OTA_VERSION 修改为大于当前运行版本的值。

  3. 编译新版本的 OTA 请求者应用程序。

  4. Matter OTA 镜像是编译输出文件之一,OTA 镜像的默认位置是在构建目录中的 build/ota/matter.ota

  5. 提供给 OTA 提供者应用程序镜像文件时,请使用此生成的二进制文件。

备注

  • CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION 需要大于当前运行的版本号,这样 Matter OTA 才能正常启动。

  • OTA_VERSION 对应 OTA Header 的版本,需要大于当前运行的版本号,这样 Matter OTA 传输完成并且设备重启后才能带起正确的 bank 。

测试验证

要测试示例,需要完成以下步骤:

  1. 导航到 CHIP 根目录。

  2. 编译 Linux OTA 提供者应用程序:

    $ scripts/examples/gn_build_example.sh examples/ota-provider-app/linux out/provider chip_config_network_layer_ble=false
    
  3. 运行 OTA 提供者应用程序,将 matter.ota 替换为希望提供给 Matter 设备的 Matter OTA 镜像的路径。 请注意,Matter OTA 镜像默认生成在示例构建目录中的 build/ota/matter.ota

    $ ./out/provider/chip-ota-provider-app -f matter.ota
    
    • 保持应用程序运行,并使用另一个终端完成其余步骤。

  4. 使用节点 ID 1 给 Matter 设备配网。以 hex: 前缀开头的参数是 Thread 网络的活动操作数据集。 如果在组建网络时更改了默认网络设置,可以从 OTBR 中检索它。

    $ ./out/chiptool/chip-tool pairing ble-thread 1 hex:<operationalDataset> 20202021 3840
    
  5. 使用节点 ID 2 给 OTA 提供者配网:

    $ ./out/chiptool/chip-tool pairing onnetwork 2 20202021
    
  6. 运行以下命令配置 Matter 设备的默认 OTA 提供者(最后两个参数分别是请求者节点 ID 和请求者端点 ID):

    $ ./out/chiptool/chip-tool otasoftwareupdaterequestor write default-otaproviders '[{"fabricIndex": 1, "providerNodeID": 2, "endpoint": 0}]' 1 0
    
  7. 向 OTA 提供者配置访问控制列表(ACL),以授予 Fabric 中所有节点操作特权,这是允许节点向 OTA 提供者发送 Cluster 命令所必需的:

    $ ./out/chiptool/chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 3, "authMode": 2, "subjects": null, "targets": [{"cluster": 41, "endpoint": null, "deviceType": null}]}]' 2 0
    
  8. 使用 chip-tool 向设备发送公告 OTA 提供者命令(数字参数分别是提供者节点 ID、提供者供应商 ID、公告原因、提供者端点 ID、请求者节点 ID 和请求者端点 ID):

    $ ./out/chiptool/chip-tool otasoftwareupdaterequestor announce-otaprovider 2 0 0 0 1 0
    
  9. OTA 过程应包括下载镜像、验证镜像头、擦除升级的闪存分区、写入闪存和 checksum 验证。一旦 OTA 签名更新,设备将在 10 秒倒计时后重新启动进入新镜像。