تست OTA در Nordic

دستورالعمل‌های زیر از مثال برنامه نورپردازی از Matter SDK به همراه یک برد توسعه Nordic nRF52840 استفاده می‌کنند.

تنظیمات محیط

این دستورالعمل‌ها بر اساس نصب مبتنی بر داکر از ابزار nRF Connect هستند. اگر ترجیح می‌دهید از داکر استفاده نکنید، دستورالعمل‌های نصب nRF Connect به صورت بومی روی رایانه میزبان در سایت Nordic موجود است.

کیت توسعه نرم‌افزاری Matter را بررسی کنید

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

ایمیج داکر صحیح مورد استفاده را بررسی کنید. از یکی از ایمیج‌های ایجاد شده برای ادغام مداوم 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

در لینوکس، یکی از موارد زیر:

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 session) ایجاد کنید:

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

مقداردهی اولیه SDK

در کانتینر، Matter SDK و متغیرهای محیطی مربوط به زنجیره ابزار Nordic nRF52 را مقداردهی اولیه کنید. مقداردهی اولیه 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 را فشار دهید، سپس برای خروج از menuconfig دکمه q را فشار دهید.

تنظیم گواهی‌های آزمون

برای ایجاد گواهی‌های CD، DAC و PAI، مراحل موجود در گواهی‌های تست دستگاه Create Matter را دنبال کنید.

دستگاه خود را بسازید

west build -b nrf52840dk_nrf52840

دستگاه خود را فلش کنید

این کار روی کامپیوتر میزبان انجام می‌شود، نه در کانتینر داکر.

اگر ابزارهای خط فرمان 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 با نسخه نرم‌افزار دستگاه افزایشی ایجاد شود.

menuconfig Zephyr را اجرا کنید:

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 را فشار دهید، سپس برای خروج از menuconfig دکمه q را فشار دهید.

فایل بسته OTA جدید Matter را بسازید. خروجی در 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

ویژگی‌های فایل بسته OTA 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

از آنجا که Matter SDK از میزبان کانتینر شما نصب شده است، تصویر OTA نیز در میزبان کانتینر شما موجود است. با دنبال کردن دستورالعمل‌های آپلود OTA، تصویر OTA را در Google Home Developer Console آپلود کنید.

دستگاه را راه‌اندازی کنید و فرآیند 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

مطمئن شوید که هاب شما آنلاین است و دستگاه را با استفاده از کد QR از لینک موجود در گزارش، با 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 که فیلد نسخه نرم‌افزار را نشان می‌دهد