Конвертер из HDMI/DP++ в MIPI DSI

Доброго времени суток, Хабр!

hr1504t7c5uz_xfuwmvtrwpzsas.jpeg

Неоднократно мне тут задавали вопросы по конвертеру из 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В. Дифференциальные пары на схеме определены и объединены в соответствующие классы.

image-loader.svg

Рис. 1. Схема включения SN75DP139RSBR

С Toshiba все несколько сложнее. Во-первых, она в корпусе P-VFBGA80, во-вторых, для ее питания необходимо несколько напряжений, в-третьих, ей нужен внешний тактовый генератор на 48МГц, и, напоследок, даташит оставляет желать лучшего.

image-loader.svg

Рис. 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.).

image-loader.svg

Рис. 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.).

image-loader.svg

Рис. 4. Схема драйвера подсветки матрицы TPS61161DRV

Питание 5В и 3,3В сделал на двух DC/DC: ST1S10PHR (возможна замена на ST1S41PHR) и AP3418KTR, соответственно. Взял с большим запасом по току, но, опять-таки, они есть у нас на складе и их можно относительно просто купить.

Печатная плата
Со схемой закончили, теперь трассировка. Плату делал на 4-х слоях. Второй GND, третий POWER. Думаю, что можно было постараться и развести на 2-х слоях, но не вижу смысла в такой экономии, так как можно потерять в качестве.

image-loader.svg

Рис. 5. Трассировка MIPI DSI

Пришлось немного постараться с трассировкой DSI к разъему матрицы. Уж очень неудобное оказалось расположение сигналов на дисплее, а очень хотелось сделать по стандартному классу с переходными отверстиями 0,3/0,6. Контроль длин решил не делать, так как расстояние минимальное, а разность между длинами проводников не велика. Хотя можно было и сделать — место позволяет.

Трассировка SN75DP139RSBR без переходных отверстий. Для корректной разводки конденсаторы по питанию обеих микросхем были установлены на bottom.

image-loader.svg

Рис. 6. Трассировка SN75DP139RSBR

Хотел (для тестов) вывести оба MIPI DSI с TC358870XBG, но, к сожалению, не хватило места на плате, чтобы корректно все сделать. Получалось громоздко и второй DSI разъем на bottom.

Теперь немного о документации. Первое что насторожило, это отсутствие информации о режиме Single link DSI в Тошибе. Он заявлен, но о том, как его использовать и какой канал для этого задействуется в явном виде нигде не сказано (понятно, что, скорее всего, можно выбрать либо любой, либо нулевой, но все-таки, а вдруг только первый…). Методом проб и ошибок, а также копанием документации, удалось найти регистр, который устанавливает данную конфигурацию, но это было совсем не очевидно.

В даташите на матрицу AUO отсутствует описание регистров для конфигурации MIPI DSI. Чтобы дисплей включился, его нужно проинициализировать по MIPI, записав с десяток команд. Делать это нужно каждый раз после подачи питания на матрицу. Запросили расширенную документацию на дисплей и дело пошло быстрее. Изначально дисплей имеет портретную ориентацию (1200×1920), но в настройках монитора на ПК его можно перевести в альбомный режим работы.

1uv6kcvsv3y4zruzel3fqtqsvgk.jpeg

Рис. 7. Изображение на матрице G080UAN02.1

Спасибо за внимание!

© Habrahabr.ru