Перейти к содержанию

Графический движок ePicasso 2D/2.5D

Введение

ePicasso — графический ускоритель 2D/2.5D для семейства микроконтроллеров SF32 от SiFli. Он переносит на аппаратный блок поддерживаемые повторяющиеся операции с пикселями, разгружая CPU приложения. Благодаря этому встроенный интерфейс может работать плавно и отзывчиво, а дисплей — обновляться эффективно в пределах типичного для MCU энергобюджета.

В графическом тракте SF32 ePicasso работает после того, как ресурсы становятся доступны средству отрисовки, и до передачи итогового растрового изображения контроллеру дисплея. Он ускоряет обработку пикселей, например копирование изображений, смешивание, масштабирование, поворот и композицию слоёв. Ресурсы распаковывает eZip; он может передать распакованные данные изображения в ePicasso. Подготовленные пиксели на панель передаёт контроллер дисплея. Полный путь от ресурсов до панели описан в статье Обзор графики.

Обычно приложение не программирует отдельные операции ePicasso напрямую. Команды для типичных задач интерфейса формирует графический фреймворк, например LVGL, или библиотека производителя. Графический драйвер SF32 направляет поддерживаемые операции в ePicasso, а для неподдерживаемых переключается на отрисовку средствами CPU.

Обратитесь к этой странице, если профилирование интерфейса показало, что копирование, заливка, альфа-смешивание, масштабирование, поворот или композиция ограничивают быстродействие либо увеличивают энергопотребление. Здесь описано, какие операции можно ускорить и для каких необходимо сохранить корректный резервный путь на CPU.

Зачем нужно аппаратное ускорение графики

Производительность встроенного интерфейса часто ограничивает перемещение данных в памяти, а не скорость выполнения команд CPU. Даже для простого полупрозрачного значка может потребоваться для каждого затронутого пикселя прочитать исходные данные и кадровый буфер, смешать пиксели и записать результат обратно в кадровый буфер.

ePicasso ускоряет повторяющиеся операции с пикселями, которые часто встречаются в интерфейсе:

  • Копирование блоков изображения и областей кадрового буфера.
  • Заливка прямоугольников и фона интерфейса.
  • Альфа-смешивание значков, текстовых масок, теней и наложений.
  • Масштабирование растровых изображений для адаптивных макетов и анимации.
  • Поворот или преобразование областей изображения.
  • Композиция нескольких слоёв в итоговом буфере дисплея.
  • Преобразование распространённых форматов пикселей, если оно поддерживается устройством и драйвером.

Польза не ограничивается частотой кадров: аппаратное ускорение может снизить загрузку CPU, повысить отзывчивость сенсорного ввода и увеличить интервалы, в которые система может переходить в режимы с меньшим энергопотреблением между обновлениями дисплея.

Снижение нагрузки CPU не гарантирует уменьшения общей энергии, потребляемой системой. Тактирование ускорителя, трафик памяти, синхронизация и накладные расходы драйвера могут компенсировать экономию CPU. На целевой аппаратуре сравнивайте энергию на завершённое обновление экрана, включая дисплей и интервал простоя, а не оценивайте энергоэффективность только по загрузке CPU.

Основные понятия рендеринга

Поверхности и кадровые буферы

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

Размещайте поверхности в памяти с учётом того, как к ним обращаются:

  • Часто обновляемым буферам отрисовки обычно подходит быстрая внутренняя SRAM, если её объёма достаточно.
  • Большие изображения, шрифты и другие ресурсы можно хранить во флеш-памяти или PSRAM.
  • Для полноэкранного кадрового буфера дисплея высокого разрешения может потребоваться PSRAM.
  • Буферы, доступные по DMA, должны соответствовать рекомендациям SDK по памяти и когерентности кэша.

Смешивание пикселей

Смешивание объединяет исходные пиксели с пикселями назначения. Оно необходимо для современных элементов интерфейса: полупрозрачных карточек, мягких теней, сглаженных глифов, наложений и анимации плавного появления или исчезновения.

Распространённые варианты смешивания:

  • Смешивание с постоянным значением альфа-канала — для плавного появления или исчезновения целого слоя.
  • Смешивание с альфа-каналом для каждого пикселя — для изображений наподобие PNG и сглаженных значков.
  • Смешивание по маске — для текста, фигур и монохромных ресурсов.

