Программирование ARM nRF Util Tue, January 25 2022  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

nRF Util Печать
Добавил(а) microsin   

Приложение nRF Util [1] это пакет Python и утилита командной строки, которая поддерживает процедуру обновления Device Firmware Update (DFU) [2] и криптографический функционал для цифровой подписи и проверки кода firmware.

Приложение nRF Util и его библиотека обеспечивает следующие функции:

• Генерация пакета обновления DFU (DFU package).
• Генерация криптографических ключей, их обслуживание и хранение.
• Генерация настроек загрузчика (bootloader settings).
• Поддержка процедуры DFU с передачей образа firmware по следующим протоколам:
   - Bluetooth® Low Energy (BLE)
   - Serial over UART
   - Serial over USB
   - Thread unicast
   - Thread multicast
   - Zigbee
   - ANT™.

Примечание: расшифровку незнакомых терминов и аббревиатур см. в Словарике [13].

Существует два разных пакета обновления DFU:

Legacy – использует простую структуру, не поддерживает функции безопасности.
Modern – использует буферы протокола Google [12] для сериализации, и может использовать криптографическую сигнатуру образа firmware.

Переход на новый формат DFU-пакета Modern произошел в nRF5 SDK v12.0.0 (до этого использовался формат Legacy). В зависимости от версии SDK, которую Вы используете, выбелите совместимую версию релиза nRF Util:

• Версия 0.5.x генерирует legacy-пакеты firmware, совместимые с nRF5 SDK v11.0.0 или более старой версии.
• Версия 1.5.0 генерирует современные modern-пакеты firmware, совместимые с nRF5 SDK v12.0.0 и более новой версии.
• Версия 2.2.0 или более новая требует генерации страницы настроек загрузчика, которая совместима с nRF52840.
• Версия 4.0.0 и более новая генерирует modern-пакеты firmware, совместимые с nRF5 SDK v15.1.0 и более новой версии.
• Версия 5.0.0 и более новая генерирует modern-пакеты firmware, совместимые с nRF5 SDK v15.3.0 и более новой версии.

Примечание: чтобы создать образы firmware, совместимые с версиями от nRF SDK 12.0 до nRF SDK 15.0, используйте команду --no-backup при генерации настроек DFU.

Более подробно про DFU см. статьи [2, 3, 4] и примеры из SDK.

Система получения помощи по командам nRF Util чувствительна к контексту, т. е. можно получить подсказку по конкретной команде. Для получения подсказки по командной строки добавьте опцию --help к любой команде nRF Util, отобразится подсказка по соответствующей команде. Может быть также получена подсказка не только по команде, но и по конкретному протоколу.

Например, команда nrfutil dfu ble --help выведет подсказку по процедуре обновления (Device Firmware Update, DFU) по протоколу Bluetooth LE (BLE):

nrfutil dfu ble --help

Чтобы узнать опции, доступные для протокола Zigbee, введите следующую команду:

nrfutil zigbee --help

Общая подсказка по использованию будет отображена, если просто ввести nrfutil --help.

[Генерация пакетов DFU]

Команда pkg генерирует пакет, используемый для DFU. Пакет содержит образ нового firmware, init-пакет и файл манифеста, который показывает формат пакета. Эта команда также может использоваться для отображения содержимого пакета.

Запуск команды nrfutil pkg приведет к генерации zip-файла пакета, который Вы можете использовать позже вместе с мобильным приложением или другой утилитой для обновления firmware устройства на основе nRF5 MCU. Подсказку по доступным опциям команды pkg можно получить командой nrfutil pkg generate --help.

Например, следующая команда сгенерирует не подписанный пакет app_dfu_package.zip из файла приложения app.hex:

nrfutil pkg generate --application app.hex app_dfu_package.zip

Следующая команда создаст пакет app_dfu_package.zip из файла приложения app.hex с версией приложения 4, которая требует версии аппаратуры 51 и SoftDevice S130 v2.0.0 (0x80), и также подписанного приватным ключом, сохраненным в файле key.pem:

