Хабрахабр

Оптический удлинитель HDMI. 300 метров

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

Отказ от обратного канала (передача данных по одному волоконно-оптическому кабелю). Разработка волоконно-оптического HDMI удлинителя на 300 метров. Лично мне удавалось передавать сигнал по HDMI кабелю на расстояние до 10 метров (больше просто не требовалось). Клонирование EDID с монитора.
Стандарт HDMI широко применяется во многих сферах, где требуется вывод изображения на экран. Основные минусы в случае протяжки такого кабеля – это его диаметр и размер, непосредственно, разъемов. Думаю, что без потери качества, можно передать картинку на расстояние до 30-40м. К сожалению, не все объекты, по тем или иным причинам, разрешают использование беспроводных сетей. Самый простой способ исключить кабель – это использовать беспроводной удлинитель, думаю получится достигнуть 100-150 метров, но точно не скажу. А если нужно еще дальше?

1.
Рис. Разъем HDMI кабеля и оптики

Первый тезис – это диаметр оптического кабеля (в моем случае, это 2-3мм) и диаметр коннектора волоконно-оптического кабеля. Конечно, оптика, наверное, не лучший вариант для передачи видео, но при использовании стационарных ПК и мониторов – очень даже ничего. Забегая вперед, скажу, что тесты проводились на кабеле 300м, диаметр (внешний) – 3мм. Второе – это, безусловно, расстояние.

Элементная база

При проработке элементной базы, выбор, неожиданно, пал на китайскую компанию SiFotonics, которая специализируется на такого рода оборудовании. Для начала мы изучили их продукцию и получили две отладки, которые соединили трехсотметровым оптическим кабелем и убедились, что все работает без нареканий. В их ассортименте есть и SFP оптические приемники/передатчики (ROSA/TOSA), сериалайзеры/десериалайзеры, драйверы и т.д.

Принцип работы

Для соединения и работы устройств необходимо подключать два оптических кабеля и подать питания (кабель microUSB). Если приводить аналогию с обычным кабелем HDMI, в котором для обмена таблицей EDID есть I2C, то тут все тоже самое – один канал для передачи данных, второй – для передачи EDID от монитора к видеокарте. Данные передаются со скоростью 10Gbps. Отрывая кабель обратного канала, картинка неизменно пропадает. В этот момент закрались некоторые сомнения, а не передаются ли какие-нибудь служебные данные или метки синхронизации в обратном канале, или может устройства мониторят подключения друг к другу…

2.
Рис. Состав модулей

С разъемом питания «вбок», чтобы было удобнее разводить шины питания в полигонах. Первая итерация платы, она же макет, получилась размерами 20Х45мм. Чем плоха данная конфигурация печатной платы, я напишу позже. Итого получилось 4 слоя. Хитрые разработчики на отладке использовали пассив размерами 0201, что мне делать категорически не хотелось, поэтому я использовал 0402 и под чипом каша из конденсаторов.

3.
Рис. 3D модель макета платы модуля источника

Еще на этапе проработки мы решили не ввязываться в доработку китайского софта (хотя, нам любезно были предоставлены все исходники), так как, во-первых, это куча строк непонятного кода в непонятном компиляторе, во-вторых, SiFotonics может поставлять прошитые чипы, что очень удобно, так как прошивать устройства в рамках производства весьма не просто. Как я писал выше, моей задачей было не только сделать пару с рабочим расстоянием 300 метров, но еще и убрать обратный канал оптики. Чтобы читатель не подумал, что я преувеличиваю, говоря о сложностях, я приведу фото стенда для программирования.

4.
Рис. Стенд для программирования и диагностики

Сразу оговорюсь, что на качество работы это не повлияло. Да-да, как вы уже, наверное, догадались, контакты JTAG для программирования выведены на контакты microUSB, и на некоторые контакты HDMI, которые раньше были GND. Чтобы запрограммировать чип, нужно сначала собрать одну схему стенда и перевести микросхему в режим программирования с помощью специализированного ПО. Итак, стенд. После этого она автоматически переходит в рабочий режим.
В общем, как мне кажется, это не целесообразно даже на 1000 штуках. Далее необходимо собрать другую схему и с помощью другого ПО прошить плату.

Для хранения EDID таблиц нам необходима EEPROM, и понадобиться налету менять ее адрес. Вернемся к обратному каналу. Для ее программирования использую микроконтроллер STM32F031G4U6, тоже в самом маленьком корпусе, который можно найти в свободном доступе — UFQFPN-28. Взял N24C02UDTG в миниатюрном корпусе US-8. И вот что у меня получилось: Также я взял свитч питания TPS27081ADDCR.

5.
Рис. Схема реализации клонирования EDID

Эта схема реализуется на передающем модуле (тот, что подключается к ПК). Идея в следующем. По умолчанию адрес EEPROM на нашем модуле не должен совпадать с адресом EEPROM в мониторе (во время чтения), то есть он может быть любым другим, я, например, сделал ножку A0 управляемой. Для клонирования EDID монитора устройство подключается к монитору. На шине i2c висят два EEPROM с одинаковыми адресами, но это не критично, так как мы с ними еще не работаем. В момент подключения к монитору питание на EEPROM подается, а нога А0 подтянута к логическому «0» резистором. Кратковременное нажатие кнопки приводит к смене адреса и разрешению микроконтроллеру начинать чтение/запись EDID. В моей схеме есть еще кнопка и светодиод индикации питания/прошивки EDID/ошибок. Мигаем 3 раза светодиодом и отключаем питание EEPROM. Ресетим EEPROM питанием (на всякий случай) когда получили сигнал от кнопки, читаем EDID монитора и сразу пишем его в нашу микросхему. То есть мигать начинаем тогда, когда уже можно отпускать. Чтение/запись происходит мгновенно, поэтому для мигания сделана принудительная задержка, чтобы пользователь понимал, что что-то происходит. Если что-то не так, то не зажигаем светодиод.

Задача решена. Далее подключаем модуль к ПК и сразу видим новый монитор в настройках.

Для программирования микроконтроллера вывел SWD шину.

6.
Рис. Обратная сторона платы модуля

Особенности

После всей проделанной работы с клонированием EDID я убрал обратный оптический канал и все работало без нареканий. При данных опытах питание происходило от USB ПК. Во время загрузки компьютер (во всяком случае мой) на мгновение выключает питание USB и картинка с BIOS мигает на мониторе – это не критично. Затем я выпаял модули обратного канала с устройств и после этого мигания картинка перестала восстанавливаться. И происходило это именно из-за отсутствия модуля TOSA на мониторном устройстве. Я попытался эмулировать наличие лазера, но все безуспешно. Я почти уверен, что эту проблему можно решить прошивкой, но мы решили в нее не лезть. Чудо произошло, когда я подключил оба устройства (приемник и передатчик) к блокам питания (как, кстати, было указано в ТЗ). Картинка перестала моргать, а соответственно и пропадать. Если во время работы передергивать питания устройств, то картинка восстанавливается без проблем.

7.
Рис. Схема включения передающего модуля (лазера)

Эта реализация была изначально неудобна и подходила только для макета. Теперь вернемся к конфигурации печатной платы и разъему питания «вбок». В противном случае мне мешал разъем питания и плата была очень широкой. В релизном устройстве я уменьшил ширину платы до 16,3мм и вынес разъем питания на место оптического модуля обратного канала – это позволит включить несколько устройств в одну видеокарту.

8.
Рис. Узкие платы приемника и передатчика

Полигоны питания были переделаны полностью для оптимизации под эти размеры и переноса разъема microUSB. Тут, конечно, было много переразводки и перестановок компонентов. Корпус фрезеруется из алюминия и является теплоотводом, для процессора и драйвера. Как можно догадаться, корпуса для обоих устройств идентичны, поэтому конфигурация платы, разъемы и оптический модуль расположены одинаково. На внутренней стороне фрезеруются выступы под эти компоненты, поэтому они тоже располагаются одинаково.

Заключение

На данный момент спаяно четыре пары устройств, проводятся тесты на длинном кабеле на разных мониторах и ТВ. Нареканий по работе нет никаких. Проверяем только на fullHD и ниже.

Спасибо за внимание и до скорых встреч!

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть