Пример 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] *** 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. |