Когда смешивание выполняет ePicasso, CPU не нужно повторять одни и те же арифметические операции для каждого пикселя затронутой области.

Масштабирование и поворот

Масштабирование и поворот часто применяются в анимированных интерфейсах и адаптивных макетах. Аппаратное масштабирование подходит для эффекта увеличения, миниатюр, значков разного размера и адаптации ресурсов к плотности пикселей экрана. Поворот полезен при смене ориентации дисплея, вращении индикаторов и элементов циферблата, а также в некоторых переходах.

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

Композиция слоёв

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

ePicasso предназначен для ускорения такой 2D-композиции. Вместо программной перерисовки всего экрана UI-фреймворк может обновить только изменившиеся области и поручить ускорителю эффективно объединить изменённые пиксели.

Графика 2D и 2.5D

Под графикой 2D обычно понимают операции с плоскими прямоугольными изображениями: копирование, заливку, смешивание, масштабирование, поворот и композицию.

Термин графика 2.5D описывает эффекты, которые по-прежнему выводятся в двумерный кадровый буфер, но добавляют преобразование или визуальное подобие перспективы. Во встроенном интерфейсе это могут быть преобразованные области изображения, более сложные переходы или эффекты глубины без полноценного 3D-конвейера рендеринга.

В документации SF32 ePicasso следует рассматривать прежде всего как ускоритель интерфейсов 2D/2.5D, а не как программируемую 3D-GPU уровня настольных систем. Его задача — сделать встроенные интерфейсы плавнее и энергоэффективнее, особенно на дисплеях носимых устройств, интеллектуальных систем управления, портативных приборов и компактных панелей.

Сравнение реализаций ePicasso

Сравнивайте реализацию в каждом семействе, а не только название движка. Разрешение дисплея, количество слоёв, поддерживаемые форматы, функции eZip, пропускная способность внешней памяти и поддержка драйвера также зависят от выбранной микросхемы SF32, корпуса, SDK и конструкции платы. В кратком описании SF32LB52x от SiFli движок называется ePicasso 2.0. В даташите SF32LB56x указаны четыре слоя переднего плана, отдельный масочный слой и монохромный фоновый слой; TurboPixel описан отдельно как функция сжатия кадрового буфера контроллера LCD. В даташите SF32LB58x указаны ePicasso 2.0 и отдельный векторный движок Vivante GCNanoUltraV.

Сравнение реализаций ePicasso
Документированное название движка Представитель семейства SF32 Графические возможности Документированные особенности Типичное применение
ePicasso SF32LB55x Ускорение интерфейсов 2.5D Аппаратные поворот, масштабирование и отражение по горизонтали, а также альфа-смешивание; отражение по вертикали не поддерживается; работа с ресурсами без потерь через eZip BLE-устройства и компактные HMI с более сложным интерфейсом, чем у изделий начального уровня
ePicasso 2.0 SF32LB52x Ускорение интерфейсов 2D/2.5D Распаковка ресурсов eZip 2.0 в графической конфигурации, оптимизированной по стоимости Носимые устройства начального уровня, Bluetooth-изделия, электронная бумага и компактные HMI
ePicasso 2.0 SF32LB56x Ускорение интерфейсов 2D/2.5D Четыре слоя переднего плана с альфа-смешиванием, отдельный масочный слой и монохромный фоновый слой; аппаратные поворот, масштабирование и отражение по горизонтали (отражение по вертикали не поддерживается); преобразование форматов; eZip 2.0; отдельная функция сжатия кадрового буфера TurboPixel Дисплеи с более высоким разрешением и расширенные интерфейсы на LVGL; проверьте поддержку операций для выбранной микросхемы и SDK
ePicasso 2.0 SF32LB58x Ускорение интерфейсов 2D/2.5D Помимо ePicasso 2.0, есть отдельный векторный движок Vivante GCNanoUltraV; возможности этих движков следует проверять раздельно Изделия с высоким разрешением и насыщенной графикой; проверьте, какие функции каждого движка поддерживает целевой SDK
ePicasso (EPIC) SF32LB57x Ускорение интерфейсов 2D/2.5D Поворот, масштабирование, матричные преобразования, отражение по горизонтали и вертикали, альфа-смешивание и композиция нескольких слоёв; EZIP передаёт распакованные ресурсы eZip/eZip-A в EPIC. В таблице форматов входных данных EPIC также указан JPEG для SF32LB57x; SDK также содержит отдельный HAL-декодер JPEGD — это самостоятельный путь. Подключённые изделия с насыщенной графикой, камерой и мультимедийными функциями

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