nrfutil pkg generate --hw-version 51 --sd-req 0x80 --application-version 4
 --application app.hex --key-file key.pem app_dfu_package.zip

Введите следующую команду, чтобы сгенерировать не подписанный отладочный пакет без информации версии из файла приложения app.hex:

nrfutil pkg generate --debug-mode --application app.hex app_dfu_package.zip

Ведите следующую команду, чтобы отобразить содержимое созданного пакета:

nrfutil pkg display app_dfu_package.zip

Опция --hw-version должна соответствовать используемому nRF5 MCU.

Опция --sd-req должна соответствовать firmware ID (идентификатору) кода SoftDevice, который присутствует в целевом MCU. Список идентификаторов SoftDevice firmware ID (для опции --sd-req) будет показан командой nrfutil pkg generate --help.

Примечание: хотя стеки Thread и Zigbee не используют SoftDevice, опция --sd-req все равно нужна для обеспечения совместимости. Во время процесса DFU любое значение, предоставленное для этой опции, будет игнорироваться.

При генерации пакета доступны не любые комбинации загрузчика, SoftDevice и приложения. Для дополнительной информации по поддерживаемым комбинациям Bootloader, SoftDevice и Application см. статью [5].

[Выполнение процесса обновления]

Команда dfu передает пакет Device Firmware Update (DFU) в устройство на основе nRF5 MCU. Для передачи доступно несколько вариантов транспорта DFU. Для отображения списка поддерживаемых транспортов введите команду:

nrfutil dfu --help

Необходимо гарантировать, чтобы выбранный транспорт соответствовал загрузчику DFU, который установлен в целевом MCU.

Используйте nRF5 Development Kit (DK, отладочная плата с nRF5x MCU) в качестве connectivity-устройства (т. е. устройства, через которое происходит передача firmware) для процедуры обновления DFU по воздуху по протоколу Bluetooth LE. Для обновления выполните следующие шаги:

1. Подключите nRF5 DK к своему компьютеру.

Примечание: в опции -ic нужно указать, какого семейства чип в DK nRF51 - или nRF52.

2. Запустите команду nrfjprog --eraseall, чтобы стереть содержимое памяти чипа в DK.

3. Запустите команду nrfutil dfu ble, чтобы выполнить полное DFU по протоколу Bluetooth LE. Используйте опцию -f для программирования DK необходимым connectivity software. Эта опция перезапишет содержимое памяти DK MCU.

Введите команду nrfutil dfu ble --help, чтобы посмотреть доступные опции.

Например, для выполнения процедуры DFU пакета app_dfu_package.zip по протоколу Bluetooth LE на устройстве nRF52, подключенного через COM3, где MyDevice это доступное по радио устройство (remote Bluetooth LE device), которое должно быть обновлено, введите следующую команду:

nrfutil dfu ble -ic NRF52 -pkg app_dfu_package.zip -p COM3 -n "MyDevice" -f

Для выполнения DFU через ANT в качестве connectivity-устройства (т. е. устройства, через которое происходит передача firmware) используется ANT™ USB dongle (например ANT USB-m). Для обновления выполните следующие шаги:

1. Подключите ANT USB dongle к компьютеру.

2. Запустите nrfutil dfu ant для выполнения полного DFU через ANT.

Доступные опции можно посмотреть командой:

nrfutil dfu ant --help

Например, введите следующую команду, чтобы выполнить процедуру DFU файлом пакета app_dfu_package.zip:

nrfutil dfu ant -pkg app_dfu_package.zip

Используйте nRF5 Development Kit (DK, отладочная плата с nRF5x MCU) в качестве connectivity-устройства (т. е. устройства, через которое происходит передача firmware) для процедуры обновления DFU через Thread.

Для DFU over Thread утилита nRF Util поддерживает как режим unicast, так и режим multicast. В режиме unicast каждый клиент DFU индивидуально запрашивает от nRF Util последовательные блоки firmware. В режиме multicast утилита nRF Util последовательно посылает блоки firmware в multicast-сообщениях, и клиенты, которым нужно новое firmware, принимают и обрабатывают эти сообщения.

Режим по умолчанию unicast. Чтобы выбрать режим multicast, вызовите nRF Util с multicast-адресом в качестве адреса назначения.

Для обновления выполните следующие шаги:

1. Подключите nRF5 DK к своему компьютеру. Плата DK работает как Thread network co-processor (NCP), чтобы выполнить процедуру DFU на целевом MCU.

2. Запустите команду nrfjprog --eraseall чтобы стереть содержимое памяти DK MCU.

3. Выполните команду nrfutil dfu thread, чтобы выполнить полное DFU через Thread. Используйте опцию -f для программирования DK необходимым connectivity software. Эта опция перезапишет содержимое памяти DK MCU.

Введите команду nrfutil dfu thread --help, чтобы посмотреть доступные опции.

Например, введите следующую команду для инициирования процедуры unicast DFU для файла пакета app_dfu_package.zip через Thread на канале channel 11 вместе с идентификатором PAN ID 0xABCD, используя nRF52840 NCP, подключенный через COM3:

nrfutil dfu thread –f -pkg app_dfu_package.zip -p COM3 --channel 11 --panid 43981

Любое доступное по радио Thread-устройство может затем запросить обновление firmware.

Введите следующую команду, чтобы выполнить процедуру multicast DFU для пакета app_dfu_package.zip через Thread на канале 11 вместе с идентификатором PAN ID 0xABCD на multicast-адрес FF03::1, используя nRF52840 NCP, подключенный через COM3:

nrfutil dfu thread -f -pkg app_dfu_package.zip -p COM3 --channel 11
 --panid 43981 -r 4 -rs 5000 -a FF03::1

Любое доступное по радио Thread-устройство, которое настроено на получение обновления firmware, будет обрабатывать посылаемые сообщения DFU.

Используйте nRF5 Development Kit (DK, отладочная плата с nRF5x MCU) в качестве connectivity-устройства (т. е. устройства, через которое происходит передача firmware) для процедуры обновления DFU через Zigbee.

Сначала запустите следующую команду, чтобы сгенерировать специальный Zigbee-образ из своего приложения:

nrfutil pkg generate --hw-version 52 --sd-req 0x00 --application-version 0x01020101
 --application app.hex --key-file key.pem app_dfu_package.zip --zigbee True
 --zigbee-manufacturer-id 123 --zigbee-image-type 321 --zigbee-comment good_image

Процедура DFU over Zigbee выполняется путем загрузки образа обновления в OTA Server, работающий на DK MCU. Для обновления выполните следующие шаги:

1. Подключите nRF5 DK к своему компьютеру. Плата DK работает как Zigbee OTA Server, который распространяет образ Zigbee в радиосети.

2. Выполните команду nrfutil dfu zigbee, чтобы запустить Zigbee OTA Server, который будет распространять новое firmware в сети.

Введите команду nrfutil dfu zigbee --help, чтобы посмотреть доступные опции.

Процесс DFU over Zigbee немедленно завершится после загрузки образа, но OTA Server останется активным до сброса DK.

Например, введите следующую команду, чтобы запустить Zigbee OTA Server, который распространяет файл CAFE-1234-good_image.zigbee на канале 20, используя nRF52840 DK с серийным номером 683604699:

nrfutil dfu zigbee -f CAFE-1234-good_image.zigbee -snr 683604699 -chan 20

Обновление внешних приложений. Пакеты для обновления внешних приложений могут быть сгенерированы утилитой nRF Util путем установки опции –external-app.

nRF Util поддерживает обновление Device Firmware Update (DFU) через последовательное соединение UART.

Для обновления выполните следующие шаги:

1. Подключите DFU target к своему компьютеру.

У большинства китов разработчика (Development Kit, DK) от Nordic Semiconductor есть на борту MCU интерфейса, который работает как виртуальный COM-порт, прозрачно отображающий UART в интерфейс USB CDC ACM, доступный на компьютере (дополнительную информацию см. [6]). Если MCU интерфейса недоступен, используйте другие варианты последовательного подключения DFU target к своему компьютеру, например через адаптер USB - TTL UART.

