Конвертер из HDMI/DP++ в MIPI DSI
Неоднократно мне тут задавали вопросы по конвертеру из HDMI в MIPI DSI. Так сказать, по просьбам трудящихся, выкладываю что у меня получилось. В статье затрону аппаратную сторону реализации устройства и изложу основные проблемы, с которыми столкнулся. Приятного прочтения.
Постановка задачи
Идея реализации родилась уже давно, но тут появилась необходимость разработать конвертер в определенном форм-факторе (небольшие габариты, в том числе, по высоте), со специфичным разъемом (вместо HDMI), с поддержкой одного канала MIPI DSI (забегая вперед скажу, что схемотехника изделия позволяет использование двух каналов, но один канал пришлось отрезать).
Основные требования
- вход HDMI/DP++;
- один канал MIPI DSI;
- подключение матрицы G080UAN02.1 (8”, 1200*1920);
- регулировка уровня яркости подсветки;
- рабочее напряжение конвертера 12В.
Требования к конструктиву
- геометрия платы 60*60мм с наименьшей высотой;
- возможность смены EDID из программы для ПК;
- микроконтроллер для управления и конфигурации STM32F103.
Поиск решения
На момент написания статьи (февраль 2022) на рынке электронных компонентов все еще есть проблемы. Из доступного, за приемлемые сроки, удалось найти пару SN75DP139RSBR (TI) + TC358870XBG (Toshiba). Первая микросхема – DisplayPort to TMDS Level-Shifting Re-Driver, предназначена для согласования интерфейса DP++ с входом HDMI второй микросхемы. TC358870XBG позволяет из HDMI получить два канала MIPI DSI.
Ниже (Рис.1.) приведена схема включения SN75DP139RSBR. Похожие микросхемы я уже использовал и тут все стандартно. Главное не забыть конфигурационные резисторы (они подписаны на схеме), в том числе, I2C_EN. У TI, как обычно, отличные даташиты и проблем с включением не возникает. Микросхема питается от одного напряжения 3,3В. Дифференциальные пары на схеме определены и объединены в соответствующие классы.
Рис.1. Схема включения SN75DP139RSBR
С Toshiba все несколько сложнее. Во-первых, она в корпусе P-VFBGA80, во-вторых, для ее питания необходимо несколько напряжений, в-третьих, ей нужен внешний тактовый генератор на 48МГц, и, напоследок, даташит оставляет желать лучшего.
Рис.2. Схема включения TC358870XBG
Итак, обо всем, по порядку. С корпусом все понятно. Шаг между боллами 0,65мм – это позволит выводить проводники 0,125мм, что по меркам Резонита теперь стандарт. В даташите указано что необходимо подавать четыре напряжения – 1,2В, 1,8В, 3,3В и 5В (там указан разброс всех параметров (указаны на схеме) и есть несколько вариантов включения). Как выяснилось позже, 5В нужны только для проброса сигнала HDMI_HP, а 1,8В – это VDDIO, которые можно использовать на 3,3В. Генератор из имеющихся в свободной продаже 7W-48.000MBB-T. К куцему даташиту вернусь позже.
По схеме включения вроде тоже ничего особенного. Микросхема имеет два I2C интерфейса. Один подключаем к микроконтроллеру, второй пробрасываем через SN75DP139RSBR на порт HDMI ПК. Звук задействовать не буду, поэтому на PCM поставил только конденсаторы (на всякий случай). Сигналом сброса (болл К8 — RESETN) тоже буду управлять с микроконтроллера.
Теперь немного о EDID и его хранении. Toshiba имеет EDID_SRAM, куда можно записать параметры матрицы. Для одного из прошлых проектов, у меня была реализована небольшая схема для записи EDID на внешнюю EEPROM. Схема ниже (Рис.3.).
Рис.3. Схема включения EEPROM для EDID
Тут нет ничего особенного. EEPROM подключена по I2C параллельно Toshiba (у последней имеется регистр для отключения использования EDID_SRAM). По событию, например, нажатию кнопки (S1), микроконтроллер меняет адрес EEPROM (чтобы не произошло коллизий при подключенном устройстве к ПК), записывает EDID в микросхему, восстанавливает адрес на тот, который ждет ПК по HDMI и, собственно, все. Как только выставится сигнал HPD_SOURCE и на шине I2C появится EEPROM, видеокарта вычитает параметры и дисплей отобразится в системе.
Это было сделано, как говорится, на всякий пожарный случай. С пробросом параметров EDID проблем не возникло и было решено оставить это Тошибе. Специальным софтом для ПК заливаем по UART EDID во flash контроллера и отдаем его в TC358870XBG (либо храним во внешней EEPROM и когда понадобится – прошиваем по кнопке, например (все зависит от потребности и реализации в софте)).
Для управления подсветкой дисплея использую драйвер TPS61161DRV от TI. Уже неоднократно его ставил в различные проекты, очень хорошее решение. Из особенностей – это маленький корпус (2*2мм), высокая эффективность (до 90%), хороший диапазон напряжений (2,7-18В) и возможность подключения от 6 до 10 светодиодов (партномера отличаются, а корпус и схема включения — нет). Драйвер имеет два режима управления. CONTROL MODE – режим, позволяющий выставлять значения яркости по One-Wire, отлично подходит для моментов, когда нет возможности постоянно выдавать ШИМ на драйвер. PWM MODE – обычный режим ШИМ (на той же ноге, что и One-Wire), который я и использую. PWM 5-100кГц, регулировка яркости скважностью. Ниже привел схему (Рис.4.).
Рис.4. Схема драйвера подсветки матрицы TPS61161DRV
Питание 5В и 3,3В сделал на двух DC/DC: ST1S10PHR (возможна замена на ST1S41PHR) и AP3418KTR, соответственно. Взял с большим запасом по току, но, опять-таки, они есть у нас на складе и их можно относительно просто купить.
Печатная плата
Со схемой закончили, теперь трассировка. Плату делал на 4-х слоях. Второй GND, третий POWER. Думаю, что можно было постараться и развести на 2-х слоях, но не вижу смысла в такой экономии, так как можно потерять в качестве.
Рис.5. Трассировка MIPI DSI
Пришлось немного постараться с трассировкой DSI к разъему матрицы. Уж очень неудобное оказалось расположение сигналов на дисплее, а очень хотелось сделать по стандартному классу с переходными отверстиями 0,3/0,6. Контроль длин решил не делать, так как расстояние минимальное, а разность между длинами проводников не велика. Хотя можно было и сделать – место позволяет.
Трассировка SN75DP139RSBR без переходных отверстий. Для корректной разводки конденсаторы по питанию обеих микросхем были установлены на bottom.
Рис.6. Трассировка SN75DP139RSBR
Хотел (для тестов) вывести оба MIPI DSI с TC358870XBG, но, к сожалению, не хватило места на плате, чтобы корректно все сделать. Получалось громоздко и второй DSI разъем на bottom.
Теперь немного о документации. Первое что насторожило, это отсутствие информации о режиме Single link DSI в Тошибе. Он заявлен, но о том, как его использовать и какой канал для этого задействуется в явном виде нигде не сказано (понятно, что, скорее всего, можно выбрать либо любой, либо нулевой, но все-таки, а вдруг только первый…). Методом проб и ошибок, а также копанием документации, удалось найти регистр, который устанавливает данную конфигурацию, но это было совсем не очевидно.
В даташите на матрицу AUO отсутствует описание регистров для конфигурации MIPI DSI. Чтобы дисплей включился, его нужно проинициализировать по MIPI, записав с десяток команд. Делать это нужно каждый раз после подачи питания на матрицу. Запросили расширенную документацию на дисплей и дело пошло быстрее. Изначально дисплей имеет портретную ориентацию (1200*1920), но в настройках монитора на ПК его можно перевести в альбомный режим работы.
Рис.7. Изображение на матрице G080UAN02.1
MIPI DSI
MIPI DSI ® v1.3.2 (September 2021)
Member version




