Программирование ARM Пример Zephyr-приложения USB DFU Tue, April 23 2024  

Поделиться

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

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

Пример Zephyr-приложения USB DFU Печать
Добавил(а) microsin   

Проект примера приложения Zephyr [1] демонстрирует использование драйвера класса USB для перепрошивки firmware встраиваемых устройств (USB DFU Class driver). Этот проект требует подключения драйвера USB. В настоящий момент класс USB DFU предоставляется в составе Zephyr, в зависимости от включенной опции поддержки DFU Image Manager и созданных разделов в программируемой памяти (partition layout). Подробнее про разделы памяти Flash см. [2]. Ваш SoC должен запускать MCUboot в качестве загрузчика первого уровня (stage 1 bootloader). Проект примера собирается как приложение для загрузки под управлением MCUboot [3].

Примечание: этот пример явно включает опцию CONFIG_USB_DFU_ENABLE_UPLOAD.

[Сборка и подписывание приложения]

Этот пример может быть собран обычным способом (см. [4]), и прошивается обычным инструментарием записи памяти flash, но должен быть загружен во flash со смещением SLOT-0.

Образы приложений (такой как этот пример) должны быть подписаны. Система сборки может это сделать за вас установкой символа CONFIG_MCUBOOT_SIGNATURE_KEY_FILE.

Например:

west build -b nrf52840dk_nrf52840 zephyr/samples/subsys/usb/dfu -d build-dfu -- \
 -DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE=\"bootloader/mcuboot/root-rsa-2048.pem\"

Сборка и прошивка MCUboot bootloader для проекта Zephyr описана в документации [5]. Выполните сборку (build), подпись (sign) и прошивку (flash) орбаза примера USB DFU со смещением SLOT-0.

Выполните сборку и подпись второго образа приложения, например Hello World, который будет использоваться в качестве образа обновления. Не забудьте разрешить требуемую опцию CONFIG_BOOTLOADER_MCUBOOT (как описано в [6]). Например:

west build -b nrf52840dk_nrf52840 zephyr/samples/hello_world -d build-hello_world -- \
 -DCONFIG_BOOTLOADER_MCUBOOT=y '-DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE="bootloader/mcuboot/root-rsa-2048.pem"'

[Тестирование]

Linux-утилита dfu-util может использоваться для сохранения (backup) или обновления (update) образа приложения.

Для backup образа из SLOT-0 используйте команду:

dfu-util --alt 0 --upload slot0_backup.bin

Для update приложения используйте команду:

dfu-util --alt 1 --download build-hello_world/zephyr/zephyr.signed.bin

Сброс SoC. MCUboot переключит образы, и загрузит новое приложение, при этом в консоль будет выведено:

*** Booting Zephyr OS build zephyr-v3.0.0-360-gc0dd594d4d3d  ***
I: Starting bootloader
I: Primary image: magic=good, swap_type=0x2, copy_done=0x1, image_ok=0x3
I: Secondary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3
I: Boot source: none
I: Swap type: revert
I: Secondary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3
I: Bootloader chainload address offset: 0xc000
I: Jumping to the first image slot
*** Booting Zephyr OS build zephyr-v3.0.0-361-gb987e6daa2f9  ***
[00:00:00.005,920] < inf> main: This device supports USB DFU class.

[Permanent download и automatic reboot]

Для разрешения принудительной загрузки, не требующей участия пользователя (permanent download) могут использоваться несколько символов.

Чтобы пометить SLOT-1 в качестве перманентного после завершения загрузки, разрешите символ CONFIG_USB_DFU_PERMANENT_DOWNLOAD. Для автоматического reboot после завершения загрузки разрешите символ CONFIG_USB_DFU_REBOOT.

Предупреждение: разрешение CONFIG_USB_DFU_PERMANENT_DOWNLOAD может привести к окирпичиванию устройства! Удостоверьтесь, что вам доступен другой способ загрузить firmware в память системы. Например, с помощью отладчика или режима восстановления загрузчика (MCUBoot recovery mode).

Оба этих символа могут быть разрешены с помощью оверлея overlay-permanent-download.conf. Например:

west build -b nrf52840dk_nrf52840 zephyr/samples/subsys/usb/dfu -d build-dfu -- \
 -DCONFIG_BOOTLOADER_MCUBOOT=y '-DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE="bootloader/mcuboot/root-rsa-2048.pem"' \
 -DOVERLAY_CONFIG=overlay-permanent-download.conf

Следующий листинг показывает вывод в консоль при загрузке с помощью dfu-util. Обратите внимание на Swap type: perm.

*** Booting Zephyr OS build zephyr-v3.0.0-361-ge6900e2451d5  ***
[00:00:00.005,920]  main: This device supports USB DFU class.
 
*** Booting Zephyr OS build zephyr-v3.0.0-360-gc0dd594d4d3d  ***
I: Starting bootloader
I: Primary image: magic=good, swap_type=0x4, copy_done=0x1, image_ok=0x1
I: Secondary image: magic=good, swap_type=0x3, copy_done=0x3, image_ok=0x1
I: Boot source: none
I: Swap type: perm
I: Bootloader chainload address offset: 0xc000
I: Jumping to the first image slot
*** Booting Zephyr OS build zephyr-v3.0.0-361-gb987e6daa2f9  ***
Hello World! nrf52840dk_nrf52840

[Ссылки]

1. Zephyr USB DFU Sample Application site:nordicsemi.com.
2. Zephyr Flash map site:nordicsemi.com.
3. Secure boot for 32-bit Microcontrollers site:mcuboot.com.
4. Zephyr Application Development site:nordicsemi.com.
5. Сборка и использование MCUboot вместе с приложением Zephyr.
6. MCUBoot Device Firmware Upgrade site:nordicsemi.com.

 

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


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

Top of Page