Edid монитора не работает

Обновлено: 04.05.2024

Мой телевизор («старая» модель LG 32LG5000) никогда не работал в Linux. Каждый раз, когда я подключал его через HDMI-порт, ядро сообщало мне ошибку:

и полностью игнорировало его.

Эта проблема меня не сильно-то и беспокоила, т.к. я не часто им пользовался, да и VGA-порт работал, хоть и с максимальным разрешением 1360×768. Однако сегодня, когда я решил посмотреть фильм, качество вывода через VGA было невероятно хреновым, и я решил с этим покончить.

Анализируем EDID

Структура EDID имеет версии от v1.0 до v1.4 размером в 128 байт, каждая последующая версия обратно совместима с предыдущей. Структура EDID v2.0 была размером 256 байт, однако позже была объявлена устаревшей и на замену ей пришла v1.3.

Похоже, EDID 2.0 был объявлен устаревшим где-то в 2000. Довольно забавно, что ТВ 2008 года использовал именно эту версию.

  1. Пропатчить ядро и убрать проверку версии. Это некрасиво, да и придется, как минимум, drm-модуль пересобирать с каждым обновлением ядра.
  2. Пропатчить EDID и заставить либо ядро, либо ТВ использовать его.

Получили EDID из i2c bus 3. Теперь посмотрим, что же там.

Убеждаемся, что это правильный EDID, по идентификатору модели. Видим EDID version 2.0, которую сообщает parse-edid, на что собственно ядро и ругается. Также можем видеть, что parse-edid нашел блок с таймингами и разрешениями, которые ТВ поддерживает. Теперь взглянем на RAW-данные:

EDID состоит из 2 секций, каждая размером по 128 байт (мы же помним, что это EDID 1.3, некорректно названый 2.0).
Первая секция основная, а вторая — дополнительная, EIA/CEA-861 extension block, которая содержит информацию о разрешениях и таймингах. Используя статью в Wikipedia понимаем, что байты по смещению 0x12 и 0x13 содержат версию EDID (0x02 и 0x00 в нашем случае), а смещение 0xf7f содержит контрольную сумму (0xf9).

Патчим EDID наживую

По идее, если мы заменим значения по смещению 0x12 и 0x13 на 0x01 и 0x03 соответственно и подправим контрольную сумму, мы получим правильный EDID. Это легко можно сделать в HEX-редакторе; контрольную сумму установим в 0x7f (сумма всех 128 байт по модулю 256 должна быть равна нулю).
Попробуем распарсить измененный EDID:


Теперь, когда у нас есть правильный EDID, нам нужно как-то попробовать записать его в телевизор (да и, похоже, есть люди, у которых это получалось). В Debian есть пакет i2c-tools, в котором есть утилиты i2cget для чтения и i2cset для записи в I²C-устройство. Вспомним, что get-edid читал из шины 3, а EDID находится по адресу 0x50, так что давайте попробуем прочитать наши байты напрямую:

Получилось! Невзирая на риск брикнуть (и так бесполезный) HDMI-порт, я решил перезаписать байты напрямую.

Внимание! Повторяйте это действие на свой страх и риск и только если понимаете возможные последствия. Вас предупреждали.

Никаких ошибок нет. Проверим, получилось ли:

Ага! У меня получилось выставить разрешение 1080p через xrandr. Похоже, изменение постоянное, так что не придется каждый раз перезаписывать байты при каждом выключении ТВ.

От переводчика: на этом ТВ матрица с разрешением 1366×768, поэтому не совсем понятно, откуда такое желание выставить 1920×1080, оно все равно через скейлер пойдет.

Предоложение того, что проблема с EDID появилось час назад когда я о нём вычитал, а всё что описано ниже было до этого.

Вчера приобрёл новый GPU. Драйвера ставил криво словил пару ошибок, но с ошибками всё работало. После успешного тестирования отправил компьютер в режим гибернации (на сторой gpu gtx 1050 делал так всегда).
С утра включив заметил, что:
1.gpu не обнаружается в bios, а после того как попадаю в OS инстантно разрешение 640х480;
2.После ночки в гибернации мой ноутбук больше не видит монитор, вообще никаких признаков;
3.Если подключить GTX 1050ti вместо новой 5700xt то всё работает без изъянов;
4.Подключив видеокарту к другом компьютеру через DP и HDMI (поочерёдно) заработало всё отлично;
5.Подключив другой монитор DELL P2417H всё запустилось без проблем;
6.Меня смущает щелчёк в БП, после которого все RGB подсветки в корпусе мигают максимально яркостью, где-то читал, что так нужно, но всё же выглядит стрёмно.

