Беспроводное обновление прошивки (DFU/OTA) через MCUBoot
Материал носит ознакомительный характер. Работа с электроникой и микроконтроллерами требует соблюдения техники безопасности; автор не несет ответственности за возможные повреждения оборудования или иной ущерб, возникший в ходе обучения.
Мы подошли к этапу, который превращает электронный макет в полноценный продукт. В мире Arduino обновление программы требовало кабеля и нажатия кнопки в IDE. Однако современные устройства часто работают в закрытых корпусах или установлены в труднодоступных местах. Для таких случаев используют DFU (Device Firmware Update). Если данные передаются по беспроводному каналу, процесс называют OTA (Over-the-Air).
В экосистеме nRF Connect SDK за надежность процесса отвечает MCUBoot — защищенный загрузчик (Bootloader), который управляет запуском и обновлением ПО.
Как MCUBoot работает с памятью
Чтобы прерванная связь не превратила устройство в «кирпич», nRF52840 делит Flash-память на области. Система не записывает новый код поверх старого, а использует систему слотов под управлением Image Manager.
Как показано в Схеме 1, память разделена на два рабочих пространства.
- Primary Slot: здесь хранится и исполняется текущая прошивка.
- Secondary Slot: сюда загружается новая версия при обновлении.
- MCUBoot: микропрограмма, которая стартует первой. Она проверяет целостность новой версии и решает, нужно ли менять прошивки местами.
Механизм подтверждения (Confirm)
MCUBoot поддерживает режим Swap (перестановка) с защитой от ошибок. Процесс выглядит так:
- Вы загружаете файл во вторичный слот.
- Устройство перезагружается. MCUBoot временно меняет прошивки местами.
- Новая прошивка запускается. Если в течение заданного времени код не вызовет функцию подтверждения, MCUBoot сочтет версию неисправной и при следующей перезагрузке вернет старую рабочую копию.
Если вы загрузите прошивку, где забыли инициализировать Bluetooth, связь пропадет и обновить устройство «по воздуху» больше не получится. MCUBoot спасет ситуацию: не дождавшись подтверждения, он сам сделает откат к предыдущей версии.
Настройка проекта
Вам не придется размечать память вручную. Благодаря системе Kconfig достаточно добавить параметры в файл prj.conf.
Минимальные настройки для включения MCUBoot и OTA через Bluetooth в Zephyr RTOS:
# Включаем загрузчик MCUBoot
CONFIG_BOOTLOADER_MCUBOOT=y
# Разрешаем управление образами прошивки
CONFIG_IMG_MANAGER=y
CONFIG_MCUBOOT_IMG_MANAGER=y
# Включаем Bluetooth-сервис для передачи прошивки (SMP Server)
CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=yПосле сборки в папке build/zephyr появится файл app_update.bin. Его нужно отправлять на устройство.
Загрузка через смартфон
Для OTA-обновления используйте приложение nRF Connect for Mobile.
- Соберите проект с любым заметным изменением (например, измените период мигания светодиода из темы о [Драйверах GPIO, UART и ADC]).
- Подключитесь к устройству в приложении.
- Нажмите кнопку DFU (иконка со стрелкой).
- Выберите файл
app_update.binи запустите процесс.
Проведите тестовое обновление:
- Измените версию прошивки в
prj.conf:CONFIG_MCUBOOT_IMAGE_VERSION="1.0.1". - Загрузите её через смартфон.
- Проверьте, что устройство перезагрузилось и выполняет новый код.
Теперь ваше устройство защищено от сбоев при обновлении и готово к автономной работе. Мы освоили ключевые инструменты nRF52840. Впереди финальный этап: мы соберем знания в единый чек-лист, чтобы превратить прототип в надежный датчик для реальной эксплуатации.
Понравился урок?
Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей
Продолжить в Telegram