Overview
General Info
The MIPI Display Serial Interface (MIPI DSI ® ) defines a high-speed serial interface between a host processor and a display module. The interface enables manufacturers to integrate displays to achieve high performance, low power, and low electromagnetic interference (EMI) while reducing pin count and maintaining compatibility across different vendors. Designers can use MIPI DSI to facilitate brilliant color rendering for the most demanding imagery and video scenes and to support transmission of stereoscopic content.
MIPI DSI is developed by the MIPI Display Working Group. The latest MIPI DSI update, v1.3.2, was released in 2021.
Note: The specification is available only to MIPI Alliance members. For information about MIPI Alliance membership, visit Join MIPI.
MIPI DSI has been widely adopted. It is ubiquitous in smartphones and also being used in tablets, laptops and laptop/tablet hybrids. It is also being implemented by the automotive industry for dashboard displays and in-car infotainment systems, and used in wearables, IoT and virtual/augmented reality applications.
MIPI DSI operates on the MIPI D-PHY physical layer. It uses a command set defined in the MIPI Display Command Set (MIPI DCS). It also incorporates the Display Stream Compression (DSC) Standard from the Video Electronics Standards Association (VESA). Overall, the feature set of MIPI DSI is quite similar to that of the more recent MIPI DSI-2℠ specification, which offers support for both MIPI D-PHY℠ and MIPI C-PHY℠.
Протокол 1.LCD MIPI DSI
MIPI-DSI — это последовательный интерфейс, применяемый для технологии отображения, совместимый с DPI (интерфейс пиксельного дисплея), DBI (интерфейс шины дисплея) и DCS (набор команд отображения). Последовательная отправка информации о пикселях или инструкций на периферийное устройство и считывание информации о состоянии или информации о пикселях с периферийного устройства, а также использование собственного независимого протокола связи во время передачи, включая формат пакета данных и механизм исправления ошибок и механизм обнаружения
MIPI-DSI имеет два рабочих режима: высокоскоростной режим и низкоскоростной режим. Все каналы данных могут использоваться для однонаправленной высокоскоростной передачи. Однако, только первый канал данных может использоваться для низкоскоростной двунаправленной передачи. Канал данных возвращается. Канал синхронизации предназначен для передачи синхронных сигналов синхронизации во время высокоскоростной передачи данных. Кроме того, ведущий может разрешить одновременную связь с несколькими ведомыми.
Простая схема системы LCD MIPI выглядит следующим образом:
1.1, протокол MIPI DSI
Он в основном делится на четыре уровня: прикладной уровень, уровень протокола, уровень управления каналами и физический уровень
1.2 Физический уровень
При получении запроса на низкоскоростную передачу логическая схема сериализует команду или данные, которые должны быть переданы, и управляет выводом с высоким уровнем низкого энергопотребления для запроса на передачу с низкой мощностью, а затем последовательно загружает команду или данные в канал , Принимающая сторона распознает режим передачи для завершения параллельного преобразования последовательных данных.
После получения высокоскоростного запроса схема отправляет высокий уровень низкого энергопотребления для запроса высокоскоростной передачи, а затем приводит в действие модуль дифференциального привода для передачи сигнала низкого размаха по каналу после последовательного преобразования данных, подлежащих отправке, и принимающая сторона распознает После высокоскоростного режима синхронный сигнал корректно обнаруживается, а высокоскоростные последовательные данные последовательно-параллельно преобразуются и успешно принимаются.
Кроме того, право управления шиной может быть обменено между ведущим и ведомым. Отправитель отправляет запрос на отказ от шины. После того, как получатель получает запрос, он управляет шиной, чтобы инициировать ответ. Мы называем это BTA (Bus Turn-Around). Когда хосту необходимо получить статус данных, полученных ведомым устройством, или прочитать параметры или данные дисплея модуля дисплея, хост инициирует операцию TA. После того, как ведомый сервер отправляет данные, он автоматически инициирует операцию TA, чтобы вернуть управление шиной.
Сигнал имеет два рабочих состояния: режим высокой скорости (LP) и режим низкой скорости (HS).
Физический уровень предназначен для управления аппаратным сигналом (синхронизацией). Существует два типа сигналов MIPI-DSI:
Переулок часов, два провода, один Dp, Dn;
Линия передачи данных, два провода, один Dp, Dn;
В соответствии с требованиями имеется несколько полос данных, по крайней мере одна полоса (полоса 0) и до 4 полос (полоса 0, полоса 1, полоса 2, полоса 3), из которых только полоса 0 является двунаправленной (режим низкой скорости является двунаправленным, режим высокой скорости может быть только однонаправленным), Остальные могут быть только однонаправленными (высокоскоростной однонаправленный режим).
Уровень передачи данных:
Низкоскоростной режим LP: 0-1,2 В, уровень холостого хода (LP11) Dp, Dn — 1,2 В.
Высокоскоростной режим HS: 100-300 мВ (200 мВ)
Согласно протоколу D-PHY, на физическом уровне всего протокола между ведущим и ведомым устройствами используется синхронное соединение. Канал синхронизации используется для передачи высокоскоростных часов, а один или несколько каналов данных используются для передачи сигналов данных с низким энергопотреблением. Или каждый канал высокоскоростного сигнала данных использует две соединительные линии для реализации соединения между ведущим и ведомым устройствами и поддерживает высокоскоростной режим и низкоскоростной режим ESCAPE.
В скоростном режиме,Отправитель одновременно ведет только две соединительные линии в канале, Выходной дифференциальный сигнал низкого качания, например, 200 мВ;
В режиме низкой скорости,Передающая сторона управляет соединительной линией соответственно, и каждый выводит несимметричный сигнал, Но колебание относительно велико, например 1,2 В, как показано на рисунке ниже:
Модуль дифференциальной передачи (HS_TX) управляет соединительной линией с помощью дифференциального сигнала.В высокоскоростном канале есть два состояния: дифференциальный-0 и дифференциальный-1. Односторонний передающий модуль с низким энергопотреблением (LP_TX) независимо управляет двумя соединительными линиями, и в канале есть четыре различных состояния: LP00, LP01, LP10 и LP11. Протокол, в частности, определяет уровень линии и устанавливает три режима работы: высокоскоростной режим, режим управления и режим ESCAPE. По умолчанию канал находится в режиме управления, и линия находится в состоянии STOP. Когда каналу необходимо войти в высокоскоростной режим или режим ESCAPE, отправляющему модулю необходимо запустить линию, чтобы отправить запрос получателю для LP01 или LP10. После отправки последовательности запросов выполняется соответствующий рабочий режим и отправляется LP11.
для выхода и завершения передачи и возврата в состояние управления STOP. Приемник должен постоянно выполнять прием LP-RX и определять рабочий режим канала с чистым уровнем линии.
1.2.1 Канал синхронизации
Канал синхронизации поддерживает высокоскоростной режим и режим ULPS (режим сверхнизкого энергопотребления):
Высокоскоростной режим применяется ко всему интерфейсу для работы в режиме высокоскоростной передачи данных, который используется для передачи высокоскоростных часов:
Режим ULPS используется для периферийных устройств (например, всего модуля дисплея) для перевода канала синхронизации в состояние сверхнизкого энергопотребления при его переходе в спящий режим, что экономит энергопотребление периферийных интерфейсов.
1.2.2 Канал данных
Канал передачи данных поддерживает высокоскоростной режим и режим ESCAPE, а также включает в себя еще одну важную функцию управления шинами правого обмена — BTA. Высокоскоростной режим высокоскоростной передачи данных разностного сигнала низкого размаха, быстрая, до
1 Гбит / с. После последовательности запросов LP11-> LP01-> LP00 HS_TX начинает отправлять последовательные высокоскоростные данные.После завершения передачи LP_TX отправляет LP11 для возврата в нормальный режим управления.
В режиме ESCAPE LP_TX напрямую управляет линейным каналом для передачи последовательности уровней для передачи данных с низким энергопотреблением. Метод ввода — LP11-> LP10-> LP00-> LP01-> LP00, а метод выхода — LP10-> LP11. После последовательности запросов LP_TX отправляет команды режима, включая команду запуска и передачу данных с низким энергопотреблением (LPDT), как показано ниже:
Режим BTA используется для обмена питания управления шиной и завершается в режиме управления. LP_TX отправляет последовательность запросов LP11-> LP10-> LP00-> LP10-> LP00 и останавливает движение автобуса после прохождения BTA-GO. Относительно другого конца шины, после получения последовательности запросов и передачи BTA-SURE, LP_TX начинает управлять шиной, отправляет сигнал подтверждения и принимает шину.
1.3 Управление каналами
В соответствии с проектом установлено не более 4 каналов данных. Этот уровень делит данные, которые необходимо отправить, на N групп в соответствии с порядком каналов и отправляет их в соответствующий канал данных, чтобы они отправлялись на ведомую сторону через канал данных. На приемном конце этот уровень должен объединить полученные N наборов данных для восстановления исходной последовательности данных.
Группировка и восстановление данных:
Процесс обработки данных:
1.4, уровень протокола
Информация передается в формате пакетов данных, включая длинные пакеты данных и короткие пакеты данных. При отправке данных данные упаковываются в соответствии с типом информации и содержанием для завершения генерации кода ECC и добавления кода CRC. При получении данных выполните обнаружение и исправление ошибок для всего пакета данных в соответствии с кодом ECC и кодом CRC, завершите декодирование заголовка пакета и содержимого данных и разумно передайте его на прикладной уровень.
Протокол DSI — это протокол связи, основанный на передаче пакета данных.Команды и данные, передаваемые между хостом и модулем дисплея, в основном выполняются в формате пакета данных. Существует два типа пакетов данных, определенных DSI: короткие пакеты
и длинные пакеты. Короткие пакеты в основном используются для передачи команд, чтения и записи регистров, а длинные пакеты в основном используются для передачи больших объемов данных изображения или некоторых команд управления.
1.5 Прикладной уровень
В соответствии с потребностями прикладного модуля, команда и данные отправки первоначально кодируются и преобразуются в формат, определенный MIPI-DSI, тогда как принимающая сторона восстанавливает принятые данные в соответствии с форматом данных и требованиями к синхронизации, поддерживаемыми прикладным модулем.
Модуль прикладного уровня напрямую связан с модулем дисплея и отвечает за связь с модулем дисплея. В соответствии с требованиями протокола, интерфейсная схема поддерживает командный режим и режим видео. Командный режим заключается в том, что хост все еще может читать и записывать в модуль дисплея в формате «команда + параметр» после преобразования интерфейса. В режиме видео хост может напрямую отображать дисплей. Данные записываются в модуль отображения, и для отображения видео в режиме реального времени не требуется команда. Модуль должен поддерживать командный режим и видео режим во время процесса проектирования.
В соответствии со значением типов данных, определенных протоколом, некоторые из этих типов данных специально применяются к режиму видео.Например, 0x01 относится к началу сигнала синхронизации поля (Vsync). Следовательно, в конструкции этой модульной схемы он разделен на два модуля: схему приложения видеорежима и схему приложения командного режима. Модуль схемы приложения видеорежима принимает только команды и данные, относящиеся к режиму видео, и передает их драйверу в формате синхронизации DPI.
Модуль схемы приложения режима cmd подходит для команд и данных управления не в режиме видео, декодирует их и записывает в регистр или SRAM в модуле дисплея в формате синхронизации DBI. Когда данные должны быть прочитаны, модуль схемы приложения командного режима может считывать соответствующую информацию регистра из модуля дисплея через порт DBI.
Общая блок-схема MIPI:
2. MIPI DSI Практика
2,1 мили
mipi_clk = resX * resY * bps * 1.25 * fps / lane_num
Примечание: бит / с = 3 * 8 = 24 бита
1,25 это наценка
Разрешение: 2560 * 1440, кадр / с = 65
MIPI LANE: 2 полосы данных, 1 полоса часов
mip_clk = 2560*1440*60fps*(3*8)* 1.25 * 65 / 2/8/104/1024 = 429Mhz
2.2 ЖК-диаграмма DSI
Сегодня мы кратко обсудим LCD MIPI в качестве примера. Дисплей соответствует MIPI DSI, а камера соответствует MIPI CSI. С дисплеем связаны MIPI DSI, DPI, DBI и т. Д., Которые регулируют протокол от физического уровня, канального уровня до прикладного уровня при обмене данными между хост-контроллером дисплея и панелью.
DBI: Command-mode displays
2.3 Mipi вызывает проблемы с Huaping
2.3.1 Экран переключения, в середине мигает вертикальная линия
Причина: низкий уровень Mipi clk_post
Анализ: полоса данных переходит в режим lp после передачи последнего кадра данных. Время, в течение которого clklane продолжает передавать тактовый сигнал, слишком короткое, в результате чего канал данных не может полностью войти в lp11, а состояние нестабильно.
1. Увеличение clk_post
2. Часы переводятся в режим продолжения, который потребляет много энергии
2.3.2, LCD правая половина заставки
Причина: mipi clk низок, clk низок в lk, и clk нормален в ядре
Анализ: Непоследовательная длина пакета данных приведет к несоответствиям во время ввода lp11, что является нормальным явлением. — Исключить. • Низкие частоты вызывают проблемы.
Решение: частота обрезки
2.3.3 Заставка не может быть снята из-за заряда панели — дизайн оборудования
2.4, время ненормальное
2.4.1 Мипи аномальный импульс, когда IOVCC включен
В этот момент интерфейс mipi не готов, lp-tx включен, и выдаются ненормальные импульсы.
2.4.2, мипи сигнал низок, когда сброс низкий
Из-за низкого энергопотребления устройство переходит в режим глубокого ожидания при низком значении сброса, регуляторе отключается, защитный диод шунтируется, а сигнал сбрасывается.
Разрабатываем устройство с графикой на STM32. Основные возможности периферии
Данная статья является третьей в серии публикаций, посвященных построению графических приложений на базе микроконтроллеров STM32. На этот раз основное внимание уделено специализированным периферийным блокам, которые используются для работы с TFT-дисплеями: FSMC, LTDC, DSIHOST, Chrom-ART Accelerator, Chrom-GRC, JPEG-кодек. В статье также рассказывается о возможности подключения к контроллерам STM32 внешней памяти с помощью QuadSPI и FMC.
Ранее в журнале «Новости электроники» была опубликована статья «TFT-дисплеи Winstar: новинки, характеристики и особенности подключения», в ней кратко рассматривались стандартные интерфейсы для работы с TFT-дисплеями [1]:
- MIPI-DBITypeA – 8/16-битный параллельный интерфейс, совместимый со спецификацией Motorola Применяется в дисплеях со встроенным контроллером и экранной памятью.
- MIPI-DBI Type B – 8/16-битный параллельный интерфейс, совместимый со спецификацией Intel 8080. Применяется в дисплеях со встроенным контроллером и экранной памятью.
- MIPI-DBI Type C – последовательный SPI-интерфейс. Применяется в дисплеях со встроенным контроллером и экранной памятью.
- MIPI-DPI (MIPI display parallel interface) или RGB – 16/18/24-битный параллельный интерфейс. Применяется в дисплеях, у которых нет собственной экранной памяти, а TFT- контроллер является внешним.
- MIPI-DSI (MIPI display serial interface) – последовательный дифференциальный интерфейс, который может работать в двух режимах – с дисплеями со встроенным контролером и графической памятью (commandmode) и с дисплеями без собственной графической памяти (videomode).
- LVDS – последовательный дифференциальный интерфейс, предназначенный для дисплеев с максимальным разрешением без встроенного TFT-контроллера и экранной памяти.
Еще одна статья – «STM32 + современный TFT-дисплей: варианты на любой вкус» – была посвящена обзору 32-битных микроконтроллеров семейства STM32, большая часть которых имеет на борту специализированные периферийные блоки, позволяющие реализовать аппаратное взаимодействие с TFT-дисплеями (кроме LVDS) [2].
В данной статье проводится подробный обзор специализированной графической периферии STM32. Основная часть статьи посвящена рассмотрению базовых блоков, без которых невозможно подключение TFT-дисплеев: FSMC, LTDC и DSIHOST. Во второй части рассказывается о встроенных контроллерах внешней памяти QuadSPI и FMC. В заключение дается краткое описание вспомогательных блоков, позволяющих значительно упростить и ускорить работу с графикой — Chrom-ART Accelerator, Chrom-GRC, JPEG-кодек.
Перед тем как двигаться дальше, необходимо сделать важное замечание. Дело в том, что в ряде случаев взаимодействие с TFT-дисплеями, использующими интерфейсы SPI/Motorola 6800/Intel 8080/RGB, можно организовать с помощью обычных портов ввода-вывода. Однако при этом обмен данными с дисплеем и обработка графики «съест» всю производительную мощность процессорного ядра. В данной статье такое решение не рассматривается, и речь идет только о работе со специализированными аппаратными блоками.
Обзор аппаратной периферии STM32 для создания графических приложений
Номенклатура микроконтроллеров STM32 чрезвычайно богата и насчитывает более тысячи различных моделей, объединенных в 64 линейки. Каждая из линеек имеет индивидуальный набор периферийных блоков, позволяющих взаимодействовать с TFT-дисплеями (таблица 1):
- SPI-интерфейс – коммуникационный интерфейс для дисплеев с MIPI-DBI Type C. При наличии SPI TFT-дисплеи могут использоваться со всеми без исключения контроллерами STM32. Этот случай достаточно простой и очевидный, и отдельно о встроенном SPI-интерфейсе STM32 в рамках данной статьи рассказано не будет;
- FSMC (Flexible Static Memory Controller) – контроллер внешней памяти, который позволяет взаимодействовать с TFT-дисплеями, снабженными интерфейсами Motorola 6800 и Intel 8080. При определенных условиях FSMC может использоваться для работы с TFT-дисплеями с RGB-интерфейсом;
- LTDC (LCD-TFT Display Controller) – специализированный TFT-контроллер, который позволяет работать с TFT-дисплеями, оснащенными RGB-интерфейсом;
- MIPI-DSI Host – специализированный интерфейс для работы с TFT-дисплеями, с MIPI-DSI.
В большинстве случаев внутренней памяти микроконтроллера не хватает для хранения графических изображений и размещения экранной памяти. По этой причине очень часто требуется внешняя Flash и ОЗУ. Для увеличения объема Flash идеально подходит интерфейс QuadSPI, который присутствует практически во всех последних линейках STM32. Для подключения к STM32 дополнительного ОЗУ следует использовать контроллер внешней памяти FSMC/FMC (таблица 1). Главное различие между FSMC и FMC заключается в том, что FMC способен работать с SDRAM.
В состав многих микроконтроллеров STM32 входят и другие вспомогательные блоки, созданные для оптимизации работы с графикой. Они не являются обязательными для создания графических приложений, и без них вполне можно обойтись, но их использование значительно сокращает нагрузку на процессорное ядро:
- Chrom-ART – графический ускоритель. Представляет собой особый контроллер прямого доступа к памяти, созданный специально для оптимизации процессов по пересылке больших массивов графических данных с возможностью их потоковой обработки.
- Chrom-GRC – блок оптимизации хранения графических данных, позволяющий экономить до 20% памяти при работе с дисплеями округлой формы.
- JPEG-кодек – специализированный ускоритель, необходимый для JPEG-кодирования и декодирования графических изображений.
Таблица 1. Специализированная периферия микроконтроллеров STM32 для графических приложений
Наименование | Интерфейсы дисплеев | Графические ускорители | Внешняя память | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
SPI | Motorola 6800 | Intel 8080 | RGB | MIPI-DSI | LVDS | ||||||
SPI | FSMC | LTDC | DSI | – | СhromeArt | Chrom-GRC | JPEG-Codec | QuadSPI | SDRAM | ||
STM32L0x1 | + | – | – | – | – | – | – | – | – | – | – |
STM32L0x2 | + | – | – | – | – | – | – | – | – | – | – |
STM32L0x3 | + | – | – | – | – | – | – | – | – | – | – |
STM32L100 | + | – | – | – | – | – | – | – | – | – | – |
STM32L151/152 | + | + | + | – | – | – | – | – | – | – | – |
STM32L162 | + | + | + | – | – | – | – | – | – | – | – |
STM32L431 | + | – | – | – | – | – | – | – | – | + | – |
STM32L451 | + | – | – | – | – | – | – | – | – | + | – |
STM32L471 | + | + | + | – | – | – | – | – | – | + | – |
STM32L432 | + | – | – | – | – | – | – | – | – | + | – |
STM32L452 | + | – | – | – | – | – | – | – | – | + | – |
STM32L433 | + | – | – | – | – | – | – | – | – | + | – |
STM32L475 | + | + | + | – | – | – | – | – | – | + | – |
STM32L476 | + | + | + | – | – | – | – | – | – | + | – |
STM32L496 | + | + | + | – | – | – | + | – | – | + | – |
STM32L4R5 | + | + | + | – | – | – | + | – | – | + | – |
STM32L4S5 | + | + | + | – | – | – | + | – | – | + | – |
STM32L4R7 | + | + | + | + | – | – | + | + | – | + | – |
STM32L4S7 | + | + | + | + | – | – | + | + | – | + | – |
STM32L4R9 | + | + | + | + | + | – | + | + | – | + | – |
STM32L4S9 | + | + | + | + | + | – | + | + | – | + | – |
STM32F0x0 | + | – | – | – | – | – | – | – | – | – | – |
STM32F0x1 | + | – | – | – | – | – | – | – | – | – | – |
STM32F0x2 | + | – | – | – | – | – | – | – | – | – | – |
STM32F0x8 | + | – | – | – | – | – | – | – | – | – | – |
STM32F100 | + | + | + | – | – | – | – | – | – | – | – |
STM32F101 | + | + | + | – | – | – | – | – | – | – | – |
STM32F102 | + | – | – | – | – | – | – | – | – | – | – |
STM32F103 | + | + | + | – | – | – | – | – | – | – | – |
STM32F105 | + | + | + | – | – | – | – | – | – | – | – |
STM32F107 | + | + | + | – | – | – | – | – | – | – | – |
STM32F205 | + | + | + | – | – | – | – | – | – | – | – |
STM32F215 | + | + | + | – | – | – | – | – | – | – | – |
STM32F207 | + | + | + | – | – | – | – | – | – | – | – |
STM32F217 | + | + | + | – | – | – | – | – | – | – | – |
STM32F301 | + | + | + | – | – | – | – | – | – | – | – |
STM32F302 | + | – | – | – | – | – | – | – | – | – | – |
STM32F303 | + | + | + | – | – | – | – | – | – | – | – |
STM32F3x4 | + | – | – | – | – | – | – | – | – | – | – |
STM32F373 | + | – | – | – | – | – | – | – | – | – | – |
STM32F3x8 | + | – | – | – | – | – | – | – | – | – | – |
STM32F401 | + | – | – | – | – | – | – | – | – | – | – |
STM32F410 | + | – | – | – | – | – | – | – | – | – | – |
STM32F411 | + | – | – | – | – | – | – | – | – | – | – |
STM32F412 | + | + | + | – | – | – | – | – | – | + | – |
STM32F413 | + | + | + | – | – | – | – | – | – | + | – |
STM32F405 | + | + | + | – | – | – | – | – | – | – | – |
STM32F407 | + | + | + | – | – | – | – | – | – | – | – |
STM32F446 | + | + | + | – | – | – | – | – | – | + | + |
STM32F427 | + | + | + | – | – | – | + | – | – | – | + |
STM32F437 | + | + | + | – | – | – | + | – | – | – | + |
STM32F429 | + | + | + | + | – | – | + | – | – | – | + |
STM32F439 | + | + | + | + | – | – | + | – | – | – | + |
STM32F469 | + | + | + | + | + | – | + | – | – | + | + |
STM32F479 | + | + | + | + | + | – | + | – | – | + | + |
STM32F7x2 | + | + | + | – | – | – | + | – | – | + | + |
STM32F7x3 | + | + | + | – | – | – | + | – | – | + | + |
STM32F7x5 | + | + | + | – | – | – | + | – | – | + | + |
STM32F7x6 | + | + | + | + | – | – | + | – | – | + | + |
STM32F7x7 | + | + | + | + | – | – | + | – | + | + | + |
STM32F7x8 | + | + | + | + | + | – | + | – | + | + | + |
STM32F7x9 | + | + | + | + | + | – | + | – | + | + | + |
STM32H743 | + | + | + | + | – | – | + | – | + | + | + |
STM32H753 | + | + | + | + | – | – | + | – | + | + | + |
При первом взгляде на таблицу 1 становится немного не по себе, ведь такое многообразие может запутать при выборе оптимального контролера. По этой причине с самого начала следует определиться с типом рабочего интерфейса, а уже потом выбирать подходящее семейство и контроллер.
Выбор оптимального микроконтроллера для TFT-дисплея
Предложенная выше сводная таблица 1 будет полезна, если тип и интерфейс дисплея еще не определены. Если же конкретный тип дисплея уже выбран, то для определения подходящего микроконтроллера следует обратиться к классификатору программы STM32CubeMX.
STM32CubeMX – бесплатная комплексная графическая среда от компании STMicroelectroncs, позволяющая выбирать оптимальный контроллер с помощью фильтров, настраивать периферию с помощью графических инструментов и автоматически генерировать код инициализации для различных компиляторов [3]. На этапе поиска оптимального контроллера наибольший интерес представляет встроенный в STM32CubeMX классификатор. Для этих же целей подойдет бесплатная утилита ST MCU Finder.
При старте каждого нового проекта программа STM32CubeMX предлагает выбрать подходящий контроллер с помощью целого ряда фильтров (по типу ядра, серии, корпусу, объему памяти и доступной периферии). При поиске микроконтроллера для графического приложения логично применить фильтр по доступным периферийным блокам. Например, если было принято решение использовать небольшой дисплей с RGB-интерфейсом – то для этого подойдут контроллеры с FSMC/FMC или с LTDC. Ставим галочки в соответствующих графах (рисунок 1). Программа автоматически сократит круг поиска.
Рис. 1. Поиск микроконтроллеров STM32 с подходящей периферией в STM32CubeMX
Очевидно, что требования к графическим устройствам сильно отличаются. Однако можно сделать несколько рекомендаций по выбору микроконтроллеров с учетом параметров конкретного дисплея (таблица 1):
- для TFT-дисплеев с SPI-интерфейсом может использоваться любой микроконтроллер STM32;
- для TFT-дисплеев с интерфейсами Motorola 6800 и Intel 8080 подойдут линейки с контроллером внешней памяти FSMC/FMC. В данном случае самым бюджетным вариантом будут микроконтроллеры ST32F100 или ST32F103 [4, 5];
- для TFT-дисплеев с RGB-интерфейсом и малым разрешением в ряде случаев допустимо использовать линейки с контроллером внешней памяти FSMC/FMC[5]. При необходимости простейшей обработки графики следует использовать микроконтроллеры с графическим ускорителем Chrom-ART;
- для TFT-дисплеев круглой формы с RGB-интерфейсом следует обратить внимание на линейки STM32L4+ со встроенным модулем оптимизации памяти Chrom-GRC [7];
- для TFT-дисплеев с 24-битным RGB-интерфейсом и высоким разрешением следует использовать старшие линейки с интегрированным графическим контроллером LTDC, начиная с STM32F429 [6];
- для TFT-дисплеев с DSI-интерфейсом подойдут линейки со встроенным DSI-хостом (DSIHOST) – STM32F469/479, STM32F7x8/x9 и STM32L4R9/S9.
Предложенные рекомендации являются общими и позволяют ограничить выбор рамками нескольких линеек. Для выбора конкретной модели требуется учет требований конкретного приложения.
Использование FSMC для работы с TFT-дисплеями
Контроллер внешней памяти FSMC (Flexible Static Memory Controller) позволяет подключать к STM32 не только различные типы внешней памяти SRAM, NOR Flash, NAND Flash, но и TFT-дисплеи. Исторически именно FSMC впервые позволил микроконтроллерам STM32 работать с TFT-дисплеями с достаточно большим разрешением. С помощью контроллера внешней памяти можно реализовывать различные интерфейсы, в том числе – Motorola 6800, Intel 8080, RGB.
Рассмотрим сначала работу FSMC с интерфейсами Motorola 6800 и Intel 8080. Для этого FSMC использует следующие сигналы [4]:
- FSMC [D0:D15] – используются в качестве 16/8-битной шины данных;
- FSMC NEx – используются для управления линией CS выбор чипа(х1…4);
- FSMC NOE – выполняет роль строба чтения RD(в Intel 8080);
- FSMC NWE – выполняет роль строба записи RW;
- FSMC Ax – адресные линии (х0…25), которые необходимы для выбора типа сообщения «команда/данные RS».С точки зрения программиста передача команды и данных равносильны записи в разные области памяти. Ниже об этом будет сказано подробнее.
Этих линий вполне хватает для работы в режиме Motorola 6800 и Intel 8080 (рисунок 2).
Рис. 2. Подключение микроконтроллеров STM32F10x к TFT-дисплеям с интерфейсами Motorola 6800 и Intel 8080
Информацию о расположении выводов контроллера FSMC можно взять из документации, но быстрее и проще будет воспользоваться программой STM32CubeMX. Предположим, что при старте проекта STM32CubeMX был выбран микроконтроллер STM32F103ZE (рисунок 1). Тогда для назначения выводов FSMC потребуется всего лишь несколько раз щелкнуть мышкой в окне «Pinout» (рисунок 3).
Рис. 3. Назначение выводов FSMC в STM32CubeMX
При настройке FSMC система автоматически резервирует выводы, что можно наблюдать в окне, расположенном справа на рисунке 3. На этом преимущества использования STM32CubeMX не заканчиваются. STM32CubeMX позволяет автоматически генерировать программный код инициализации. В данном случае нас интересует инициализация портов ввода-вывода и самого FSMC (листинги 1, 2).
В дальнейшем в шаблон, сгенерированный STM32CubeMX, пользователь вносит собственный код, относящийся к конкретному приложению.
В сообществе разработчиков нет общего мнения по вопросу использования STM32CubeMX: есть как сторонники, так и противники такого подхода. Тем не менее, нельзя отрицать того факта, что STM32CubeMX значительно упрощает и ускоряет разработку, так как в ряде случаев избавляет от необходимости досконально вычитывать руководство пользователя.
При работе с Motorola 6800 и Intel 8080 сигнал RS задает тип сообщения, поэтому для передачи команды на выводе RS необходимо установить логический ноль, а при передаче данных на RS должна присутствовать логическая единица. Так как сигнал RS использует адресную линию FSMC Ax, с точки зрения программиста это равносильно обмену с разными областями памяти. В листинге 3 для работы с дисплеем используется банк 1, поэтому для передачи команд необходимо обращаться по адресу 0x60000000, а для передачи данных – по адресу 0x60200000.
В качестве примера использования FSMC для работы с дисплеем можно привести отладочную плату STM3210B-EVAL (рисунок 4). Она построена на базе микроконтроллера STM32F103VBT6, который работает с дисплеем Ampire LCD со встроенным TFT-контроллером ILI9320. Разрешение экрана составляет 240×320. Для обмена используется 16-битный интерфейс Intel 8080. Для получения подробной информации стоит обратиться к соответствующим руководствам [4, 8].
Рис. 4. Внешний вид отладочной платы STM3210B-EVAL с TFT-дисплеем
FSMC может использоваться и для работы с RGB-дисплеями [5]. Однако эффективность такой работы невысока из-за различных ограничений – постоянной загрузки процессорного ядра, оптимальной разрядности цвета, составляющей всего 16 бит (RGB565), невысокой скорости. Поэтому такой вариант был актуален только до появления микроконтроллеров со встроенным TFT-контролером LTDC. Конечно, существуют модели, в которых нет LTDC, но присутствует Chrom-ART. В них нагрузка на ядро оказывается меньше.
Обзор встроенного TFT-контроллера (LTDC)
Для создания наиболее продвинутых графических приложений с максимальным разрешением экрана следует использовать встроенный TFT-контроллер (LTDC), который присутствует в старших линейках STM32: STM32L4R7, STM32L4S7, STM32L4R9, STM32L4S9, STM32F429/439, STM32F469/479, STM32F7x6, STM32F7x7, STM32F7x8, STM32F7x9, STM32H743, STM32H753 [6].
LTDC имеет следующие особенности:
- 24/16/8-битный RGB-интерфейс;
- разрешения до XGA 1024×768;
- два графических слоя с собственными буферами FIFO 64×32 бит;
- возможность программирования параметров каждого слоя;
- программирование размеров и положения отображаемых окон;
- поддержка 8 форматов цвета;
- встроенный конвертер форматов цвета;
- поддержка палитр с числом цветов до 256 (24-битных);
- возможность смешивания слоев для получения эффекта полупрозрачности (альфа-смешение);
- поддержка хромакея (Color keying);
- поддержка псевдослучайного дизеринга (2 бита);
- четыре вектора прерывания.
Характеристики TFT-контроллеров различных семейств незначительно различаются. Например, в случае с STM32H7 TFT-контроллер подключается к высокоскоростной шине AXI (рисунок 5), в то время как в остальных семействах он работает с шиной AHB. Рассмотрим структурную схему LTDC подробнее.
Рис. 5. Блок-схема TFT-контроллера в семействе STM32H7
Встроенный TFT-контроллер использует три источника тактирования:
- HCLK – для обмена данными по шине AXI или AHB;
- PCLK – для взаимодействия с внутренними регистрами TFT-контроллера;
- LCD_CLK – для формирования интерфейсных сигналов для связи с дисплеем.
Обмен данными между TFT-контроллером и шинами AXI (или AHB) осуществляется посредством FIFO-буферов 64×32 бит – по одному на каждый экранный слой.
LTDC поддерживает работу с двумя экранными слоями, каждый из которых имеет возможность независимой настройки параметров, например, размеров и положения окна отображения. Это позволяет без проблем создавать такие эффекты, как картинка в картинке.
Максимальная разрядность шины RGB для LTDC составляет 24 бита. Это обеспечивает высокую производительность и оптимальную поддержку 8 различных форматов цвета: ARGB8888, RGB888, RGB565, ARGB1555, ARGB4444, L8, AL44, AL88.
Еще одним полезным аппаратным блоком, входящим в состав LTDC, является микшер (Blending Unit). Он позволяет производить альфа-смешение изображений двух слоев между собой или с постоянным цветом заднего фона (рисунок 6). Если говорить простым языком, то это эффект полупрозрачности. Наличие аппаратного блока смешивания позволяет получать современную картинку без загрузки процессора.
Рис. 6. TFT-контроллер в STM32 имеет аппаратную поддержку смешивания слоев
Говоря о прозрачности, нельзя не упомянуть о том, что LTDC поддерживает чрезвычайно популярную технологию хромакея (Color keying). Она заключается в том, что один из цветов верхнего слоя «назначается» прозрачным, и вместо пикселей с таким цветом отображается нижний слой. На рисунке 7 показан конкретный пример, в котором зеленый цвет слоя Layer1 заменяется картинкой со слоя Layer2.
Рис. 7. Использование хромакея в STM32
Еще одним важным достоинством TFT-контроллеров в STM32 является наличие аппаратного дизеринга (2 бита). Он может применяться для имитации 24-битного цвета на 18-битном дисплее.
Чтобы подключить микроконтроллер STM32 к RGB-дисплею, можно либо самостоятельно изучить документацию, либо воспользоваться программой STM32CubeMX или взять за основу готовые проекты, например, отладочные платы. STM32CubeMX помогает быстро выполнить распиновку и настройку TFT-контроллера без значительных затрат времени (рисунок 8). Программа автоматически назначает выводы и генерирует код инициализации.
Рис. 8. Назначение выводов TFT-контроллера в STM32CubeMX
Если же за основу решено взять готовый проект, то хорошим вариантом будет использование отладочных наборов производства компании ST (таблица 2). При этом вместе с готовой схемотехникой разработчик получает и набор ПО для конкретного решения.
Таблица 2. Отладочные наборы STM32 с RGB-дисплеями [6]
Отладочный набор | Микро- контроллер | Параметры TFT | Встроенная память SRAM, кбайт | Внешняя SDRAM, бит | Внешняя SRAM, бит | ||||
---|---|---|---|---|---|---|---|---|---|
Интерфейс | Диагональ, дюйм | Разрешение, точек | Формат цвета | Сенсорный экран | |||||
32F429IDISCOVERY | STM32F429 | DPI | 2,4 | 240×320 | RGB666 | Резистивный | 256 | 16 | – |
STM32439I-EVAL2 | STM32F439 | DPI | 5,7 | 640×480 | RGB666 | Емкостной | 256 | 32 | 16 |
STM32429I-EVAL1 | STM32F429 | DPI | 4,3 | 480×272 | RGB888 | Резистивный | 256 | 32 | 16 |
32F469IDISCOVERY | STM32F469 | MIPI-DSI | 4 | 800×480 | RGB888 | Емкостной | 384 | 32 | – |
STM32469I-EVAL | STM32F469 | MIPI-DSI | 4 | 800×480 | RGB888 | Емкостной | 384 | 32 | 16 |
32F746GDISCOVERY | STM32F746 | DPI | 4,3 | 480×272 | RGB888 | Емкостной | 320 | 32 | – |
STM32746G-EVAL | STM32F746 | DPI | 5,7 | 640×480 | RGB666 | Емкостной | 320 | 32 | 16 |
STM32F769I-DISCO | STM32F769 | MIPI-DSI | 4 | 800×480 | RGB888 | Емкостной | 512 | 32 | – |
STM32F779I-EVAL | STM32F779 | MIPI-DSI | 4 | 800×480 | RGB888 | Емкостной | 512 | 32 | 16 |
STM32F769I-EVAL | STM32F769 | MIPI-DSI | 4 | 800×480 | RGB888 | Емкостной | 512 | 32 | 16 |
STM32H753I-EVAL | STM32H753I | DPI | 5,7 | 640×480 | RGB888 | Емкостной | 1000 | 32 | 16 |
STM32H743I-EVAL | STM32H743I | DPI | 5,7 | 640×480 | RGB888 | Емкостной | 1000 | 32 | 16 |
Одним из недостатков RGB-интерфейса является большое число сигнальных линий. Чтобы уменьшить число занятых выводов и сохранить высокое разрешение дисплея, следует рассмотреть возможность использования MIPI-DSI.
DSI хост (DSIHOST) в микроконтроллерах STM32
MIPI-DSI – универсальный интерфейс, позволяющий работать с TFT-дисплеями как при наличии встроенной графической памяти и контроллера, так и без них [7]. Если RGB-интерфейс требует большого числа сигнальных линий, то DSI позволяет обойтись несколькими дифференциальными парами (CLK и DATAn).
Стандарт MIPI-DSI подразумевает наличие двух рабочих режимов:
- режим команд (Command mode) используется для работы с дисплеями со встроенным контроллером и графической памятью. При этом DSI-хост, как и в случае DBI, производит передачу как данных, так и команд;
- видеорежим (Video mode) используется для работы с дисплеями без собственной памяти. В этом случае DSI-хост передает изображение в реальном времени (аналогично DPI).
В настоящий момент DSI-хост (DSIHOST) реализован в новых семействах STM32: STM32F469/479, STM32F7x8/x9 и STM32L4R9/S9.
Основная функция DSIHOST заключается в формировании DSI-пакетов из данных, которые поступают от TFT-контроллера LTDC или от других блоков посредством периферийной шины APB. Если данные поступают от LTDC, то DSI-хост может работать как в видеорежиме, так и в режиме команд (Adapted Command mode). Если же работа с DSI-хостом идет через APB, то доступен только режим команд.
Структурная схема DSIHOST в STM32 включает в себя несколько основных блоков (рисунок 9):
Рис. 9. Структурная схема DSI (DSIHOST) в STM32
- DSI-преобразователь (DSIWrapper) обеспечивает взаимодействие между TFT-контроллером LTDC и ядром DSI. Здесь выполняется преобразование цветов и полярностей сигналов, а также обработка команд в режиме Adapted Command mode. Кроме того, данный блок управляет системой ФАПЧ и некоторыми функциями D-PHY.
- ИнтерфейсLTDC принимает сообщения от LTDC и помещает их в FIFO-буфер. Эти данные используются для формирования видеопотока в видеорежиме и формирования команд memory_write_start and memory_write_continue в режиме Adapted Command mode.
- ПреобразовательAPB-Generic осуществляет обмен между периферийной шиной APB и ядром DSI. Для этого используется три FIFO-буфера: команд (Command FIFO), записи (Write payload FIFO), чтения (Read payload FIFO).
- Внутренние регистры необходимы для настройки DSI Host. Взаимодействие с ними идет по периферийной шине APB.
- Обработчик пакетов (PacketHandler) используется для формирования и обработки DSI-пакетов, контроля ошибок, подсчета контрольных сумм и так далее.
- ИнтерфейсD-PHY отвечает за взаимодействие ядра и D-PHY.
- Блок контроля ошибок следит за ошибками синхронизации, обеспечивает программный сброс и формирование ряда прерываний.
- Видеогенератор используется для формирования на дисплее вертикальных или горизонтальных прямоугольных полос без участия LTDC.
DSIHOST использует одну дифференциальную линию тактирования (CLK) и до двух линий данных (DATAn) (рисунок 10). Шина данных DATA0 является двунаправленной при работе в режиме команд, а в видеорежиме она может быть как двунаправленной, так и однонаправленной. Шина DATA1 используется только в видеорежиме. Пропускная способность каждой из шин данных составляет 500 Мбит/с (суммарно 1 Гбит/с).
DSIHOST поддерживает все форматы и разрядности, которые поддерживает и LTDC. Говоря о разрешении, стоит отметить, что пропускная способность DSIHOST позволяет создавать графические приложения с разрешением более 800×480.
Чтобы упростить себе жизнь, при подключении DSI-дисплея стоит воспользоваться автоматической генерацией кода в STM32CubeMX.
Из таблицы 2 хорошо видно, что практически в каждой отладочной плате используется внешняя память. Это является неизбежным злом, так как для хранения графики требуется очень много места, и встроенной памяти микроконтроллера хватает не всегда. К счастью микроконтроллеры STM32 имеют на борту множество интерфейсов для подключения внешней памяти.
Расширение ОЗУ в микроконтроллерах STM32
Если дисплей не имеет собственного графического ОЗУ, то для хранения текущих изображений необходимо использовать внешнюю память. Зная разрешение дисплея и формат цвета, несложно посчитать объем требуемой экранной памяти (таблица 3). В то же время максимальный объем встроенной ОЗУ для самых мощных микроконтроллеров STM32 достигает 1 Мбайт. Очевидно, что этого хватает далеко не для всех экранов.
Таблица 3. Объем графической памяти для различных разрешений
Разрешение | Число пикселей | Объем буфера ОЗУ, кбайт | |||
---|---|---|---|---|---|
8-бит | 16-бит | 24-бит | 32-бит | ||
QVGA (320×240) | 76800 | 75 | 150 | 225 | 300 |
HVGA (480×320) | 153600 | 150 | 300 | 450 | 600 |
VGA (640×480) | 307200 | 300 | 600 | 900 | 1200 |
WVGA (800×480) | 384000 | 375 | 750 | 1125 | 1500 |
SVGA (800×600) | 480000 | 469 | 938 | 1407 | 1875 |
XGA (1024×768) | 786432 | 768 | 1536 | 2304 | 3072 |
Как уже говорилось выше, для расширения объема ОЗУ микроконтроллеров STM32 используется встроенный контроллер внешней памяти FSMC или FMC. FSMC-контроллер работает только со статическим ОЗУ. FMC-контроллер присутствует в старших линейках микроконтроллеров и способен работать также и с SDRAM.
FMC-контроллер топовых семейств STM32 включает в себя три полноценных контроллера для следующих типов памяти: NOR/PSRAM, NAND, Synchronous DRAM (SDRAM/Mobile LPSDR SDRAM) (рисунок 10).
Рис. 10. Контроллер внешней памяти FMC в STM32H7
Для подключения различных типов памяти используются различные наборы сигналов, при этом выводы шины адреса и шины данных оказываются общими. Максимальная разрядность шины адреса составляет 26 бит, а шины данных – 32 бита.
Ключевыми особенностями FMC-контроллера семейства STM32H7 являются:
- поддержкаразличныхтиповпамяти (SRAM, NOR Flash /OneNAND Flash, PSRAM, NAND Flash, SDRAM (SDRAM/Mobile LPSDR SDRAM);
- программируемые тайминги для синхронного и асинхронного обмена;
- 8-/16-/ 32-битная шина данных;
- до четырех банков памяти;
- встроенный FIFO-буфер для записи 16×32-бит;
- FIFO-буфер 6×64-бит для SDRAM.
С точки зрения построения графических приложений именно SDRAM является оптимальным выбором в качестве экранного ОЗУ. При этом чем больше разрядность и скорость обмена – тем выше будет качество и плавность графического интерфейса.
Стоит отметить, что для оптимальной работы с FMC/FSMC-контроллером логично использовать контроллер прямого доступа к памяти DMA, чтобы разгрузить процессор. Речь идет как о DMA общего назначения, так и о специализированном графическом ускорителе Chrom-ART(DMA2D).
Контроллер QSPI-памяти в микроконтроллерах STM32
Если в качестве экранной памяти используется внутреннее или внешнее ОЗУ, то для хранения изображений (битмапов) используют Flash. Так же как и в случае с ОЗУ, встроенной Flash-памяти микроконтроллера хватает далеко не всегда. Наиболее продвинутые контроллеры STM32 имеют до 2 Мбайт Flash на борту. Если этого не достаточно, то изображения можно хранить на карте памяти, например, microSD, и считывать их по интерфейсу SDIO или воспользоваться контроллером внешней памяти Quad-SPI [8].
Quad-SPI – контроллер внешней памяти SPI-Flash, в том числе DUAL и QUAD SPI-Flash (рисунок 11). Если у обычной SPI-Flash есть только один канал для передачи данных, то у микросхем DUAL/QUAD SPI-Flash имеется две/четыре линии данных. Увеличение числа линий позволяет значительно повысить скорость обмена.
Рис. 11. Структурная схема QUADSPI и подключение внешней Flash-памяти
В простейшем случае Quad-SPI-контроллер способен работать с обычной одноканальной SPI-Flash, но для получения максимальной скорости обмена следует использовать микросхемы QUAD SPI-Flash. При этом допустимо подключение одной (режим Single Flash Mode) или двух (режим Dual Flash Mode) параллельных микросхем.
В режиме Single Flash Mode память подключается с использованием шести линий: CLK, BK_IO [3…0], BK_CS. В таком случае за один такт возможна передача до четырех бит информации, если данные защелкиваются только по фронту или только по срезу (Single Data Rate Mode). Если производить считывание данных и по фронту, и по срезу, то за один такт можно передавать до 8 бит (Double Data Rate Mode).
В режиме Dual Flash Mode используются две микросхемы Flash. При этом они имеют общие линии тактирования CLK и выбора кристалла BK_CS, а линии данных разделены. В таком случае скорость обмена составляет 8/16 битов за такт (Double Data Rate Mode).
Quad-SPI может работать в трех режимах:
- непрямой обмен (indirectmode) – работа вручную с регистрами Quad-SPI;
- обмен по прерыванию (statuspollingmode) – периодический опрос статусного регистра внешней Flash;
- отображение внешней Flashна адресное пространство контроллера (memory-mappedmode).
Последний режим является предпочтительным, так как позволяет автоматизировать обмен с внешней Flash за счет DMA, в том числе – Chrom-ART.
Графический ускоритель Chrom-ART
Самым узким местом при работе с графикой остается пересылка данных. Поэтому, говоря о графических возможностях STM32, нельзя не упомянуть об ускорителе Chrom-ART.
Ускоритель Chrom-ART (DMA2D) представляет собой контроллер прямого доступа к памяти, созданный специально для работы с графическими изображениями [9]. Он способен не только производить пересылку больших объемов данных без участия процессорного ядра, но и выполнять дополнительные потоковые преобразования пересылаемых изображений:
- заливка исходного изображения (или его части) заданным цветом;
- копирование исходного изображения (или его части) в заданную область конечного изображения;
- копирование исходного изображения (или его части) в заданную область конечного изображения с дополнительным преобразованием формата цвета пикселей;
- смешивание изображений (или их частей) с одинаковыми или различными форматами цветов пикселей и помещение в заданную область конечного изображения с дополнительным преобразованием формата цвета пикселей.
DMA2D является мастером на шине AHB (AXI в случае STM32H7) и способен выполнять следующие виды обмена данными между различными источниками: регистр-память, память-память, память-память с преобразованием формата цвета, память-память со смешиванием и с преобразованием формата цвета. Дополнительную гибкость при построении графических приложений дает возможность использования Chrom-ART не только с внутренней, но и с внешней памятью различных типов.
Дополнительные возможности новых семейств STM32
Компания STMicroelectronics не останавливается на достигнутом и продолжает развивать графические возможности своих микроконтроллеров. Среди наиболее значимых новинок можно отметить Chrom-GRC и JPEG-кодек.
В семействах STM32L4 появился блок оптимизации памяти Chrom-GRC. Он позволяет эффективно размещать графические данные при работе с дисплеями округлой формы [10].
Если видимая область представляет собой прямоугольник, то графические блоки (контроллер LTDC, DMA2D) оптимально используют память. Однако если речь идет о круглых дисплеях, то возникают «слепые» участки, которые никогда не будут отображаться. Chrom-GRC устраняет эти пробелы, позволяя экономить до 20% памяти.
JPEG-кодек – новый блок, появившийся в семействах STM32F7 и STM32H7. В настоящий момент JPEG является наиболее популярным форматом хранения изображений. Наличие аппаратного кодека значительно упрощает жизнь программистам и снижает загрузку процессора при работе с изображениями. Более того, данный кодек позволяет воспроизводить и захватывать видео в формате MJPEG практически без участия процессорного ядра. В сети можно найти примеры уже готовых библиотек.
Заключение
Микроконтроллеры STM32 производства компании STMicroelectronics поддерживают работу практически со всеми популярными интерфейсами TFT-панелей, в том числе – SPI, Motorola 6800, Intel 8080, Parallel RGB, DSI.
Пользователям STM32 предлагается широкий выбор периферийных блоков для взаимодействия с графическими дисплеями:
- SPI-интерфейсы для работы с SPI-дисплеями;
- контроллер внешней памяти FSMC для реализации интерфейсов Motorola 6800, Intel 8080;
- LTDC – специализированный TFT-контроллер для работы с RGB-дисплеями;
- MIPI-DSI Host – специализированный интерфейс для работы DSI-дисплеями.
В состав многих микроконтроллеров STM32 входят и другие вспомогательные блоки, созданные для оптимизации работы с графикой: графический ускоритель Chrom-ART, блок оптимизации хранения графических данных Chrom-GRC, JPEG-кодек.
Современные графические системы требуют значительных объемов памяти. ОЗУ микроконтроллеров STM32 может быть расширено за счет использования контроллера внешней памяти FSMC/FMC. Для увеличения объема Flash применяется скоростной контроллер Quad-SPI.