Согласно таблице возможностей EPIC в SDK, горизонтальное отражение поддерживается для всех перечисленных семейств, а вертикальное — только для SF32LB52x и SF32LB57x. Не следует трактовать общее упоминание «отражения» как поддержку обоих направлений. Та же таблица исключает поворот и матричные преобразования для EZIP, JPEG и YUV.

При прямой передаче данных из EZIP в EPIC не нужно сохранять всё распакованное исходное изображение в промежуточном кадровом буфере; рабочая память декодера и итоговый буфер рендеринга всё равно нужны. Декодирование JPEG не относится к функциям EZIP. В SDK JPEG указан как формат входных данных EPIC для SF32LB57x; отдельно приведён пример HAL JPEGD, в котором изображение JPEG декодируется с помощью HAL_JPEGD. Это два разных документированных пути; проверьте, какой именно используется в приложении.

Этот пример декодирования статического JPEG-изображения не подтверждает, что JPEGD декодирует потоки MJPEG. SDK отдельно описывает MJPEG в руководстве по видеопромежуточному ПО FFmpeg; в примечании о настройке указано, что аппаратное декодирование MJPEG доступно только на SF32LB58x.

Перед выбором аппаратного пути проверьте также ограничения для конкретных форматов и различия между семействами. Сверяйтесь с таблицей возможностей EPIC в исходном репозитории и интерфейсом JPEGD.

ePicasso в семействе SF32

В разных устройствах SF32 используются разные конфигурации ePicasso. Окончательный перечень возможностей следует проверять по даташиту и руководству по программированию выбранной микросхемы.

Таблица: ePicasso в семействе SF32
Семейство устройств Графический ускоритель Типичное позиционирование
SF32LB52x Ускоритель 2D/2.5D ePicasso 2.0 Носимые устройства, Bluetooth-изделия и компактные HMI с оптимизацией по стоимости.
SF32LB55x Ускоритель 2.5D ePicasso BLE-устройства и устройства с датчиками, которым также нужен дисплей.
SF32LB56x Ускоритель 2D/2.5D ePicasso 2.0 Изделия с дисплеем высокого разрешения и более сложным интерфейсом на базе LVGL.
SF32LB57x Ускоритель 2D/2.5D ePicasso (EPIC) Подключённые изделия с насыщенной графикой, камерой и мультимедийными функциями.
SF32LB58x ePicasso 2.0 и отдельный векторный движок Vivante GCNanoUltraV Флагманская графика, интерфейсы высокого разрешения и передовые визуальные приложения.

Такое развитие позволяет сохранять сходную программную модель графики на разных устройствах SF32 и одновременно выбирать микросхему по разрешению дисплея, объёму памяти, сложности графики, числу GPIO и бюджету энергопотребления.

Интеграция с LVGL и UI-фреймворками

LVGL часто используют для встроенных графических интерфейсов на SF32. Приложение формирует экраны из виджетов, стилей, изображений, шрифтов и анимации. LVGL определяет области для перерисовки; программный рендерер или аппаратный модуль отрисовки формирует их пиксели. Драйвер дисплея передаёт готовые пиксели на панель через функцию flush и сообщает о завершении передачи. Завершение отрисовки и завершение передачи на дисплей — разные события.

ePicasso может ускорить LVGL, если порт SF32 направляет поддерживаемые операции отрисовки в аппаратный блок. Чаще всего полезно ускорять:

  • Блочное копирование изображений (blit).
  • Заливку цветом.
  • Альфа-смешивание.
  • Масштабирование изображений.
  • Поворот или преобразование поддерживаемых областей изображения.
  • Композицию в буфер отрисовки или кадровый буфер.

Надёжная интеграция LVGL сохраняет резервные пути на CPU. Не всякая функция LVGL, формат пикселей, эффект стиля или структура изображения соответствует поддерживаемой аппаратной операции. Ускоряйте часто используемые ресурсоёмкие операции, а редкие или сложные случаи оставляйте программной обработке.

Память и пропускная способность

Графическое ускорение не отменяет необходимости продуманной организации памяти. Во многих встроенных системах с дисплеем узким местом становится шина памяти: за доступ конкурируют ePicasso, CPU, контроллер дисплея, DMA, Flash, PSRAM, аудио и беспроводные подсистемы.

