OTA auf Nordic testen

In der folgenden Anleitung wird das Beispiel für die Beleuchtungs-App aus dem Matter SDK zusammen mit einem Nordic nRF52840 Entwicklungsboard verwendet.

Umgebung einrichten

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

Matter SDK ansehen

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, ob das richtige Docker-Image verwendet wird. Verwenden Sie eines der Images, die für die Matter SDK Continuous Integration erstellt wurden.

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

Verbinden Sie das Nordic-Board mit dem Computer. Prüfen Sie die USB-Aufzählung der seriellen Schnittstelle:

Unter macOS:

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

Unter Linux:

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, die Sie mit dem vorherigen Befehl erfasst haben. Übergeben Sie die Flags, um den MatterSDK-Ordner des Hosts 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

Jedes Mal, 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 gewünscht, da Sie so mit einer Neuinstallation beginnen können. In diesem Beispiel möchten Sie Ihre Arbeit und die Umgebungskonfiguration jedoch wahrscheinlich zwischen den Sitzungen speichern.

user@host> docker stop container_name

Wenn Sie wieder 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

Sie können zusätzliche Terminalsitzungen für Ihren Container mit folgendem Befehl öffnen:

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

Oder starten Sie eine Root-Sitzung mit folgendem Befehl:

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 Nordic nRF52-Toolchain. Die Matter SDK-Initialisierung 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

Erstellen und flashen

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

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

Optionen im interaktiven Menü:

  1. Modules --->

  2. connectedhomeip --->

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

  4. Geben Sie die Device vendor ID (VID) und die 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, drücken Sie Enter , um zu bestätigen, und dann q , um menuconfig zu beenden.

Testzertifikate einrichten

Folgen Sie der Anleitung unter Matter-Gerätetestzertifikate erstellen , um CD-, DAC- und PAI-Zertifikate zu erstellen.

Gerät erstellen

west build -b nrf52840dk_nrf52840

Gerät flashen

Dies erfolgt auf dem Hostcomputer und 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

Öffnen Sie eine Terminalverbindung zu Ihrem Gerät, entweder auf dem Host oder im Container. Verwenden Sie Ihr bevorzugtes Terminaltool wie 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 Sie Ihr Gerät geflasht haben, ändern Sie die Einstellungen für den Build noch einmal, um ein OTA-Image mit einer erhöhten Softwareversion des Geräts zu erstellen.

Starten Sie Zephyr menuconfig:

west build -b nrf52840dk_nrf52840 -t menuconfig

Optionen im interaktiven Menü:

  1. Modules -->

  2. connectedhomeip -->

  3. Connected Home over IP protocol stack -->

  4. Ändern Sie Device Software Version in 2.

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

  6. Drücken Sie s , um die Konfiguration zu speichern, drücken Sie Enter , um zu bestätigen, und dann q , um menuconfig zu beenden.

Erstellen Sie die neue Matter OTA-Bundle-Datei. Die Ausgabe wird in 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

Bestätigen Sie die Eigenschaften der generierten Matter OTA-Bundle Datei:

/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 vom Containerhost bereitgestellt wird, ist das OTA-Image auch auf dem Containerhost verfügbar. Laden Sie das OTA-Image in der Google Home Developer Console hoch. Folgen Sie dazu der Anleitung zum Hochladen von OTA-Images.

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

Öffnen Sie eine Terminalverbindung zum Gerät, entweder auf dem Host oder im Container. Verwenden Sie Ihr bevorzugtes Terminal wie minicom oder GNU screen:

minicom -c on -D /dev/ttyACM0 115200

Drücken Sie die Reset-Taste des Geräts, um die Logs vom Start zu sehen.

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

Achten Sie darauf, dass Ihr Hub online ist, und nehmen Sie das Gerät mit der Google Home app (GHA) in Betrieb. Verwenden Sie dazu den QR-Code aus dem Link im Log.

Lassen Sie die Aktivitäten des Geräts nach der Inbetriebnahme protokollieren.

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 des Images übereinstimmen, das in die Developer Console hochgeladen wurde.

OTA-Softwareupdate validieren

Die Softwareversion des Geräts kann mit der Google Home App (GHA) geprüft werden. Führen Sie nach der Inbetriebnahme eines Geräts die folgenden Schritte aus:

  1. Drücken Sie lange auf die Gerätekachel auf dem GHA Hauptbildschirm.
  2. Tippen Sie rechts oben auf das Symbol.
  3. Tippen Sie auf Technische Informationen.
  4. Prüfen Sie das Feld Softwareversion.

Bildschirm der Google Home App mit dem Feld für die Softwareversion