2. Запустите команду nrfutil dfu serial, чтобы выполнить полное обновление DFU через последовательное соединение UART.

Введите команду nrfutil dfu serial --help, чтобы посмотреть доступные опции.

Следующий пример команды выполнит процедуру обновления файлом пакета app_dfu_package.zip через COM3 на скорости 115200 бит в секунду:

nrfutil dfu serial -pkg app_dfu_package.zip -p COM3 -b 115200

nRF Util поддерживает обновление Device Firmware Update (DFU) через соединение USB CDC ACM (виртуальный COM-порт). Соединение DFU over a serial USB поддерживается только на тех MCU, у которых есть ножки USB (например, nRF52840).

Примечание: не путайте интерфейсный MCU с целевым MCU, который программируется через DFU. Порт USB интерфейсного MCU (см. [6]) это совсем не то, что здесь имеется в виду. Интерфейсный MCU не подключается к ножкам USB программируемого через DFU чипа MCU. Если вы хотите использовать интерфейсный MCU, то должны выполнить DFU через последовательное соединение UART (см. предыдущую врезку).

Для обновления выполните следующие шаги:

1. Подключите DFU target к своему компьютеру. Если Ваш DFU target это nRF52840 Development Kit (DK), то используйте его порт USB, помеченный шелкографией nRF USB.

2. Запустите nrfutil dfu usb-serial, чтобы выполнить полную процедуру DFU через соединение USB CDC ACM.

Введите команду nrfutil dfu usb-serial --help, чтобы посмотреть доступные опции.

Например, следующая команда выполнит DFU файлом пакета app_dfu_package.zip через COM3 на скорости 115200 бит в секунду:

nrfutil dfu usb-serial -pkg app_dfu_package.zip -p COM3 -b 115200

[Генерация и вывод содержимого ключей]

Команда keys может использоваться для генерации и просмотра криптографических ключей. Эти ключи требуются для подписи и проверки пакета DFU, дополнительную информацию см. в [7].

• Выполните команду nrfutil keys generate для генерации приватного приватного ключа (ключа подписи), и сохранение его в файл формата PEM.

• Выполните команду nrfutil keys display, чтобы показать приватный (подписывающий) или публичный (проверяющий) ключ из PEM-файла.

Вы можете просмотреть список доступных опций, если запустите команду:

nrfutil keys display --help

Например, введите следующую команду, чтобы сгенерировать private-ключ и сохранить его в файл private.pem:

nrfutil keys generate private.pem

Введите следующую команду, чтобы отобразить public-ключ в формате кода из этого файла ключа:

nrfutil keys display --key pk --format code private.pem

[Генерация и отображение настроек загрузчика]

Используйте команду settings, чтобы сгенерировать и отобразить страницу настроек загрузчика (bootloader settings page).

DFU bootloader требует наличие страницы настроек, которая содержит информацию о текущем процессе DFU. Кроме того, страница настроек загрузчика может содержать информацию об установленном приложении и версии firmware.

• Выполните команду nrfutil settings generate, чтобы сгенерировать bootloader settings page, и сохранить её в HEX-файл.

Список доступных опций можно посмотреть командой:

nrfutil settings generate --help

• Выполните команду nrfutil settings display, чтобы отобразить содержимое страницы настроек загрузчика, которая представлена в HEX-файле. Чтобы прочитать страницу настроек загрузчика из запрограммированного MCU, используйте утилиту nrfjprog, чтобы создать дамп памяти FLASH (здесь HEX_file это имя дампа страницы в формате Intel HEX):

nrfjprog --readcode HEX_file

После генерации страницы настроек загрузчика Вы можете использовать mergehex и nrfjprog, чтобы запрограммировать её в память FLASH MCU. Для дополнительной информации по использованию утилит командной строки см. [8].

Например, введите следующую команду, чтобы сгенерировать bootloader settings page для MCU nRF52840 с установленным приложением app.hex, версией приложения 3, версией загрузчика 2, и версией настроек загрузчика 1 (для SDK v13.0.0), и сохранить эти сгенерированные настройки в файл settings.hex:

