Разработка скалера LVDS с двумя интерфейсами DisplayPort
Доброго времени суток, Хабр!
Описание проекта платы скалера, разработанного на чипе компании Realtek — RTD2662, для двухканальной матрицы. Кому тема интересна, добро пожаловать под кат.
Меня всегда привлекала тематика вывода изображения на матрицы. Ранее мной была разработана плата скалера на чипе TSUMV59 (совместима с TSUMV29), очень интересный экземпляр от компании MStar. Думаю, что я напишу отдельную статью на эту тему. Казалось бы, все хорошо в этом чипе, но чего-то не хватало, а именно возможности писать свой софт для вывода экранного меню и обработки GPIO. Все прошивки распространяются в бинарном виде и прошиваются через USB, а исходников найти не удалось (если кто-то что-то знает/слышал, прошу написать, так как тема очень интересна). До определенного времени для каких-то своих нужд этого вполне хватало. Были моменты, когда было не подобрать прошивку для какой-то конкретной матрицы, например с нестандартным соотношением сторон, но это все мелочи, пока не появился заказ на разработку устройства, в котором должно было быть строго определенное меню, логотип, и логика работы устройства в целом. Тогда мы начали думать как быть и в какую сторону идти. Основной проблемой было отсутствие времени, нужно было в кротчайшие сроки получить первую партию устройств — 100шт. Второе — это наличие двух интерфейсов DisplayPort на борту. Третье — малое количество устройств, что не позволяет работать/получать документацию и семплы от производителей/дистрибьютеров чипов.
Перечислю основные программные/аппаратные моменты, которые требовалось поддержать:
— DisplayPort — 2 шт;
— Ethernet 10/100 — 1 шт;
— Двухканальный LVDS для 32» матрицы — 1 шт;
— Поддержка емкостной клавиатуры из 4-х кнопок — 1 шт;
— Датчик температуры на плате — 1 шт;
— WEB-интрефейс;
— OS Linux;
— Внешнее питание 24В.
Теперь немного обо всем и по порядку.
DisplayPort
Тут казалось все относительно просто, нужно выбрать чип с входным HDMI, ставить переключатель и преобразователи из DisplayPort в HDMI. Этот же чип должен иметь выход двухканального LVDS на матрицу и поддерживать FullHD. Также, желательно, чтобы он имел на борту RMII (Ethernet) и возможность отрисовки меню поверх изображения. И тут начались проблемы. Ничего похожего, чтобы можно было быстро купить, отмакетировать и запустить партию, найти не удалось.
В качестве хобби, я занимаюсь ремонтом техники и дело тут не в доходе, а в приобретаемых навыках, очень полезных при разработке своих проектов и черпании идей и технологий. Кто разбирал оригинальную технику Sony и Panasonic, тот поймет. Особенном меня привлекают аудио/видео/автомобильные устройства. Качество прокладки полигонов (даже на верхних слоях), аналоговые земли и питания, взаимное расположение питателей на плате, трассировка оперативки, ВЧ … голова кругом от того, как красиво и продуманно все сделано (конечно, так бывает не всегда).
Ладно, о чем это я? Так вот, если вспомнить что обычно ставят в бюджетные телевизоры, первое что пришло на ум — это TSUMV29/TSUMV59, но как помним они нам не подходят. На чем еще делают телевизоры и мониторы, но что можно штучно купить? Коллега предложил Realtek, что вроде даже к нему есть исходники, что очень упростит задачу. Оказалось, что исходники действительно есть для Keil, для чипа RTD2662. Чип не самый новый, но имеет два HDMI входа и поддержку FullHD.
Рис. 1. RTD2662
Схема включения как во всех шасси для ТВ. Чип питается двумя напряжениями — 3,3В и 1,8В. Полноценного даташита найти так и не удалось, да и не нужно было. Добавить нужно было только конвертеры из DisplayPort. После непродолжительных поисков был выбран преобразователь от Texas Instruments — SN75DP139. Рекомендую в разработках, хороший чип. Микросхемы расположены на bottom платы (сделать так пришлось, чтобы избежать перекрестия линий данных, возможно буду пробовать переразводить на одной стороне).
Рис. 2. Схема включения SN75DP139
Схема включения получилась такая. С интерфейсом DisplayPort связался впервые и для меня стало неким откровением что вход и выход данного интерфейса имеют разную распиновку, то есть на разъеме ПК она одна, на мониторе — другая. Хотя какая-то логика в этом и есть.
Прошивка Realtek хранится в отдельной SPIFlash.
Ethernet 10/100
Ethernet нужен для нескольких вещей: мониторинг устройства, конфигурирование и обновление; поэтому физики 10/100 вполне достаточно. Ставил LAN8742AI от Microchip, использовал ее впервые, а выбрал именно ее, так как заказчику нужна была некая функция «Wake on LAN», до этого такой надобности не было. Если в двух словах, то поддержка WoL позволяет пробуждать устройство по сети Ethernet.
Рис. 3. Ethernet 10/100
Физика почти не требует обвязки и проста в трассировке. Работает стабильно, ни одного отваливания сети не было.
LVDS
Два канала необходимы для подключения матрицы AUO 32». Разъем и распиновку использовал стандартные. Напряжение питания 12В, делал на DC/DC TPS54560DDAR — это отличный питатель на 5А от TI. Подсветка матрицы 24В, брал от входного напряжения. Матрица имеет встроенный драйвер подсветки с возможностью регулировки и выключения. Плата сделана на 4-х слоях, так что проблем с трассировкой LVSD, HDMI и DisplayPort не было.
Рис. 4. Трассировка LVDS
Как видно тут все напрямую, небольшое расхождение длин совершенно не влияет на качество изображения.
KEY
Кнопки реализованы на микросхеме SX8634 от Semtech Corporation — это несколько неоднозначный по своей работе чип. Программистам пришлось перепиливать весь драйвер чтобы получить ожидаемый результат. Получилось как-то так: есть 4 кнопки для перехода по меню, они сенсорные (емкостные через стекло) с подсветкой RGB светодиодами изнутри через отверстия в плате. Постоянно светится только нижняя кнопка, она же переход в спящий режим и обратно (со сменой свечения). При поднесении руки на 5 см подсвечиваются остальные кнопки и выскакивает меню напротив них. Убираем руку, через 3с меню пропадает, кнопки гаснут. Выглядит интересно.
Рис. 5. Плата сенсорных кнопок
Верхняя часть платы (top) прилегает к стеклу, поэтому на ней нет компонентов, все они располагаются на bottom. Сложность в настройке и калибровке была обусловлена шириной платы, она всего 12 мм. Если кому-то скучно жить, могут использовать данную микросхему в своих проектах.
TEMP
Температура внутри корпуса измеряется с помощью термодатчика LM75AD от NXP по шине I2C. Поставлен был так как легко доставаемый и лежит на складах в больших объемах.
WEB
Web-интерфейс и сам проект реализованы на основе молодого движка рожденного независимой командой 11-parts для проектов на базе ОС Linux, включающий в себя множество готовых программных блоков, которые востребованы почти во всех проектах.
Если еще проще — это рамочный проект, с продвинутым функционалом, который постоянно улучшается и наращивает функционал. Из основных блоков можно отметить сетевой менеджер, динамический WEB интерфейс, обновление и сборщик проектов. На базе движка, можно реализовать различные устройства начиная от mp3 плеера, заканчивая многопортовым 10Gbit SIP сервером., а это как раз то, что нам было необходимо в данном проекте.
Из web-интерфейса можно не только контролировать параметры панели, но и изменять настройки, например, яркость, контрастность, четкость изображения, отслеживать к какому из портов подключен ПК и какой в данный момент из них активен, переключаться между ними.
Также в данном проекте реализована поддержка SNMP 1,2 и 3 версии с поддержкой SET, GET команд и отправкой трапов по интервалу или по событию. Т.е. информацию о любом параметре, например яркость/контрастность можно передавать на сервер по протоколу SNMP, при нажатии на кнопку изменения параметра или, например, раз в 10 сек. Выключить дисплей или поменять параметр можно удаленно с помощью SNMP SET команды. SNMP так же входит в состав движка.
iMX6ULL
Так как чип Realtek не имеет на борту Ethernet, в данном проекте установлен процессор iMX6ULL от NXP, на котором крутится OS Linux и выполняется основная логика работы. iMX и Realtek связаны между собой по UART и обмениваются между собой командами. Для быстрых событий есть несколько GPIO.
Рис. 6. iMX7ULL
Вся информация хранится в NAND, u-boot загружается из SPIFlash. Одна микросхема оперативной памяти и ничего лишнего. SD карта выведена для обновления ПО (это помимо возможности это делать из web).
POWER
Вторичное питание 5В реализовано на таком же DC/DC как и для питания матрицы — TPS54560DDAR. Питания 1,8В и 1,35В на AP3418 от Diodes, а 3,3В на ST1S10PHR от ST.
Рис. 7. DC/DC
Микросхемы DC/DC были выбраны с большим запасом, так как у матрицы большие пиковые токи по питанию и по подсветке, а так как была только одна итерация, рисковать очень не хотелось.
Все питания разведены полигонами в отдельном слое, за исключением питания матрицы, так как очень не хотелось резать основные питания этим проводником. Скрины трассировки приводить бесполезно, разве что кому-то будет интересен какой-либо интерфейс. По полигонам питания и земель хочу также уделить отдельную статью, например, в этом проекте суммарно 27 полигонов, в моем новом проекте на iMX7 из будет порядка 100, и в рамках этой статьи это просто не поместится.
Если еще немного углубиться в логику работы платы. iMX работает с Ethernet и кнопками передней панели. Он связан с Realtek, которые забирает изображение с активного DisplayPorta и выдает на матрицу LVDS. Команды от кнопок, SNMP и web летят в Realtek, которые в свою очередь реагирует на них и меняет параметры дисплея, выводит меню и т.д.
В итоге получился довольно интересный проект за короткие сроки. Наверное, он содержит в себе слишком много модулей, но на момент разработки, по моему мнению, это было оптимальным решением в соответствии со сроками, затратами и рисками.
Спасибо за внимание!