OTA auf Nordic testen

In der folgenden Anleitung wird das Beispiel einer Lighting-App aus dem Matter SDK mit einem Nordic nRF52840-Entwicklungsboard verwendet.

Umgebung einrichten

Diese Anleitung basiert auf einer Docker-basierten Installation der nRF Connect-Toolchain. Wenn Sie Docker lieber nicht verwenden möchten, finden Sie auf der skandinavischen Website eine Anleitung zur nativen Installation von nRF Connect auf einem Hostcomputer.

Matter SDK ausprobieren

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

Prüfen Sie, welches Docker-Image das richtige ist. Verwenden Sie eines der Images, die für die kontinuierliche Integration des Matter SDK erstellt wurden.

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

Schließe das Nordic Board an den Computer an. Prüfen Sie die USB-Enumeration seiner seriellen Schnittstelle:

Unter macOS:

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

Unter Linux haben Sie folgende Möglichkeiten:

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

oder

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

Führen Sie einen Container mit den Informationen aus dem vorherigen Befehl aus. Übergeben Sie die Flags, um den Matter-Host-SDK-Ordner und die serielle USB-Schnittstelle im Container bereitzustellen.

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-Container beenden und starten

Wenn Sie einen docker run-Befehl ausführen, erstellen Sie einen neuen Container mit dem angegebenen Image. Dabei gehen Ihre alten Daten verloren, die in einer vorherigen Containerinstanz gespeichert wurden. Manchmal ist das so, was Sie möchten, weil Sie so mit einer neuen Installation beginnen können. In diesem Beispiel möchten Sie Ihre Arbeits- und Umgebungskonfiguration jedoch höchstwahrscheinlich zwischen Sitzungen speichern.

user@host> docker stop container_name

Wenn Sie zur erneuten Ausführung bereit sind, starten Sie den Container und öffnen Sie ein Terminalfenster:

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

Mit den folgenden Methoden können Sie zusätzliche Terminalsitzungen für Ihren Container öffnen:

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

Oder starten Sie eine Root-Sitzung mit:

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

SDK initialisieren

Initialisieren Sie im Container das Matter SDK und die Umgebungsvariablen für die nordische nRF52-Toolchain. Die Initialisierung des Matter-SDKs dauert oft mehrere Minuten.

$ 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

Build und Flash

Konfiguriere die VID und die PID für das Gerät:

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

In den interaktiven Menüoptionen:

  1. Modules --->

  2. connectedhomeip --->

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

  4. Geben Sie Device vendor ID (VID) und Device product ID (PID) im Basis-10-Ganzzahlformat ein.

  5. Achten Sie darauf, dass das Flag [*] Enable OTA requestor ausgewählt ist.

  6. Drücken Sie s, um die Konfiguration zu speichern, die Eingabetaste zur Bestätigung und dann q, um menuconfig zu beenden.

Testzertifikate einrichten

Führen Sie die Schritte unter Matter-Testzertifikate erstellen aus, um CD-, DAC- und PAI-Zertifikate zu erstellen.

Dein Gerät zusammenstellen

$ west build -b nrf52840dk_nrf52840

Gerät blinken lassen

Dies erfolgt auf dem Hostcomputer, nicht im Docker-Container.

Wenn Sie die nRFConnect-Befehlszeilentools noch nicht haben, laden Sie sie herunter und installieren Sie sie.

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

Stellen Sie eine Terminalverbindung zu Ihrem Gerät entweder auf dem Host oder im Container her. Verwenden Sie ein Terminaltool Ihrer Wahl, z. B. minicom oder GNU screen.

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

user@host> screen /dev/ttyACM0 115200

OTA-Image erstellen und hochladen

Nachdem du dein Gerät geflasht hast, ändere die Build-Einstellungen noch einmal, um ein OTA-Image mit einer höheren Gerätesoftwareversion zu erstellen.

Zephyr menuconfig starten:

$ west build -b nrf52840dk_nrf52840 -t menuconfig

In den interaktiven Menüoptionen:

  1. Modules -->

  2. connectedhomeip -->

  3. Connected Home over IP protocol stack -->

  4. Ändern Sie Device Software Version zu 2.

  5. Ändern Sie Device Software Version String zu prerelease-2.

  6. Drücken Sie s, um die Konfiguration zu speichern, die Eingabetaste zur Bestätigung und dann q, um menuconfig zu beenden.

Erstellen Sie die neue OTA-Bundle-Datei Matter. Die Ausgabe wird im Verzeichnis build/zephyr/zephyr.bin platziert.

$ /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

Prüfen Sie die Attribute der generierten OTA-Bundle-Datei Matter:

/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

Da das Matter SDK über Ihren Containerhost bereitgestellt wird, ist das OTA-Image auch auf Ihrem Containerhost verfügbar. Lade das OTA-Image auf Google Home Developer Console hoch. Folge dazu der Anleitung zum OTA-Upload.

Nehmen Sie das Gerät in Betrieb und beobachten Sie den OTA-Prozess.

Stellen Sie eine Terminalverbindung zum Gerät auf dem Host oder im Container her. Verwenden Sie Ihr bevorzugtes Terminal, z. B. minicom oder GNU screen:

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

Drücken Sie die Taste zum Zurücksetzen auf das Gerät, um Protokolle vom Bootvorgang anzuzeigen.

In der Geräteausgabe sollten die von Ihnen festgelegte VID und PID sowie die URL für den QR-Code für die Inbetriebnahme angezeigt werden:

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

Prüfe, ob dein Hub online ist, und nimm das Gerät mit der Google Home app (GHA) in Betrieb. Verwende dazu den QR-Code aus dem Link im Protokoll.

Das Gerät darf nach der Inbetriebnahme keine Aktivitäten aufzeichnen.

Im Geräteprotokoll sollte der folgende Text angezeigt werden:

/* 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

Nachdem das Image angewendet wurde, wird das Gerät neu gestartet. Nach dem Neustart sollte die Kompilierungszeit des Images mit der in Developer Console hochgeladenen Zeit übereinstimmen.

OTA-Softwareupdate validieren

Die Gerätesoftwareversion kann über die Google Home App (GHA) geprüft werden. Nach der Inbetriebnahme eines Geräts gehen Sie so vor:

  1. Halte die Gerätekachel auf dem Hauptbildschirm von GHA lange gedrückt
  2. Tippe oben rechts auf das -Symbol.
  3. Tippen Sie auf Technische Daten.
  4. Prüfen Sie das Feld Softwareversion.

Bildschirm der Google Home App, auf dem das Feld für die Softwareversion angezeigt wird