{"id":1905,"date":"2014-07-07T13:10:56","date_gmt":"2014-07-07T13:10:56","guid":{"rendered":"http:\/\/www.chalk-elec.com\/?p=1905"},"modified":"2015-02-03T15:15:30","modified_gmt":"2015-02-03T15:15:30","slug":"how-to-program-custom-edid-data-in-hdmi-adapter","status":"publish","type":"post","link":"https:\/\/www.chalk-elec.com\/?p=1905","title":{"rendered":"How to program custom EDID data in HDMI converter"},"content":{"rendered":"<div class=\"redbox\">Use below information at your own risk. We take absolutely no responsibility for any damage accured to your PC while attempting this procedure!<\/div><div class=\"bluebox\">EDID files for our panels are available in Support\/Sources section on our website.<\/div><div class=\"line\"><\/div>\n<p>&nbsp;<br \/>&nbsp;<br \/>&nbsp;<br \/>&nbsp;<\/p>\n<p><strong>EDID<\/strong> stands for <strong>E<\/strong>xtended <strong>D<\/strong>isplay <strong>I<\/strong>dentification <strong>D<\/strong>ata (EDID), and is a data structure provided by an LCD to describe its capabilities and supported resolutions to a video source (RaspberryPi, PC, Android stick, etc.) EDID is stored in EEPROM memory chip with I2C interface on LCD receiver side. In our case this is small chip U5:<br \/>\n<a href=\"http:\/\/www.chalk-elec.com\/wp-content\/uploads\/2014\/07\/20-17-301.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.chalk-elec.com\/wp-content\/uploads\/2014\/07\/20-17-301.jpg\" alt=\"HDMI-LVDS converter, EDID chip\" width=\"600\" height=\"477\" class=\"aligncenter size-full wp-image-2139\" srcset=\"https:\/\/www.chalk-elec.com\/wp-content\/uploads\/2014\/07\/20-17-301.jpg 954w, https:\/\/www.chalk-elec.com\/wp-content\/uploads\/2014\/07\/20-17-301-300x239.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><br \/>\n<a href=\"http:\/\/www.chalk-elec.com\/wp-content\/uploads\/2014\/07\/dualLVDS-EDID.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.chalk-elec.com\/wp-content\/uploads\/2014\/07\/dualLVDS-EDID.jpg\" alt=\"dualLVDS EDID\" width=\"600\" height=\"372\" class=\"aligncenter size-full wp-image-2138\" srcset=\"https:\/\/www.chalk-elec.com\/wp-content\/uploads\/2014\/07\/dualLVDS-EDID.jpg 783w, https:\/\/www.chalk-elec.com\/wp-content\/uploads\/2014\/07\/dualLVDS-EDID-300x186.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a>\n<\/p>\n<p>\nWe ship our HDMI converters with pre-programmed EDID data for our standard LCD panels (1280&#215;800 for single-LVDS, and 1920&#215;1200 for dual-LVDS converter). If you want to use it with different LCD panel and different resolution, then you should update EDID information stored in EEPROM chip. Fortunately, this is not difficult procedure, and it will not require any special hardware tools. All you need is Linux powered PC or board (like RasPi) with HDMI output and keyboard to type in terminal commands. So, run Linux, open Terminal, connect our HDMI converter to HDMI output of PC, and power it with external power supply. Others cables are not required. <\/p>\n<ol>\n<li>First of all, lets install required tools. We will need Python SMBus library to read\/write data to I2C bus, and EDID decode tools to represent EDID data in human-readable form:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:630px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">sudo apt-get install python-smbus edid-decode<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<\/li>\n<li>Then we should download <strong>edid-rw<\/strong> utility:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:630px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">git clone https:\/\/github.com\/bulletmark\/edid-rw<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<\/li>\n<li>And <strong>write-edid<\/strong> script that I wrote to simplify update process:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:630px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">git clone https:\/\/github.com\/ChalkElec\/write-edid<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<\/li>\n<li>Activate i2c-dev kernel module to get access to I2C bus:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:630px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">sudo modprobe i2c-dev<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<\/li>\n<li>Now we should find which I2C bus is used by our HDMI adapter. The simplest way is to try bus numbers one by one with command like:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:630px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">sudo .\/edid-rw 0 | edid-decode<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<\/li>\n<li>In my case I found HDMI adapter on bus #3:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:630px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">sudo .\/edid-rw 3 | edid-decode<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>I got output like this:<\/p>\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:630px;height:425px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/><\/div><\/td><td><div class=\"text codecolorer\">Extracted contents:<br \/>\nheader: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;00 ff ff ff ff ff ff 00<br \/>\nserial number: &nbsp; 30 e4 45 03 00 00 00 00 00 15<br \/>\nversion: &nbsp; &nbsp; &nbsp; &nbsp; 01 04<br \/>\nbasic params: &nbsp; &nbsp;90 16 0e 78 02<br \/>\nchroma info: &nbsp; &nbsp; e8 87 96 5a 55 95 28 22 51 55<br \/>\nestablished: &nbsp; &nbsp; 00 00 00<br \/>\nstandard: &nbsp; &nbsp; &nbsp; &nbsp;01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01<br \/>\ndescriptor 1: &nbsp; &nbsp;4c 1d 00 ec 50 20 18 30 40 30 57 00 d9 88 00 00 00 1b<br \/>\ndescriptor 2: &nbsp; &nbsp;16 12 00 80 50 20 16 30 30 20 47 00 d9 88 00 00 00 1b<br \/>\ndescriptor 3: &nbsp; &nbsp;00 00 00 fe 00 43 33 47 52 4e 80 31 30 31 57 58 31 0a<br \/>\ndescriptor 4: &nbsp; &nbsp;00 00 00 00 00 00 41 32 a8 00 00 00 00 01 01 0a 20 20<br \/>\nextensions: &nbsp; &nbsp; &nbsp;00<br \/>\nchecksum: &nbsp; &nbsp; &nbsp; &nbsp;9a<br \/>\n<br \/>\nManufacturer: LGD Model 345 Serial Number 0<br \/>\nMade week 0 of 2011<br \/>\nEDID version: 1.4<br \/>\nDigital display<br \/>\n6 bits per primary color channel<br \/>\nDigital interface is not defined<br \/>\nMaximum image size: 22 cm x 14 cm<br \/>\nGamma: 2.20<br \/>\nSupported color formats: RGB 4:4:4<br \/>\nFirst detailed timing is preferred timing<br \/>\nEstablished timings supported:<br \/>\nStandard timings supported:<br \/>\nDetailed mode: Clock 75.000 MHz, 217 mm x 136 mm<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1280 1344 1392 1516 hborder 0<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 800 &nbsp;805 &nbsp;812 &nbsp;824 vborder 0<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+hsync -vsync<br \/>\nDetailed mode: Clock 46.300 MHz, 217 mm x 136 mm<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1280 1328 1360 1408 hborder 0<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 800 &nbsp;804 &nbsp;811 &nbsp;822 vborder 0<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+hsync -vsync<br \/>\nASCII string: C3GRN\u20ac101WX1<br \/>\nManufacturer-specified data, tag 0<br \/>\nChecksum: 0x9a<br \/>\nEDID block does NOT conform to EDID 1.3!<br \/>\n&nbsp; &nbsp; Missing name descriptor<br \/>\n&nbsp; &nbsp; Missing monitor ranges<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>I can recognize it by Manufacturer string that contains <strong>&#8220;LGD&#8221;<\/strong> &#8211; short code of LG Display company, and by resolutions numbers <strong>&#8220;1280&#8221;<\/strong> and <strong>&#8220;800&#8221;<\/strong> in Detailed mode string. For dualLVDS converter resolution will be 1920&#215;1200<\/li>\n<li>Now we know I2C bus number and can program another EDID information to our HDMI adapter. But be careful to state correct bus number on the next step. Better check twice output on previous step, then check once again. If you state wrong I2C bus number, you can accidentally overwrite another I2C EEPROM with wrong data (like EDID information of main LCD panel of your notebook).<\/li>\n<li>We use the following command to update EDID with information from file edid_auo14.bin (in our case this is EDID information for our 14&#8243; AUO panel):\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:630px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">sudo .\/write-edid.sh 3 edid_auo14.bin<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<\/li>\n<li>Let&#8217;s check that EDID has been updated:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:630px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">sudo .\/edid-rw 3 | edid-decode<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>We should have the following output for 14&#8243; EDID data:<\/p>\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:630px;height:425px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/><\/div><\/td><td><div class=\"text codecolorer\">Extracted contents:<br \/>\nheader: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;00 ff ff ff ff ff ff 00<br \/>\nserial number: &nbsp; 06 af 3c 10 00 00 00 00 00 16<br \/>\nversion: &nbsp; &nbsp; &nbsp; &nbsp; 01 04<br \/>\nbasic params: &nbsp; &nbsp;90 1f 11 78 02<br \/>\nchroma info: &nbsp; &nbsp; 10 b5 97 58 57 92 26 1e 50 54<br \/>\nestablished: &nbsp; &nbsp; 00 00 00<br \/>\nstandard: &nbsp; &nbsp; &nbsp; &nbsp;01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01<br \/>\ndescriptor 1: &nbsp; &nbsp;ce 1d 56 d2 50 00 26 30 10 10 3e 00 35 ad 10 00 00 18<br \/>\ndescriptor 2: &nbsp; &nbsp;df 13 56 d2 50 00 26 30 10 10 3e 00 35 ad 10 00 00 18<br \/>\ndescriptor 3: &nbsp; &nbsp;00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<br \/>\ndescriptor 4: &nbsp; &nbsp;00 00 00 02 00 0c 39 cc 0d 3c 64 0f 0c 1b 6f 20 20 20<br \/>\nextensions: &nbsp; &nbsp; &nbsp;00<br \/>\nchecksum: &nbsp; &nbsp; &nbsp; &nbsp;0d<br \/>\n<br \/>\nManufacturer: AUO Model 103c Serial Number 0<br \/>\nMade week 0 of 2012<br \/>\nEDID version: 1.4<br \/>\nDigital display<br \/>\n6 bits per primary color channel<br \/>\nDigital interface is not defined<br \/>\nMaximum image size: 31 cm x 17 cm<br \/>\nGamma: 2.20<br \/>\nSupported color formats: RGB 4:4:4<br \/>\nFirst detailed timing is preferred timing<br \/>\nEstablished timings supported:<br \/>\nStandard timings supported:<br \/>\nDetailed mode: Clock 76.300 MHz, 309 mm x 173 mm<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1366 1382 1398 1576 hborder 0<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 768 &nbsp;771 &nbsp;785 &nbsp;806 vborder 0<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-hsync -vsync<br \/>\nDetailed mode: Clock 50.870 MHz, 309 mm x 173 mm<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1366 1382 1398 1576 hborder 0<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 768 &nbsp;771 &nbsp;785 &nbsp;806 vborder 0<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-hsync -vsync<br \/>\nManufacturer-specified data, tag 0<br \/>\nManufacturer-specified data, tag 2<br \/>\nChecksum: 0xd<br \/>\nEDID block does NOT conform to EDID 1.3!<br \/>\n&nbsp; &nbsp; Missing name descriptor<br \/>\n&nbsp; &nbsp; Missing monitor ranges<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>As you can see, Manufacturer string now contains &#8220;AUO&#8221;, and Detailed mode has resolution 1366&#215;768, so we did everything right, and now we can use HDMI adapter with another panel (14&#8243; AUO in our example)<\/li>\n<\/ol>\n<p>&nbsp;<br \/>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp;&nbsp;&nbsp;&nbsp; EDID stands for Extended Display Identification Data (EDID), and is a data structure provided by an LCD to describe its capabilities and supported resolutions to a video source (RaspberryPi, PC, Android stick, etc.) EDID is stored in EEPROM memory chip with I2C interface on LCD receiver side. In our case this is small chip [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,26],"tags":[],"class_list":["post-1905","post","type-post","status-publish","format-standard","hentry","category-blog","category-howto"],"_links":{"self":[{"href":"https:\/\/www.chalk-elec.com\/index.php?rest_route=\/wp\/v2\/posts\/1905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.chalk-elec.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.chalk-elec.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.chalk-elec.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.chalk-elec.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1905"}],"version-history":[{"count":10,"href":"https:\/\/www.chalk-elec.com\/index.php?rest_route=\/wp\/v2\/posts\/1905\/revisions"}],"predecessor-version":[{"id":2141,"href":"https:\/\/www.chalk-elec.com\/index.php?rest_route=\/wp\/v2\/posts\/1905\/revisions\/2141"}],"wp:attachment":[{"href":"https:\/\/www.chalk-elec.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.chalk-elec.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.chalk-elec.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}