Тестирование OTA на Nordic

В следующих инструкциях используется пример приложения освещения из Matter SDK вместе с платой разработки Nordic nRF52840.

Настройка среды

Эти инструкции основаны на установке nRF Connect toolchain на основе Docker. Если вы предпочитаете не использовать Docker, инструкции по установке nRF Connect на хост-компьютере находятся на сайте Nordic .

Ознакомьтесь с 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 к компьютеру. Проверьте нумерацию USB ее последовательного интерфейса:

На 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

Или запустите сеанс root с помощью:

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

Инициализируйте SDK

В контейнере инициализируйте Matter SDK и переменные среды для Nordic nRF52 toolchain. Инициализация 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) в десятичном формате.

  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-образ

После прошивки устройства еще раз измените настройки сборки, чтобы создать 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, а также URL-адрес для QR-кода ввода в эксплуатацию:

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) используя QR-код из ссылки, найденной в журнале.

После ввода в эксплуатацию оставьте устройство регистрировать свою деятельность.

В журнале устройства вы должны увидеть следующий текст:

/* 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, на котором отображается поле версии программного обеспечения