Конвертер из 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
Спасибо за внимание!