До казуса проводил слабый оверклок CPU и более ощутимый RAM 3200 при 1.4В, небыло перегревов кроме VRM и памяти до 80 после чего подкрутил охлаждение и стало 65-73 в макс нагрузке, все остальные компоненты ниже 65, замеры проводил через Msi 2. Afterburner.

My pc config:
- PSU: be quiet! Straight Power 11 750W;
- MB: MSI B350 PC Mate
- CPU: AMD Ryzen 5 1600 3.2GHz/16MB;
- RAM: 2 x HyperX DDR-4 2666 8gb;
- GPU: PowerColor PCI-Ex Radeon RX 5700 XT Red Devil (instead old MSI PCI-Ex GeForce GTX 1050 Ti GAMING X);
- Monitor: ASUS VS239HR(hdmi only);
- SSD: Samsung 970 Evo series 250GB M.2 PCIe 3.0;
- HD: Seagate Desktop HDD 7200.14 1TB 7200rpm 64MB.

Несколько часов назад я грешил на видеокарту, но она работает нормально! Но я не верю в такие совпадения (что монитору стало плохо потому что ему уже 8 лет). Мне очень интересно узнать чем могла быть вызвана такая проблема и может ли другой монитор так пострадать, почему есть разница в детекте монитора между 1050ti,5700xt,intel graphics?
И из этого по всего пожалуй самый интересный для меня вопрос: почему 1050ti как ни в чём не бывало дектит его?)

EDID на проблемном мониторе:
Monitor
Windows description. Generic PnP Monitor
Manufacturer. AMD
Plug and Play ID. AMD0001
Serial number. 1
Manufacture date. 2017, ISO week 20
Filter driver. None
-------------------------
EDID revision. 1.4
Input signal type. Digital (DVI)
Color bit depth. 10 bits per primary color
Color encoding formats. RGB 4:4:4
Aspect ratio (landscape). 1.78:1
Power management. Not supported
Extension blocs. None
-------------------------
DDC/CI. n/a

Color characteristics
Default color space. Non-sRGB
Display gamma. 3.55
Red chromaticity. Rx 0.666 - Ry 0.330
Green chromaticity. Gx 0.310 - Gy 0.630
Blue chromaticity. Bx 0.150 - By 0.040
White point (default). Wx 0.313 - Wy 0.329
Additional descriptors. None

Timing characteristics
Range limits. Not available
GTF standard. Not supported
Additional descriptors. None
Preferred timing. No

Standard timings supported

Report information
Date generated. 3/18/2020
Software revision. 2.60.0.972
Data source. Registry
Operating system. 6.2.9200.2

Raw data
00,FF,FF,FF,FF,FF,FF,00,05,A4,01,00,01,00,00,00,14,1B,01,04, B1,4F,00,FF,00,A5,95,AA,54,4F,A1,26,
0A,50,54,00,00,00,01,01,01,01,01,01,01,01,01,01,01,01,01,01, 01,01,64,00,40,A0,00,40,13,00,58,2C,
45,00,55,50,21,00,00,00,00,00,00,10,00,00,00,00,00,00,00,00, 00,00,00,00,00,00,00,00,00,10,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,10,00,00,00,00, 00,00,00,00,00,00,00,00,00,00,00,C6

Разобрался я с глюком, когда монитор уходил в спячку и не возвращался из неё. Начало здесь, продолжение здесь. Напомню вкратце. После того, как монитор засыпает по тайм-ауту, проснуться ему уже не судьба. Не помогает даже перезагрузка компа. А винда в это время пишет что-то совершенно неинформативное про перемещение устройства.

Собака порылась в EDID. Точнее в том, что он почему-то оказался побитым у сабжевого монитора. Обнаружил я это следующим образом. Взял проблемный дисплей и подключил его к своему Linux-овому десктопу. Пингвин во время загрузки молчать не стал, сразу высказал всё что думает:

Но, тем не менее, мой десктоп подцепил его и не подавился. То ли потому что Linux. То ли потому что видеокарта очень старая. То ли ещё почему-то. А вот Intel HD620 и 10-ке уже становится зело невкусно до такой степени, что даже инициализировать его не хотят.

Почему так происходит — вопрос отдельный. Автор статьи утверждает, что из-за передёргивания сигнальных кабелей "на ходу". Но лично мне в это верится с большим трудом. Как бе на HDMI-разъемах никаких фиксаторов, болтов, гаек и прочего крепежа не предусмотрено. Да и шатающийся-болтающийся провод тоже далеко не редкость. Если этот EEPROM настолько чувствителен к дисконнектам, то подобные неполадки давно проявились бы у доброй половины пользователей десктопов и ноутбуков с внешним экраном. И уж точно весь интернет пестрел бы всякими "полезными советами" на тему "обязательно выключайте компьютер и монитор перед перекоммутацией проводов". Я же склоняюсь к тупо некачественному исполнению микросхем и физическому износу.

Кто виноват, разобрались. Что делать? Кое-кто умудряется самостоятельно перезаливать этот EDID с точно такого же, но рабочего монитора-донора. А некоторые даже правят его руками по своему усмотрению. Но я на такое всё же не решусь. Во-первых, потому что у меня нет ещё одного точно такого же полностью исправного монитора. Во-вторых, данную операцию можно проводить не со всеми видеокартами. В-третьих, у меня лапки. В-четвертых, малейшая ошибка может привести к весьма непредсказуемым последствиям. Например, народ своими неверными действиями вместо EDID-а монитора "случайно" перешивал BIOS материнской платы и даже SPD-чипы на модулях оперативной памяти. Так что ну его нафиг. Проще установить на проблемный десктоп новый монитор из закромов, а "глюкавый" экземпляр забрать себе. Работает — не трогай.

Для любителей экспериментов вот ссылка на утилиту-прошивальщик. А если ваша проблема кроется всё же не в побитом EDID, то вот примерный чек-лист куда нужно смотреть (два поста от юзера с ником "Priscilla@HP").

Чисто для себя же по результатам исследования могу сделать следующие выводы, не претендующие на непредвзятость и объективность.

Что такое HDMI EDID? Все, что Вам нужно знать!

Формат HDMI позволяет упростить передачу видео в вашем домашнем кинотеатре. Это настолько надежный и простой стандарт, в котором подключаемые устройства обычно «просто работают» без сучка и задоринки, что легко забыть о некоторых интересных вещах, происходящих под капотом, например, HDMI EDID.

Расширенные данные идентификации дисплея (EDID) – это стандарт метаданных, который позволяет устройствам отображения, таким как мониторы, телевизоры и проекторы, сообщать свои возможности источнику видео. При использовании HDMI EDID вашего телевизора сообщает видеоисточнику, каковы размеры экрана.

Обычно это часть «магии» HDMI: что-то за кулисами, о которых даже не приходится думать. Обычно это верно при подключении одного устройства к другому. Однако при более сложных настройках вы можете столкнуться с неясными проблемами HDMI EDID. Давайте поговорим о некоторых деталях.

Как работает HDMI EDID?

EDID работает, устанавливая соединение между экраном и видеоисточником, в котором они обмениваются данными посредством процесса «рукопожатия». Кабель имеет каналы, которые специально используются для облегчения этого процесса «рукопожатия», и это происходит мгновенно, когда экран и источник видеосигнала подключаются и включаются.

Это похоже на то, как работает HDMI ARC, за исключением того, что HDMI ARC и eARC больше касаются видеоконтента и того, как он должен быть представлен, а не аппаратных возможностей.

А стандарт EDID настолько встроен в современные видеоформаты, что что-то может пойти не так, как надо. Невозможно «сломать» процесс EDID, потому что вам придется возиться с контактами на кабелях передачи или изменять оборудование и код на материнских платах соответствующих устройств.

Тем не менее, только потому, что вы не можете нарушить процесс HDMI в масштабе передачи битов по проводам, это не означает, что вы не столкнетесь с проблемами EDID, когда у вас сложная настройка с большим количеством источников HDMI или этапов передачи.

Какой информацией обменивается HDMI EDID?

Однако во время процесса «рукопожатия» EDID происходит обмен не только размером экрана, который вы используете. Существует целый ряд информации об аппаратном обеспечении дисплея, которое передается, чтобы источник видео мог отправлять сигнал с правильным разрешением и качеством.

Во-первых, указывается версия EDID и информация о производителе экрана (номер модели, серийный номер и т.д. ). Самое главное, также сообщается о разрешении видео, поддерживаемом экраном, чтобы источник видео знал, должен ли он выводить сигнал с разрешением 720p, 1080p, 4k или что-то еще.

Для телевизоров это, вероятно, будет одним из немногих вариантов. Но для мониторов или других нестандартных экранов это помогает HDMI выводить правильное разрешение даже в странных крайних случаях, таких как сверхширокие мониторы.

Существует также целый ряд подробных аппаратных возможностей, связанных с доступной производительностью видео, например, управление питанием экрана, спецификации «белой точки» и «поля видео», и даже информация о цветовой гамме и частоте обновления монитора. Все это влияет на качество видео, хотя подробное описание того, как все они работают, выходит за рамки данной статьи.

Что может вызвать проблемы с EDID

Любой этап, на котором сигнал HDMI маршрутизируется через другое оборудование, является этапом, на котором информация EDID может быть нарушена или нарушена. Если вы подключаете несколько источников видео к приемнику, это шаг, на котором сигнал EDID теперь должен пройти через материнскую плату приемника и выйти с другой стороны, на выход, в целости и сохранности, чтобы ваша система работала правильно.

Если вы используете переключатель HDMI (через ресивер или иным образом) каждый раз, когда вы переключаете его, он может сбрасывать настройки вывода из вашего видеоисточника, то есть вам придется зайти в настройки вашего видеоисточника и вручную перенастроить разрешение вывода видео. Очевидно, это не оптимально.

Другой способ, которым эта информация EDID может быть нарушена, – это использование более дешевых удлинителей кабеля. Простой адаптер HDMI «мама-женщина» может позволить вам легко удлинить кабели HDMI, но он также может блокировать или прерывать выход EDID-сигнала, что приводит к тем же проблемам, которые описаны выше. Или, если вы используете настройку беспроводной связи HDMI, могут возникнуть те же проблемы.

Еще одна проблема, проявляющаяся в петле EDID, – это использование переключателя или приемника и длительная задержка при переключении источников. Каждый шаг в этом процессе должен принимать сигнал EDID, настраиваться, а затем выводить правильный сигнал. Поэтому, если ваш видеоисточник должен подключаться к ресиверу, а затем к телевизору или монитору, время, необходимое для декодирования и кодирования сигнала EDID, может увеличиваться.

Это может означать ожидание на черном экране в течение нескольких секунд при смене источника (поскольку чипы сообщают, что им необходимо переключиться с 1080p на 4k, например), но это также может задерживаться еще дольше.

Что такое HDMI EDID? Все, что Вам нужно знать!

Максимальное упрощение настройки станет первым шагом к устранению проблем с EDID. Если у вас есть приемник, который отправляет сигналы на телевизор, это одно, но если в вашей системе есть удлинители кабелей, вам следует подумать о переходе на более длинные кабели, которые не нуждаются в удлинении.

Если это не вариант, вы можете попробовать использовать эмулятор EDID, такой как gofanco Prophecy 4K EDID Emulator & Feeder (на Amazon). Эмулятор EDID – это способ убедиться, что сигнал EDID от исходного кабеля правильно подается на следующий кабель. Это означает, что вы убедитесь, что вы передаете сигнал EDID, чтобы он был доступен для «рукопожатия» на другом конце.

Если вы подключаете кабели HDMI или DVI, чтобы удлинить кабели и заставить вашу настройку работать, вам стоит рассмотреть эти эмуляторы EDID для решения любых проблем с передачей. Это сделает ваши экраны более простыми в использовании и сэкономит вам время на их настройку вручную. Это будет особенно важно, если вы подключаете длинные кабели к нескольким мониторам или экранам.

Читайте также: