在北欧上测试 OTA

以下说明使用 照明应用 Matter SDK 中的示例以及 Nordic nRF52840 开发板。

环境设置

这些说明基于 nRF Connect 工具链。如果您不想使用 Docker,请查看有关安装 nRF 的说明 在主机上以原生方式连接

查看 Matter SDK

user@host> mkdir otaprep
user@host> cd otaprep
user@host> git clone https://github.com/project-chip/connectedhomeip.git
user@host> cd connectedhomeip/
user@host> git fetch origin v1.0-branch
user@host> git checkout FETCH_HEAD

检查要使用的正确 Docker 映像。使用为 Matter SDK 持续集成。

user@host> cat .github/workflows/examples-nrfconnect.yaml | grep chip-build
            image: connectedhomeip/chip-build-nrf-platform:0.5.99

将 Nordic 开发板连接到计算机。检查 其串行接口:

在 MacOS 上:

user@host> ls /dev/tty.usbmodem*
/dev/tty.usbmodem0123456789000

在 Linux 上,您可以执行以下任一操作:

user@host> ls /dev/tty*AC*
/dev/ttyACM0

user@host> ls /dev/tty*USB*
/dev/ttyUSB0

使用在上一条命令中收集的信息运行容器。通过 用于装载主机 Matter SDK 文件夹和 USB 的标志 将串行接口插入容器中

user@host> docker run --name container_name -it --user $(id -u):$(id -g) --mount source=$(pwd),target=/workspace,type=bind connectedhomeip/chip-build-nrf-platform:0.5.99 /bin/bash

停止和启动 Matter Docker 容器

每当您运行 docker run 命令时,您都需要创建一个新容器, 指定映像当您执行此操作时,之前保存在 先前容器实例会丢失有时,您就是希望 因为这样可让您从头开始安装在这里, 保存工作和环境配置所需的全部示例 。

user@host> docker stop container_name

准备好再次运行时,启动容器并打开一个终端 窗口:

user@host> docker start container_name
user@host> docker exec -it container_name /bin/bash

您可以使用以下命令打开容器的其他终端会话:

user@host> docker exec -it container_name /bin/bash

或者使用以下命令启动根会话:

user@host> docker exec -u 0 -it container_name /bin/bash

初始化 SDK

在容器中,初始化 Matter SDK 和 环境变量。通过 Matter SDK 初始化通常需要几分钟时间。

$ cd /workspace
$ git submodule update --init --recursive
$ source ./scripts/bootstrap.sh
$ source ./scripts/activate.sh
$ export ZEPHYR_BASE=/opt/NordicSemiconductor/nrfconnect/zephyr
$ export GNUARMEMB_TOOLCHAIN_PATH="$PW_ARM_CIPD_INSTALL_DIR"
$ scripts/run_in_build_env.sh "python3 scripts/setup/nrfconnect/update_ncs.py --update --shallow"
$ source /opt/NordicSemiconductor/nrfconnect/zephyr/zephyr-env.sh

构建和刷写

为设备配置 VID 和 PID:

$ cd examples/lighting-app/nrfconnect
$ west build -b nrf52840dk_nrf52840 -t menuconfig

在互动式菜单选项中:

  1. Modules --->

  2. connectedhomeip --->

  3. [*] Connected Home over IP protocol stack --->

  4. 输入 Device vendor ID (VID) 和 Device product ID (PID),以 10 为底数 整数格式。

  5. 确保选中 [*] Enable OTA requestor 标志。

  6. s 保存配置,按 Enter 确认,然后 按 q 可退出 menuconfig

设置测试证书

请按照创建 Matter 设备测试证书中的步骤操作 来创建 CD、DAC 和 PAI 证书

打造您的设备

$ west build -b nrf52840dk_nrf52840

刷写设备

此操作在主机上完成,而不是在 Docker 容器中完成。

如果您还没有 nRFConnect 命令行工具,请下载并 安装这些应用

user@host> nrfjprog --program build/zephyr/merged.hex --chiperase -f NRF52

在主机或 容器。使用您喜爱的终端工具,例如 minicom 或 GNU screen

user@host> minicom -c on -D /dev/ttyACM0 115200

user@host> screen /dev/ttyACM0 115200

创建并上传 OTA 映像

刷写设备之后,再次更改 build 设置以创建 设备软件版本递增的 OTA 映像。

启动 Zephyr menuconfig

$ west build -b nrf52840dk_nrf52840 -t menuconfig

在互动式菜单选项中:

  1. Modules -->

  2. connectedhomeip -->

  3. Connected Home over IP protocol stack -->

  4. Device Software Version 更改为 2

  5. Device Software Version String 更改为 prerelease-2

  6. s 保存配置,按 Enter 确认,然后 按 q 可退出 menuconfig

构建新的 Matter OTA 软件包文件。输出放置在 在 build/zephyr/zephyr.bin 中。

$ /workspace/src/app/ota_image_tool.py create -v hex_VID -p hex_PID -vn version_no -vs version_string path_to_binary -da digest_algorithm path_to_ota_file

确认生成的 Matter OTA 软件包的属性 文件:

/workspace/examples/lighting-app/nrfconnect# /workspace/src/app/ota_image_tool.py show firmware-ota-update-test.bin
Magic: 1beef11e
Total Size: 951784
Header Size: 72
Header TLV:
  [0] Vendor Id: XXXXX (0xXXXX)
  [1] Product Id: 32768 (0x8000)
  [2] Version: 2 (0x2)
  [3] Version String: prerelease-2
  [4] Payload Size: 951696 (0xe8590)
  [8] Digest Type: 1 (0x1)
  [9] Digest: 75f2e8b0c8e922b8bb3841504190bcdd83533e936a284c7254d29327d605c930

由于 Matter SDK 是从容器主机装载的, OTA 映像也可在容器主机上使用。将 OTA 映像上传到 Google Home Developer Console(按照 OTA 上传操作完成) 操作说明

调试设备并观察 OTA 流程。

在主机或 容器。使用您喜爱的终端,例如 minicom 或 GNU screen

$ minicom -c on -D /dev/ttyACM0 115200

按设备的重置按钮以查看启动后的日志。

在设备输出中,您应该会看到自己设置的 VID 和 PID,以及 调试二维码的网址:

I: nRF5 802154 radio initialized
I: 4 Sectors of 4096 bytes

(...)

I: 681 [SVR]Server Listening...
I: 684 [DL]Device Configuration:
I: 687 [DL]  Serial Number: 11223344556677889900
I: 692 [DL]  Vendor Id: XXXXX (0xXXXX)
I: 695 [DL]  Product Id: XXXXX (0xXXXX)
I: 699 [DL]  Hardware Version: 0
I: 702 [DL]  Setup Pin Code (0 for UNKNOWN/ERROR): 20202021
I: 708 [DL]  Setup Discriminator (0xFFFF for UNKNOWN/ERROR): 3840 (0xF00)
I: 714 [DL]  Manufacturing Date: (not set)
I: 718 [DL]  Device Type: 65535 (0xFFFF)
I: 723 [SVR]SetupQRCode: [MT:6FCJ142C00KA0648G00]
I: 727 [SVR]Copy/paste the below URL in a browser to see the QR Code:
I: 733 [SVR]https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%000000000000000000000
I: 742 [SVR]Manual pairing code: [30900112302]
I: 747 [DL]CHIP task running
I: 752 [DL]CHIPoBLE advertising started
I: 757 [DL]NFC Tag emulation started

请确保您的 Hub 处于在线状态,然后使用 使用日志中链接的二维码Google Home app (GHA)

调试完成后,让设备记录其活动。

您应该会在设备日志中看到以下文本:

/* Hub OTA provider identification */
I: 69642 [SWU]OTA Requestor received AnnounceOTAProvider
D: 69647 [SWU]  FabricIndex: 1
D: 69649 [SWU]  ProviderNodeID: 0x00000000XXXXXXXX
D: 69654 [SWU]  VendorID: 0x6006
D: 69657 [SWU]  AnnouncementReason: 0
D: 69660 [SWU]  Endpoint: 2
...
D: 69799 [SWU]Establishing session to provider node ID 0x00000000FC843D94 on fabric index 1
...
D: 262265 [SWU]QueryImageResponse:
D: 262268 [SWU]  status: 0
D: 262271 [SWU]  imageURI: bdx://00000000FC843D94/37f09fd6-0000-0000-0000-000000000000
D: 262278 [SWU]  softwareVersion: 2
D: 262281 [SWU]  softwareVersionString: 2
D: 262285 [SWU]  updateToken: 36
D: 262288 [SWU]  userConsentNeeded: 0
D: 262292 [SWU]Update available from version 0 to 2
...
D: 262372 [SWU]Establishing session to provider node ID 0x00000000FC843D94 on fabric index 1
...
D: 262409 [SWU]BDX::SendMessage

应用映像后,设备会重新启动。重新启动后,编译时 应与上传到 Developer Console

验证 OTA 软件更新

您可以使用 Google Home 应用 (GHA) 检查设备的软件版本。设备完成调试后,请按以下步骤操作:

  1. 长按GHA主屏幕上的设备图块
  2. 点按右上角的 图标
  3. 点按技术信息
  4. 查看软件版本字段

显示软件版本字段的 Google Home 应用界面