Встраиваемое ПО для IoT: архитектура и оптимизация

Прошивки для микроконтроллеров (MCU — Microcontroller Unit — микроконтроллер): RTOS (Real-Time Operating System — операционная система реального времени), энергосбережение, OTA-обновления (Over-The-Air — обновления по воздуху)

Фото автора — Алексей Воронцов
Алексей Воронцов
Руководитель отдела разработки электроники ЕМС-Техно
9 мин чтения
Плата микроконтроллера с компонентами для IoT-устройства

Интернет вещей (IoT — Internet of Things — интернет вещей) перестал быть экспериментом — сегодня это миллиарды устройств, от промышленных датчиков до бытовой техники. И за каждым таким устройством стоит встраиваемое ПО: прошивка, которая управляет железом, связью и логикой. От того, насколько грамотно спроектирована эта прошивка, зависит энергопотребление, надёжность и стоимость всего продукта. В этой статье разбираем три ключевых столпа встраиваемого ПО для IoT: архитектуру на базе RTOS, методы энергосбережения и механизмы OTA-обновлений.

Что такое встраиваемое ПО для IoT и чем оно отличается от обычного

Встраиваемое ПО — это программа, которая работает на микроконтроллере (MCU — Microcontroller Unit) внутри устройства и решает конкретную задачу: снять показания датчика, передать данные по сети, отреагировать на команду. Оно не запускается пользователем и не завершается — оно живёт, пока работает устройство.

Ключевое отличие IoT-прошивки от настольного или серверного ПО — жёсткие ограничения. Оперативная память (RAM ) измеряется килобайтами, флеш (Flash ) — сотнями килобайт, процессор работает на частоте десятков мегагерц, а питание часто идёт от батарейки, которая должна продержаться годы. При этом устройство обязано работать надёжно: зависание датчика в промышленной системе может привести к аварии, а разряженный счётчик — к потере данных.

Именно эти ограничения диктуют архитектуру, выбор операционной системы и подход к обновлениям.

Архитектура встраиваемого ПО: слои и их назначение

Хорошая архитектура прошивки строится по тому же принципу, что и любая инженерная система: разделение ответственности. Каждый слой знает только свою задачу и не лезет в чужую.

Аппаратный слой (HAL — Hardware Abstraction Layer). Самый нижний уровень. Здесь живут драйверы периферии: GPIO (General Purpose Input/Output — универсальный вход-выход), UART (Universal Asynchronous Receiver-Transmitter — универсальный асинхронный приёмопередатчик), SPI (Serial Peripheral Interface — последовательный периферийный интерфейс), I2C (Inter-Integrated Circuit — межинтегральная шина), АЦП (аналого-цифровой преобразователь). Этот слой не содержит логики — он лишь предоставляет функции вида «включить пин», «прочитать регистр», «отправить байт». HAL обычно поставляет производитель микроконтроллера, а BSP (Board Support Package — пакет поддержки платы) дополняет его под конкретную плату.

Слой абстракции устройств. Промежуточный уровень, который превращает разрозненные драйверы в унифицированные интерфейсы. Верхнему коду всё равно, какой именно датчик температуры стоит на плате — он вызывает Temp_Read() и получает значение. Это позволяет менять железо без переписывания логики.

Слой логики. Здесь реализуется то, ради чего устройство создано: алгоритмы обработки данных, пороги срабатывания, сценарии поведения. Этот слой не знает, на каком пине висит реле — он оперирует понятиями предметной области.

Слой приложения и планирования. Верхний уровень, который решает, когда и что выполнять. В простых устройствах это может быть суперцикл с таймерами, но в IoT почти всегда требуется RTOS — операционная система реального времени.

RTOS для микроконтроллеров: зачем нужна и как выбрать

RTOS (Real-Time Operating System — операционная система реального времени) — это ядро, которое управляет задачами, временем и ресурсами. Она позволяет разбить прошивку на независимые потоки: один читает датчики, второй отправляет данные по сети, третий мигает индикатором. Каждый поток получает свой приоритет и своё время процессора.

Без RTOS разработчику пришлось бы вручную жонглировать таймерами и прерываниями (interrupts — прерывания), что быстро превращается в нечитаемый клубок. С RTOS код становится модульным, а поведение системы — предсказуемым.

На рынке сегодня доминируют три решения, и выбор между ними — стратегическое решение.

FreeRTOS
Самый популярный. Ядро ~5–10 КБ, огромное сообщество. Управляется Amazon, хорошая интеграция с AWS (Amazon Web Services — веб-сервисы Amazon) IoT. Оптимален для простых устройств и быстрых прототипов.
ThreadX
Ядро ~2 КБ, высокая детерминированность, сертификация TÜV (Technischer Überwachungsverein — Технический контроль). Сейчас развивается под эгидой Eclipse Foundation. Хорош для задач, где важны предсказуемость и сертификация.
Zephyr
Самый современный и модульный. Linux Foundation, Devicetree, встроенные стеки связи: BLE (Bluetooth Low Energy — Bluetooth низкой энергии), Thread, LoRaWAN (Long Range Wide Area Network — дальний радиус, глобальная сеть). Лучшая переносимость и соответствие современным требованиям.

Практическое правило: для батарейного датчика с одной задачей хватит FreeRTOS. Для промышленного контроллера с сертификацией — ThreadX. Для сложного IoT-шлюза с несколькими протоколами связи и требованием соответствия CRA (Cyber Resilience Act — закон о киберустойчивости) — Zephyr.

