EdigE
← ЛЕНТА

ESP32-P4 оживляет 10-дюймовый HMI, упираясь в трафик памяти

Сенсорная панель на стене выглядит простой вещью: несколько кнопок, график, аварийная индикация, пара экранов настроек. Однако за гладким интерфейсом 10-дюймового дисплея прячется задача, которую обычно отдают Linux-плате с DDR-памятью. ESP32-P4 предлагает собрать такой терминал на микроконтроллере: два RISC-V ядра до 400 MHz, MIPI-DSI, видеотракт и аппаратная обработка пикселей помещаются в одном SoC.

Экран сразу превращается в поток данных

Хороший масштаб этой затеи задаёт CrowPanel Advanced с IPS-экраном 1024×600. В RGB565 полный framebuffer содержит 1 228 800 байт, или 1.172 MiB. Два буфера для вывода без tearing занимают 2.344 MiB. Уже при 60 Hz контроллер дисплея должен прочитать 73.728 MB/s активных пикселей. Эта цифра ещё не включает интервалы гашения DSI, обновление виджетов, копирование прямоугольников, работу кэшей и доступы процессорных ядер к той же PSRAM.

Поэтому история HMI на ESP32-P4 начинается с маршрута пикселя. Видеодвижок забирает готовый кадр из памяти и отправляет его в MIPI D-PHY; сам DSI-интерфейс рассчитан на две линии до 1.5 Gbps каждая. Такое физическое соединение обладает большим запасом относительно RGB565-кадра 1024×600, однако дисплей не создаёт кадр. Его создают память, DMA и программный рендерер. Ошибка в размещении буферов или лишняя полная перерисовка быстро съедают запас, который кажется огромным по частоте ядер.

Полный кадр не помещается во внутреннюю память

Внутренних 768 KB HP L2MEM для полного кадра недостаточно, поэтому крупный GUI живёт во внешней памяти. Варианты ESP32-P4 с 16 или 32 MB PSRAM дают место для кадров, ассетов и рабочих областей, но не отменяют конкуренцию за шину. Двойная буферизация устраняет разрыв изображения при смене кадров; частоту обновления она сама по себе не гарантирует. Её определяют стоимость рендеринга dirty-областей, пропускная способность памяти и момент, в который буферы меняются ролями.

EasyLy, author of the Habr article

PPA — Pixel-Processing Accelerator — нужен именно там, где CPU особенно легко увязает в пикселях. Блок умеет заливать области, смешивать изображения, масштабировать, зеркалить и поворачивать их; для операций доступны RGB565, а масштабирование выполняется билинейным методом. Это позволяет оставить ядрам логику интерфейса, сеть и обработку ввода. Для scale-rotate-mirror документация требует раздельные входной и выходной буферы: эффектная анимация получает дополнительную цену в памяти и трафике.

Ускоритель пикселей требует собственных буферов

Есть и электрическая деталь, которую легко потерять за словом «дисплей». D-PHY питается от VDD_MIPI_DPHY с номиналом 2.5 V и допустимым диапазоном 2.25–2.75 V. Значит, панель требует отдельного аккуратно спроектированного участка питания рядом с высокоскоростными дифференциальными линиями. При включённом шифровании внешней памяти GDMA требует 16-байтного выравнивания адреса и длины передачи. Такая мелочь способна превратить корректный framebuffer в источник трудноуловимых сбоев DMA.

Без измерений это пока архитектура, а не бенчмарк

Заявленная история о шести демонстрационных приложениях пока не даёт воспроизводимого бенчмарка: исходная страница во время проверки была недоступна. Нет подтверждённых FPS, загрузки CPU, реального трафика PSRAM, времени старта и потребления конкретной прошивки. Тем интереснее сам инженерный сдвиг: 10-дюймовый HMI на MCU уже проектируется как связка видеовывода, ускорителя и памяти. Размер экрана здесь измеряется не только диагональю — он измеряется количеством байтов, которые должны успеть пройти через систему до следующего кадра.