nrfutil settings generate --family NRF52840 --application app.hex --application-version 3
 --bootloader-version 2 --bl-settings-version 1 settings.hex

Введите следующую команду, чтобы отобразить содержимое сгенерированного HEX-файла:

nrfutil settings display settings.hex

Для каждого MCU семейств nRF должна быть соответствующая опция --family:

Таблица 1. Настройка --family.

Семейство nRF5x Чипы MCU
NRF51 nRF51xxx
NRF52 nRF52832, nRF52833
NRF52QFAB nRF52832-QFAB, nRF52820
NRF52810 nRF52810, nRF52811, nRF52805
NRF52840 nRF52840

Опция --bl-settings-version зависит от версии SDK:

Таблица 2. Версии SDK и BL.

Версия SDK Настройка версии загрузчика (BL)
12.0 1
15.3.0 2

Поддерживаемые версии настроек DFU bootloader для выбранного Вами SDK перечислены в файле nrf_dfu_types.h библиотеки загрузчика. Хотя загрузчики, скомпилированные из nRF5 SDK 15.3.0 или более новой версии, могут использовать только версию 2, они могут быть сконфигурированы для поддержки страницы настроек версии 1. Когда загружается новый загрузчик с версией 1 настроек, перед загрузкой код загрузчика транслирует страницу настроек в версию 2. Если используется версия 2 настроек, то проверка загрузки для SoftDevice и приложения может быть сгенерирована со страницей загрузки с использованием команд --sd-boot-validation и --app-boot-validation.

[Генерация HEX-файлов для Zigbee]

Используйте команду zigbee production_config, чтобы генерировать HEX-файлы с производственной конфигурацией (production configuration) для устройств Zigbee. Эти HEX-файлы могут использоваться для установки блока FLASH-памяти production configuration в стеке Zigbee при работе с nRF5 SDK для Thread и Zigbee (см. [9]).

• Создайте входной файл yaml, который содержит список требуемых значений, используемых для генерации HEX-файла production configuration.

Введите следующую команду для примера ввода yaml и других доступных опций:

nrfutil zigbee production_config --help

• Выполните команду nrfutil zigbee production_config с предоставлением имен входного и выходного файлов, чтобы сгенерировать двоичный файл в формате Intel HEX.

Например, введите следующую команду, чтобы сгенерировать файл output.hex для production configuration из файла input.yaml:

nrfutil zigbee production_config input.yaml output.hex

[Отображение информации версии]

Команда version может использоваться для вывода версии утилиты. Разные версии nRF Util поддерживают разные форматы init-пакета, который является частью пакета DFU. Используйте ту версию nRF Util, которая соответствует загрузчику DFU, запрограммированному в Ваш MCU.

Введите следующую команду, чтобы отобразить версию nRF Util:

nrfutil version

[Пользовательский init-пакет]

init-пакет это пакет, который посылается перед реальной отправкой образов firmware процесса обновления Device Firmware Update (DFU). В init-пакете содержатся метаданные, описывающие DFU, такие как размер и тип образа, информация версии и требования к совместимости.

Для кастомизации инструментария необходимо клонировать репозиторий GitHub утилиты nRF Util [10] (см. описание установки из исходного кода [11]). Если Вы используете формат пакета по умолчанию, как описано в примере защищенного загрузчика BLE DFU [4], то не нужно модифицировать nRF Util. Если Вам нужно определить свой собственный формат для init-пакета, то кроме модификации nRF Util необходимо также изменить реализацию загрузчика DFU, чтобы он использовал этот новый формат.

Формат init-пакета определен в буферах протокола (Protocol buffers), файл .proto. Этот файл может быть скомпилирован в разные форматы для гарантии, что используется тот же формат init-пакета, как в Вашей реализации загрузчика DFU и nRF Util.

Примечание: определение init-пакета требует версии proto2 для языка protocol buffers. Не подключайте syntax = "proto3"; в своем файле protocol buffer, потому что это приведет к интерпретации файла как версии языка proto3.

Выполните следующие шаги для кастомизации init-пакета:

1. Измените файл protocol buffer, чтобы он подошел для Ваших требований. 

В репозитории nRF Util [10] этот файл находится в nordicsemi/dfu/dfu-cc.proto. В примере защищенного загрузчика BLE DFU [4] из nRF5 SDK этот файл находится в examples/dfu/bootloader_secure/dfu-cc.proto. Проверьте, что оба файла имеют одинаковое содержимое.

2. Загрузите и установите компилятор протокола [12] от Google.

3. Адаптируйте nRF Util для использования нового формата init-пакета:

(a) Скомпилируйте файл protocol buffer, чтобы сгенерировать соответствующий файл на языке Python. В папке, которая содержит Ваш файл dfu-cc.proto, введите следующую команду (здесь dest_folder это пустая папка, куда компилятор протокола будет записывать свой вывод):

protoc --python_out=dest_folder dfu-cc.proto

(b) Скопируйте или переместите созданный файл dest_folder/dfu_cc_pb2.py в каталог nordicsemi/dfu/, с перезаписью существующего файла.

(c) Если Вы добавили новую информацию в init-пакет, то необходимо обновить nRF Util. Адаптируйте nRF Util, чтобы она поддерживала новые опции командной строки для новых полей, и добавьте в init-пакет информацию, предоставляемую этими опциями. Чтобы адаптировать nRF Util, Вы должны отредактировать исходные файлы на языке Python. Содержимое init-пакета определено в файлах nordicsemi/dfu/init_packet_pb.py и nordicsemi/dfu/package.py. Опции командной строки определены в nordicsemi/__main__.py.

Если Вы установили nRF Util в локальные пакеты Python и папку script, или создали самостоятельно запускаемый файл (см. [11]), то должны повторить эту процедуру после редактирования исходных файлов.

4. Адаптируйте свою реализацию DFU bootloader, чтобы он использовал новый формат init-пакета:

(a) Убедитесь, что файл dfu-cc.proto находится в папке обработке запроса (по умолчанию это папка examples/dfu/dfu_req_handling/, которая находится в SDK), и это тот же самый файл, который использовался для адаптации nRF Util.

(b) В папке реализации DFU bootloader введите следующую команду, эта команда создаст файл dfu-cc.pb:

protoc -odfu-cc.pb dfu-cc.proto

(c) Если Вы не работаете в папке examples/dfu/dfu_req_handling/, сделайте копию файла dfu-cc.options из этой папки в папку со своей реализацией.

(d) Запустите скрипт nanopb_generator.py (находится в папке external/nano-pb/generator/), чтобы сгенерировать требуемые файлы dfu-cc.pb.c и dfu-cc.pb.h. Если Вы работаете в examples/dfu/dfu_req_handling/, то введите следующую команду:

python ../../../external/nano-pb/generator/nanopb_generator.py dfu-cc.pb -f dfu-cc.options

Если Вы работаете в другой папке, то укажите правильный путь до скрипта.

(e) Скомпилируйте свой DFU bootloader.

Для дополнительной информации по этой процедуре см. файл readme в папке BLE Secure DFU Bootloader, находящейся в SDK.

[Ссылки]

1. nRF Util site:infocenter.nordicsemi.com.
2. nRF5 SDK v12.3.0 DFU bootloader.
3. Bootloader and DFU modules site:infocenter.nordicsemi.com.
4. BLE Secure DFU Bootloader site:infocenter.nordicsemi.com.
5. Supported DFU package combinations site:infocenter.nordicsemi.com.
6. Interface MCU Virtual COM port site:infocenter.nordicsemi.com.
7. Cryptography library nrf_crypto site:infocenter.nordicsemi.com.
8. nRF Command Line Tools.
9. Thread Zigbee Production configuration site:infocenter.nordicsemi.com.
10. NordicSemiconductor / pc-nrfutil site:github.com.
11. nRF Util Installing from sources site:infocenter.nordicsemi.com.
12. Download Protocol Buffers site:developers.google.com.
13. nRFxx: аббревиатуры и термины.

 

Добавить комментарий


Защитный код
Обновить

Top of Page