Хорошая прошивка для IoT — это та, которая работает годами от батарейки, не зависает и обновляется удалённо без риска превратиться в кирпич.

Энергосбережение: как заставить устройство жить годами от батарейки

Энергопотребление — главный враг IoT-устройства на батарейке. Каждый миллиампер на счету, и борьба идёт на всех уровнях.

Режимы сна MCU

Современные микроконтроллеры предлагают несколько уровней энергосбережения: от лёгкого сна с работающей периферией до глубокого, когда отключается почти всё кроме RTC (Real-Time Clock — модуль часов реального времени). Стратегия — держать процессор в глубоком сне как можно дольше.

Тактирование периферии

Каждый включённый модуль — это ток. Если UART не используется, его нужно выключать. Если АЦП нужен раз в минуту, нет смысла держать его активным постоянно. Хорошая прошивка управляет тактированием динамически.

Работа с радио

Передача по Wi-Fi или LoRa — самый энергоёмкий процесс. Три принципа: передавать реже, передавать меньше, передавать быстрее. Агрегация данных, сжатие, выбор оптимального времени передачи.

Планирование в RTOS

RTOS (Real-Time Operating System — операционная система реального времени) позволяет выстроить расписание: устройство просыпается, выполняет пачку задач и снова уходит в сон. Саму RTOS можно отключать в режиме низкого энергопотребления, используя только прерывания (interrupts) и RTC (Real-Time Clock — модуль часов реального времени).

Аппаратные хитрости. Подтягивающие резисторы (pull-up резисторы), которые постоянно потребляют ток, неиспользуемые пины в «плавающем» состоянии, неоптимальные преобразователи питания — всё это незаметно съедает заряд. Энергосбережение — это не только софт, но и схемотехника.

OTA-обновления: как обновлять прошивку удалённо и не превратить устройство в кирпич

OTA (Over-The-Air — обновления по воздуху) — это возможность обновлять прошивку устройства по сети, без физического доступа. Для IoT это критично: устройства могут стоять на вышке, в шахте или в поле, и отправлять туда инженера с программатором — не вариант.

Но OTA — это ещё и самый опасный процесс в жизни устройства. Прерывание питания посреди обновления, повреждённый образ, сбой сети — и устройство превращается в «кирпич». Поэтому архитектура OTA строится с расчётом на худший сценарий.

Механизмы надёжного OTA-обновления
01
A/B-банки
Два раздела памяти: активный и резервный
02
Проверка
Контрольная сумма и цифровая подпись
03
Bootloader (загрузчик)
Загрузчик проверяет и применяет прошивку
04
Откат (rollback)
Возврат к стабильной версии при сбоях

Два банка памяти (A/B-схема). Самая надёжная схема: во флеш-памяти выделяются два раздела — активный и резервный. Новая прошивка скачивается в резервный раздел, проверяется, и только потом система переключается на него. Если что-то пошло не так, загрузчик возвращается к старой версии.

Проверка целостности. Перед установкой образ проверяется по контрольной сумме и цифровой подписи. Это защищает от повреждённых файлов и от попыток загрузить вредоносную прошивку.

Загрузчик (bootloader). Отдельный небольшой код, который запускается первым, проверяет, есть ли валидная новая прошивка, и либо применяет её, либо запускает текущую. Загрузчик никогда не обновляется по воздуху — иначе можно потерять единственный механизм восстановления.

Откат (rollback). Если новая прошивка запустилась, но работает нестабильно, система должна уметь вернуться к предыдущей версии. Для этого используется счётчик неудачных запусков: после нескольких попыток загрузчик автоматически откатывается.

Экономия трафика и энергии. Передавать полный образ по сотовой сети дорого и энергозатратно. Поэтому применяют дельта-обновления (delta-обновления) — передачу только изменившихся блоков, а также сжатие образа и возобновляемую загрузку при обрыве связи.

Как всё это связано: практический взгляд

Архитектура, RTOS (Real-Time Operating System — операционная система реального времени), энергосбережение и OTA (Over-The-Air — обновления по воздуху) — не отдельные темы, а части одной системы. RTOS определяет, как задачи распределяются во времени, что напрямую влияет на энергопотребление. Архитектура с чёткими слоями делает OTA безопасным, потому что позволяет обновлять логику, не трогая загрузчик и драйверы. А энергосбережение, в свою очередь, диктует, как часто устройство может выходить на связь и получать обновления.

Грамотно спроектированная прошивка для IoT — это баланс между функциональностью, надёжностью и автономностью. И начинается этот баланс с правильного выбора ядра, продуманной слоистой архитектуры и понимания того, что обновление — это не разовая операция, а встроенный в систему механизм.

Наша экспертиза

Разработаем встраиваемое ПО для вашего устройства

Проектирование прошивки для IoT — это задача, где архитектура, энергопотребление и механизмы обновления должны быть продуманы с самого начала. Если вы разрабатываете новое устройство или модернизируете существующее, мы поможем пройти весь путь: от выбора микроконтроллера (MCU — Microcontroller Unit — микроконтроллер) до написания прошивки, отладки драйверов и настройки безопасных OTA-обновлений (Over-The-Air — обновления по воздуху).

ПОДРОБНЕЕ ОБ УСЛУГЕ
встраиваемое ПО IoT прошивка RTOS микроконтроллер энергосбережение IoT OTA обновления FreeRTOS Zephyr архитектура прошивки bootloader