На производительность графики влияют следующие решения:

  • Выбирайте разрешение и глубину цвета в соответствии с требованиями изделия.
  • Размещайте часто используемые графические ресурсы в памяти с приемлемой задержкой доступа.
  • Используйте частичную отрисовку или обновление изменившихся областей, если обновлять весь экран не нужно.
  • Не выполняйте лишнее преобразование форматов в часто используемом тракте.
  • Выравнивайте буферы отрисовки и кадровый буфер по рекомендациям SDK.
  • Соблюдайте правила DMA и когерентности кэша, если CPU, ePicasso и контроллер дисплея используют общие буферы.

Для кэшируемых буферов, общих для CPU и ePicasso, соблюдайте правила SDK по обслуживанию кэша и владению буфером. До чтения аппаратным блоком очистите кэш (clean) для исходных данных, записанных CPU. Перед записью аппаратного блока в буфер назначения подготовьте его по правилам SDK, чтобы изменённые строки кэша CPU не перезаписали результат позднее; после завершения аппаратной операции инвалидируйте устаревшие строки перед чтением результата CPU. Учитывайте выравнивание и соседние данные; не изменяйте буфер, пока им владеет аппаратура. Порядок работы описан в обзоре графики.

Разделение функций в обзоре графики помогает искать причины низкой производительности интерфейса. Медленное обновление может быть вызвано временем отрисовки, пропускной способностью памяти, скоростью передачи данных на панель, настройкой интерфейса дисплея или стратегией синхронизации. ePicasso наиболее полезен, когда ограничением является отрисовка. Если же ограничивает передача на панель, больший эффект могут дать частичное обновление, меньшая глубина цвета, другая стратегия буферизации или более быстрый интерфейс.

Типичные сценарии применения

ePicasso особенно полезен изделиям с насыщенным интерфейсом, которым при этом необходимо укладываться в бюджет энергопотребления микроконтроллера.

Типичные сценарии:

  • Циферблаты и экраны приложений смарт-часов.
  • Фитнес-трекеры и дисплеи носимых устройств для контроля здоровья.
  • Интерфейсы Bluetooth-аудиоустройств.
  • Панели электровелосипедов, электросамокатов и компактных транспортных средств.
  • Устройства управления умным домом и небольшие сенсорные панели.
  • Портативные медицинские или промышленные приборы.
  • Принтеры этикеток, умные бейджи и электронные ценники.
  • HMI на LVGL со значками, прозрачностью и анимацией.

Практические рекомендации по проектированию

Начните с требований к дисплею и пользовательскому интерфейсу, а затем, двигаясь от них, определите графическую архитектуру.

Ключевые вопросы:

  • Каковы разрешение дисплея и глубина цвета?
  • Используется ли для обновления панели SPI, QSPI, 8080, RGB/DPI, MIPI DSI, EPD или JDI?
  • Нужна ли изделию полноэкранная анимация или в основном частичные обновления?
  • Где хранятся ресурсы интерфейса: во внутренней SRAM, Flash или PSRAM?
  • Сколько памяти доступно для буферов отрисовки и кадровых буферов?
  • Какие операции графический драйвер может ускорить с помощью ePicasso?
  • Когерентны ли кэши для общих буферов CPU, ePicasso и контроллера дисплея?

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

Основные выводы

  • ePicasso — графический ускоритель 2D/2.5D от SiFli для микроконтроллеров SF32.
  • Он разгружает CPU от распространённых операций с пикселями: заливки, копирования, смешивания, масштабирования, поворота и композиции слоёв.
  • ePicasso работает совместно с контроллером дисплея: ускоритель подготавливает пиксели, а контроллер передаёт их на панель.
  • Наибольшую пользу он приносит интерфейсам с большим объёмом графики, где перемещение данных, смешивание и повторная обработка пикселей иначе занимали бы существенное время CPU.
  • LVGL и другие UI-фреймворки могут использовать ePicasso, если графический драйвер SF32 направляет поддерживаемые операции отрисовки в аппаратный блок.
  • Итоговая производительность зависит от разрешения дисплея, размещения данных в памяти, форматов пикселей, стратегии буферизации, кэширования и пропускной способности интерфейса панели.

Последнее обновление: