PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Вопросы по прошивкам (http://pccar.ru/forumdisplay.php?f=142)
-   -   EDID и все что ему сопутствует... (http://pccar.ru/showthread.php?t=23783)

Leobor 11.01.2016 22:08

EDID и все что ему сопутствует...
 
Вложений: 11
Не буду цитировать википедию, что такое EDID и для чего он нужен. Тема создается в основном для помощи в расчетах и создании этого зверя.
Но все же некоторые особенности разжую. Итак, EDID - блок объемом 128 байт. Обращаю на это внимание, поскольку некоторые редакторы из-за кривизны могут сделать его и другого размера. Тогда нужно в HEX редакторе оставить 128 байт, а остальные "нули" удалить.
Для создания массива EDID чаще всего используют программу EDID-Editor. Их бывает много, но суть одна. Для того, чтобы создать блок EDID помимо основных (разрешение, частота) нужно иметь некоторые данные, имеющие отношение к временнЫм характеристикам матриц, т.н. тайминги. В некоторых даташитах на матрицы EDID выкладывают как есть готовый, в других - нет. Тогда его нужно рассчитать исходя из таймингов на матрицу. Однако зачастую тайминги бывают довольно мудро зашифрованы и разобраться довольно сложно. Вот тогда в помощь годится очень полезное понятие - моделайн. Это массив неких усредненных данных, который является расчетом из исходных разрешения и частоты обновления экрана. Причем хоть и данные усредненные, но их вполне достаточно, чтобы заработали любые матрицы равного разрешения - большинство временных параметров матриц имеют "ворота".
К сожалению калькулятор моделайна в виде самостоятельной программы я не могу выложить (я попросту его не встречал), но есть сайт, на котором онлайн можно это сделать: http://www.arachnoid.com/modelines/
Заходим туда, а там все очень просто. Не буду пояснять слишком глубоко, нам интересна таблица Required inputs. Правая таблица - это опциональная и для разжевывания ее нужно время, при том что сами опции не сильно то требуются в нашем случае. Ниже по тексту идет расшифровка некоторых понятий и величин. Даже рисунок, который тоже многое объясняет.
Вводим разрешение, например 1024*600 и частоту 60Гц. Результат:
# 1024x600 @ 60.00 Hz (GTF) hsync: 37.32 kHz; pclk: 48.96 MHz
Modeline "1024x600_60.00" 48.96 1024 1064 1168 1312 600 601 604 622 -HSync +Vsync
Ну а теперь подвожу к тому, для чего все это нужно.
Взглянем на окно программы EDID Editor
Вложение 42187
Как видим, для создания массива EDID нужны тайминги, которые я обвел прямоугольником. Вот их то мы и берем из моделайна.
Итак, как они там "зашифрованы":
"1024x600_60.00" 48.96 1024 1064 1168 1312 600 601 604 622 -HSync +Vsync"
- 1024x600_60.00: Resolution_Refresh (Hz, после точки - дробная часть)
- 48.96: Pixel Clock (MHz, после точки - дробная часть)
- 1024: H. Active Pixels
- 1064: H. Start of Sync Pulse
- 1168: H. End of Sync Pulse
- 1312: H. End of Blanking Interval
- 600: V. Active Lines
- 601: V. Start of Sync Pulse
- 604: V. End of Sync Pulse
- 622: V. End of Blanking Interval
-HSync +Vsync - эти "галочки" ставятся в программе расчета.
Я намеренно не стал переводить все строчки, потому что в программах расчета по-русски не бывает. H и V - означает, что величина относится к горизонтальным и вертикальным параметрам соответственно. Поскольку для расчета нужны еще и некоторые промежуточные параметры, поэтому привожу, как они взаимосвязаны с уже имеющимися:
H. Start of Sync Pulse = H. Active Pixels + H. Sync Offset
H. End of Sync Pulse = H. Start of Sync Pulse + H. Sync Width
H. End of Blanking Interval = H. Active Pixels + H. Blank Pixels
и точно так же для "вертикали":
V. Start of Sync Pulse = V. Active Lines + V. Sync Offset
V. End of Sync Pulse = V. Start of Sync Pulse + V. Sync Width
V. End of Blanking Interval = V. Active Lines + V. Blank Lines
В этих взаимосвязях вы найдете все необходимые для расчета величины. Их же можно взять для подстановки не только в редактор EDID, но и в любой другой (например EMGD).
Да, вот еще, иногда в редакторах некоторые тайминги называют по разному. Поэтому привожу известные мне вариации:
H. Sync Offset = H. Front Porch
V. Sync Offset = V. Front Porch

Теперь можно перейти к практике.
Напомню еще один важный момент. Для какой цели нужен блок edid - от этого зависит как его "приготовить".
1. Если он нужен для внедрения в МОНИТОР (к примеру в тело прошивки того же "народного контроллера"), то тогда в редакторе необходимо будет указать, для какого входа (аналоговый или цифровой) он создается. Но главное вовсе не это. Для всех мониторов свойственно иметь определенный набор поддерживаемых разрешений на борту для того, чтобы графический адаптер компьютера "мог" на них ориентироваться. Что имеется в виду. Наилучшее разрешение для работы монитора - это физическое разрешение матрицы (еще это называется нативное разрешение). Т.е. когда пиксел формируемого изображения попадает точно в физический пиксел матрицы. В редакторах edid это понятие называется detailed timings (еще бывает native или preferred timings). Все остальные разрешения, поддерживаемые монитором, называются established и standard timings. Для чего они нужны вообще: Во время загрузки ОС на экране проходят различные этапы - POST, BIOS, экраны приветствия и наконец сам интерфейс ОС. Все они имеют различные разрешения и частоту обновления. Для того, чтобы монитор отображал все эти этапы, графический адаптер "смотрит" в список поддерживаемых разрешений и при наличии нужного выводит изображение на экран. Если нужного нет, то будет либо черный экран, либо включено ближайшее разрешение. Все зависит от графического адаптера, производителя МП и БИОСа, а также от схемотехнических возможностей скалера монитора.
2. Если блок EDID нужен только для описания матрицы в БИОС (это при подключении матрицы напрямую к LVDS интерфейсу материнской платы), то необходимо оставить только detailed timings, а все остальные (established и standard) исключить. Почему? Все просто: материнка должна знать только нативное разрешение матрицы чтобы выставлять его при основной работе. Все остальные разрешения тогда обеспечивает графический адаптер совсем по другому алгоритму.
Надеюсь, понятно изложил.
Ну и теперь, основываясь на вышеприведенном примере с моделайном рассчитаем блок edid для VGA входа контроллера монитора для матрицы EJ070NA-01.
Я приведу пример как работать с EDID редактором от Deltacast. Почему он. Я пробовал несколько редакторов. Редактор от Phoenix мне не понравился тем, что он сохраняет файл только в формате .raw (напомню - нам нужен .bin). Редактор от Viewsonic (да, да, тот самый производитель мониторов) оказался неспособным сделать edid большинства широкоэкранных матриц. В общем, мне понравился от Deltacast...
Итак, открываем окно редактора, жмем на "Создать" (New) и выскакивает окошко, в котором предлагается выбрать "рыбу" заготовки под поколение HDMI. Но нас это не особо интересует - мы же делаем под VGA, поэтому неважно. Я просто ткнул на HDMI 1.3.
Вложение 42351
Открывается окно на вкладке General/Video Input Definition/Feature, в котором нам необходимо заполнить 4 блока:
Вложение 42352
В первом блоке можно заполнять, а можно и нет данные о производителе монитора, дату создания, модель - это все лишнее. Ну на всякий я наберу производитель SAM (это международный кодификатор Samsung). Гамма-коррекцию набираем 2.20. Не спрашивайте почему, наверное так повелось издавна, но во всех EDID стоит именно 2.20. Возможно она ни на что и не влияет, но пойдем за стадом.
Во втором блоке все уже установлено. Единственное - поставим галочку на композитной синхронизации. В современных системах она поддерживается везде.
В третьем блоке можно ввести геометрические размеры изображения (можно и не вводить - это ни на что не влияет, просто информативно будет отражено).
В четвертом блоке ставим галку Standby Mode (не знаю, влияет она и ли нет, но я ставлю всегда), в профиле Color Type выбираем RGB Color (он точно не влияет - проверял, но для красоты пойдет) и галочки sRGB и Preferred Timing Mode:
Вложение 42353
Переходим во вторую вкладку (Color Established Timings I & II).
Вложение 42355
Здесь два блока. В левом (Display x.y. Chromacity) нам необходимо ввести данные по цветовым характеристикам. Берутся они из даташита на матрицу. Иногда в ДШ есть данные по каждому цвету, иногда только для белого. В даташите на выбранную матрицу (EJ070NA-01) именно такая ситуация:
Вложение 42354
Поэтому берем и вбиваем ТИПОВЫЕ данные для "белого" из ДШ. Что касается величин для других цветов, можно ввести усредненные данные, описанные в стандарте CIE 1931 (на который есть ссылка в ДШ). Но можно сказать только одно - данные по каждому цветовому параметру продиктованы цветовой гаммой матрицы по отношению к цветовосприятию человеческого глаза и практически у всех матриц одинаковые (различие в сотых или тысячных долях). Поэтому можно смело ставить Rx=0.640, Ry=0.330, Gx=0.285, Gy=0.600, Bx=0.15, By=0.080.
Во втором блоке выбираются СТАНДАРТНЫЕ (общеизвестные) разрешения, которые нужны нам. Не стоит выбирать все. Я для примера выбираю 720*400 70Hz (это разрешение POST экрана), 640*480 60Hz (это BIOS) и 800*600 60Hz (это экран приветствия WinXP):
Далее переходим на вкладку Standard Timings. Здесь можно добавить то разрешение, которое будет присутствовать в списке поддерживаемых монитором, но которого не было на предыдущей вкладке. Например для добавления 1600*900 нужно поставить галочку Enable, набрать 1600 по горизонтальному разрешению, набрать частоту 60Гц и поставить галочку в соотношении сторон 16:9. Таким образом разрешение 1600*900 60Гц появится в списке поддерживаемых.
Последняя вкладка Detailed Timigs & Display Descriptions - главная и самая важная. Здесь то как раз и вводятся тайминги нативного разрешения.
Итак, что мы видим в этой вкладке.
Вложение 42356
Слева в колонке Block Descriptor перечислены блоки, которые мы можем внедрить в массив EDID. Правее в колонке Block Descriptor Type - выбор того, что именно будет описывать выбранный блок. Обратите внимание, что первый блок по умолчанию является уже назначенным Detailed Timing и его нельзя изменить. Правее идет расшифровка выбранного блока, в которую и подставляются все выбранные параметры. В моем примере подставлены значения, подсчитанные в modeline. От себя я добавил только размеры изображения в миллиметрах. Они ни на что не влияют - это только справочная информация.
Внизу под введенными параметрами виден результат автоматического подсчета частот "строк" и "кадров" (светло-серым). Они зависят именно от введенных временнЫх параметров.
Выбираем в левой колонке второй блок и уже открывается возможность выбора что именно мы собираемся описывать. Например я выбрал серийный номер монитора
Вложение 42357
Однако, иногда бывают ситуации, когда нужно чтобы монитор имел не один, а два значения Preferred timing. Например если это блок EDID для входа HDMI. В случае с "народным" контроллером, например матрица у нас 1024*600. Если подключить ко входу HDMI компьютер, нужно чтобы его графический адаптер "знал", что нужно выдать разрешение 1024*600. Это мы уже проделали выше. Но если к этому входу подключить какой либо медиадевайс (например тот же цифровой приемник DVB-T2), нет никакой гарантии, что изображение появится на экране - приемник не "знает", что по интерфейсу HDMI может быть такое разрешение. Просто на экране в лучшем случае появится надпись "неподдерживаемое разрешение", а в худшем - просто будет черный экран. Поэтому необходимо прописать еще одно разрешение, но такое, чтобы любая медиаприставка "поняла", что это - HDMI и по нему можно транслировать изображение. В этом случае мы выбираем во втором блоке еще раз Detailed Timing и описываем в нем разрешение либо HD Ready (1280*720, называется еще "режим 720p"), либо Full HD (1920*1080, режим 1080р). Таким образом блок EDID будет уже нести информацию о двух рабочих разрешениях монитора.
Надо отметить, что все остальные описания носят скорее информативный характер и уже не вносят какой либо серьезной "машинной" составляющей. Однако, есть еще один важный блок (Range Limits), который обязательно должен быть описан - диапазоны введенных величин и добавочные тайминги (Display Range Limits & Additional Timings)
Вложение 42358
Тут я вбиваю нигде не вычисленные пределы - просто из соображений запаса. По горизонтали - от 15 до 81кГц, по вертикали - от 24 до 75Гц.
Ну и напоследок "обзываю" свой монитор в блоке 4
Вложение 42359.
Все. На этом сохраняем файл (сохраняется он в формате .bin). Иногда почему то Deltacast сохраняет 256, а не 128 байт. Возможно это результат выбора типа HDMI на начальном этапе - не знаю, не задавался целью. Поэтому необходимо убедиться, какого размера сохраненный файл. Если он все таки 256 байт, то можно открыть его в HEX Editor и обрезать 128 байт "нулей", либо опять в Deltacast Editor, выбрать во вкладке Tools пункт Hexa Editor и тогда файл откроется во встроенном гекс эдиторе дельтакаста. Отрезаем "лишнее", жмем ОК. Он спросить, хотите ли вы сохранить файл. Отвечаем "Да" и все, файл готов.

Это был пример, как приготовить файл EDID для МОНИТОРА.
Если нам нужен файл только для BIOS (в случае подключения матрицы к порту LVDS материнской платы), то проделываем все то же самое, только снимаем все "галочки" во вкладках Established Timings и Standart Timings и удаляем всю ненужную информацию (название дисплея, серийный номер и т.д.). Они нам не нужны. Блок EDID должен содержать только одно разрешение - разрешение самой матрицы и цветовой профиль.

Ну и напоследок пару хитростей от себя. Как показала практика, калькулятор моделайн не всегда точно считает величины. Замечено, что чем выше разрешение, тем больше расхождение с EDID, взятым от какого нибудь "правильного" производителя. В связи с этим я бы не рекомендовал использовать его огульно, но для нахождения величин для матриц низкого разрешения (800*480...1280*800) этого калькулятора вполне достаточно. Что же делать с более высокими разрешениями, где брать правильный EDID? Все очень просто. Например нам нужен EDID для монитора 1680*1050. Узнаем в Яндексе или берем из головы, какой именно промышленно изготовленный монитор имеет такое разрешение. Samsung SyncMaster 205bw, 225bw, 206bw, 226bw. Думаю, хватит. Скачиваем прошивку (например на remont-aud.net или monitor.net), открываем ее в HEX Editor (или другой аналогичной программе)и ищем в ней строчку 00 FF FF FF FF FF FF 00. Это и есть первые 8 байт EDID. Ну а далее выделяем их и плюс еще 121 байт, чтобы получилось 8 строк по 16 байт. Сохраняем его в формате .bin. Это и будет блок EDID:

00 ff ff ff ff ff ff 00 1c 54 05 21 06 09 13 20
28 15 01 03 85 2f 1d 78 ea 64 b5 ab 52 38 ab 25
13 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 7c 2e 90 a0 60 1a 1e 40 30 20
36 00 d9 28 11 00 00 1e 00 00 00 10 00 50 4b 35
37 33 37 41 47 35 37 35 55 0a 00 00 00 fc 00 41
49 4f 20 50 43 0a 20 20 20 20 20 20 00 00 00 fd
00 38 3c 1e 46 0d 00 0a 20 20 20 20 20 20 00 66

Для того, чтобы "прочесть" информацию, закодированную в блоке EDID, необходимо установить программу Moninfo и открыть его в ней. Там будут видны абсолютно все установленные разрешения и атрибуты.
Если что то нужно подкорректировать (например приготовить EDID для BIOS), открываем его снова в EDID editor и вычищаем все "лишнее", как я уже говорил выше.
Для чего мы искали прошивку и выбирали из нее EDID - чтобы иметь ТОЧНЫЕ уже подсчитанные (компанией Samsung) данные Detailed Timigs & Display Descriptions. Они то уж точно должны быть правильными...

Есть еще один способ - добыть данные для EDID прямо из даташита на матрицу (обычно указывается где то на последних страницах документа). Этот способ является самым точным, потому что это будут уже абсолютно точные данные от производителя. Следует заметить, что эти EDID данные будут чисто для материнской платы, а не для мониторов (в чем отличие - я указывал выше). Но эти данные можно смело править в EDID-эдиторе и под мониторы. Однако, такая информация в даташитах встречается нечасто - обычно это "удел" брендовых матриц. В большинстве же даташиты на всякую "шушару" увы, не содержат этой полезной информации.

И еще одна хитрость (просто нет смысла заводить отдельную тему для этого). Это касается уже не EDID, а самой прошивки. Но при этом EDID используется как отправная точка.
Иногда бывает необходимо чуть изменить прошивку на предмет битности подключенной матрицы. Например у вас есть прошивка под 8-битную матрицу EJ080NA-04B, а вы захотели использовать этот контроллер с какой нибудь 15-дюймовой матрицей от монитора - а она 6-битная. Что делать? Да ничего сложного (по крайней мере с китайскими прошивками) нет. Все показываю на картинке:
Вложение 45491
Внимательно рассмотрите и увидите всего 4 отличия прошивок. Меняйте - и все заработает.
Кстати сказать, справа от этих значений находится байт, отвечающий за количество каналов LVDS. 00 - это для одноканального, 08 - для двухканального. Его так же можно безболезненно заменить.
Да, и не забудьте, что этот способ - для китайской прошивки под контроллер на RTD2660H и конечно же не будет применим к контроллерам на TSUM или MStar...

Vlad-bodryi 11.01.2016 23:45

нужная тема! когда я это победил, думал тоже написать, но интереса ни у кого не возникло, у меня так и прошла эта затея. смотрю последние полгода, народ прям со жгучим рвенеем интересуется ЭДИД... отстаём товарищи, отстаём... и это когда я боролся уже наверное как три года прошло, то-есть на вскидку минимум на шесть лет отстаём!!!

Leobor 11.01.2016 23:52

Да она (необходимость) время от времени вылезает. Кидаешься искать свои записи в закромах. Уж лучше тут пусть перед глазами будет...

Vlad-bodryi 11.01.2016 23:59

Вложений: 1
ага, я тоже так делаю, читаю свой проект!

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

Leobor 12.01.2016 01:12

В файлах 36B6 и LOADFW по 11 едидов. Что нужно прочитать? Файлы полностью идентичны.

Vlad-bodryi 12.01.2016 01:28

ХМ...

я тут намедни, думаю, дайка я наипу этот гигапит, вообщем подключил матрицу к интелу2800 и снял ЭДИД с чипа матрицы 101EW05, той программой, которую ты мне дал когда-то. подменил файл 36в6, заметил что размер файла гигапита в 8кб, а слизанной - 1кб, вообщем не хочет принимать биос гигапита мой подменный файл. поддержка надо мной издевается...

чем открывал/читал?

Leobor 12.01.2016 01:37

Во! А чем еще можно бинарники открывать? Конечно HEX Editor.
Не, ну там в файлах не просто голые едиды - там какая то прошивка, в которой 11 едидов: 1920*1080, 1600*900, 1366*768, 1024*768, 800*600, 1280*1024, 1280*800, 1920*1200, 1440*900, 1600*1200 и 1680*1050.

Vlad-bodryi 12.01.2016 02:10

хрень какая-то...

Leobor 12.01.2016 02:39

Ну что дал. Я же не сам это придумал...

Vlad-bodryi 12.01.2016 11:46

Цитата:

Сообщение от Leobor (Сообщение 348328)
Ну что дал. Я же не сам это придумал...

ты то тут не причём...

у тебя случаем нет установочника хекса?


Часовой пояс GMT +4, время: 02:33.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot