ArtsAutosBooksBusinessEducationEntertainmentFamilyFashionFoodGamesGenderHealthHolidaysHomeHubPagesPersonal FinancePetsPoliticsReligionSportsTechnologyTravel

How to Reflash a Monitor with corrupted EDID

Updated on November 18, 2013

Could be a (monitor) Life Saver

I do wish to share a useful program by author Mark Blakeney at GitHub.com which saved a 'faulty' monitor of mine from going to the scrap heap..

This program (edid-rw) allows you to 're-flash' the EDID chip inside a monitor to correct settings so that modern operating systems can boot it to native resolution.

The program runs on linux Ubuntu/Debian and probably any of it's derivatives or live CDs.

A word of warning: You should only use this process as a ' last resort '. It could be that your monitor's problem is not EDID related at all. Flashing wrong data could also corrupt an EDID.

What is an EDID ?

Most consumer monitors these days carry inside an EEPROM chip called the EDID. It contains the name and specifications of the monitor's technical data including it's capabilities. Using a special Display Data Channel (DDC) in the monitor cable, the PC communicates with the monitor to get it's info.

The EDID can be re-written using special software.

Why on Earth Would I Want to do That ?

Unlike earlier versions of Linux, modern distros are increasingly relying on 'Auto-Detection' of hardware, and that includes monitors.

This means the OS will 'ask' the monitor, what it is capable of. In the old days, before this type of auto-detection, the user would just pre-config these settings manually into config files.

If the boot process does not detect the monitor correctly, you could end up with the following symptoms.

Unable to achieve a higher resolution supported.

Incorrectly detecting a resolution that does not exist.

Unable to detect the monitor at all.

Tip: This also means that it's better to have your monitor 'on' before booting, otherwise the OS would default to a lower resolution.

These symptoms could be because of incorrect settings on the PC side, or it could also be because the EDID data in the monitor has been corrupted.

So what? There's nothing wrong with my monitor.

No, I'm not saying there is. But EDID chips can go corrupt.

The chip is sensitive to electric shocks. Just the act of unplugging a cable without switching off the monitor might cause this. Ok it's unusual but it does happen, and there's scant solutions on the internet to fix it.

Ok, What's the solution ?

On Windows, there's the 'Phoenix'solution by Phoenix EDID Designer from Raylar Design, Inc. Since I don't use windows anymore, I don't know if this works or not, try Google for more info. It looks simple enough, good luck. There are also other programs made by monitor manufacturers themselves that run on Windows, but they are hard to find.

Instead I'm going to show you how it can be done in Linux Lubuntu, which would probably work for any other Ubuntu derivative. You can even use a bootable linux live CD and install the software temporarily, if you wish, it works just the same.

edid-rw

edid-rw is a python script from Mark Blakeney at GitHub.

It reads and writes EDID data on the i2c channel between the PC and monitor.

The EDID is basically a 128 byte block. edid-rw alone is not enough to read and write to this block, you also need some supporting software.

Instructions

I assume you know how to open a terminal and execute commands as root.

1. Install Software

First download the edid-rw python script from GitHub

https://github.com/bulletmark/edid-rw

Then install the support software;

apt-get install python-smbus

apt-get install edid-decode

apt-get install ghex

edid-decode displays the raw EDID as readable text.

ghex is a hex code editor.

Also, make edid-rw excutable: i.e chmod 755 edid-rw

(To see the help text : ./edid-rw -h )

2. Display EDID info

To see the current EDID info from the monitor you must specify an i2c device number. This example uses 3, but you must experiment yourself find which is the your monitor i2c device number. I suggest you start from 0 and work you way up. An incorrect device# will give a program traceback and IO error.

Get the EDID data block and pipe it into a decoder to readable form;

./edid-rw 3 | edid-decode

If there are any errors, edid-decode will indicate so, it will also validate and display the last-byte checksum.

3. Modify the EDID

First get the raw block and save it to a file;

./edid-rw 3 > edid.bin

(You can also check the file using edid-decode; i.e cat edid.bin | edid-decode )

Edit the block using ghex;

ghex edid.bin

( It will help to set Ghex preferences with cursor offset as decimal. )

The complete EDID data block specification can be found on Wikipedia.

At this point only You will know how bad the block has been corrupted. If you are lucky you will be able to find a duplicate block on the web from somebody who has exactly the same monitor as you. If not, you will have to repair it byte by byte using the spec.

Often, it's just the case of a corrupted checksum (last byte of the file). The suggested checksum is always displayed by edid-decode, you can try using that. Another important part are bytes 38-39, this gives info of the first standard supported mode, e.g 1280x1024 @ 60Hz.

After editing your modifications, save it as edid-new.bin.

Run edid-new.bin through edid-decode to get the new checksum.

cat edid-new.bin | edid-decode

Edit again with ghex to poke in the new checksum.

ghex edid-new.bin

and save the file.

4. Burn in the new EDID

./edid-rw -w 3 < edid-new.bin

Be sure to use the same i2c device number.

Good Luck !

Hopefully, you can now reboot to your desired resolution.

Tip: I have found that you can still get the monitor to work even if edid-decode says "block does not conform" or "Bad year of manufacture".

That's all for now !

Comments

    0 of 8192 characters used
    Post Comment

    • profile image

      Bob 7 months ago

      I have a monitor with a corrupt checksum. I get to the end of your directions and try to write and I get an IO error. I know this is an old post, but do you have any idea why it would be giving an IO error?

    • profile image

      Michel 18 months ago

      My Viewsonic VX2025WM is working again. The EDID was all corrupted. Got a clean EDID from there http://www.komeil.com/blog/fix-edid-monitor-no-sig... changed serial/mfg date and uploaded it.

      Thank you !

    • profile image

      Conundrum 20 months ago

      This is also very handy if you have one of the infamous "WP enabled" panels which gets wrecked after a Windows 10 "upgrade".

      I've also found that laptop panels are also sometimes affected by this, typically manufacturers lock them to a specific make and model as well so changing out a panel with a slightly different version will sometimes cause a black screen/no backlight symptom.

    • profile image

      Tonatiuh Miramontes 21 months ago

      Hey, my old monitor has had this problem who knows since when and it turned a little catastrophic when KMS deprecated xorg.conf in Ubuntu about 2 years ago (I guess), polluting my logs and dmesg, and I've been just adding the xrandr lines to a script in order to have it working at full resolution, but that was dirty and machine-dependant.

      It's not been easy to get python-smbus under openSUSE, but a rpm from mageia did the trick :D

      My EDID looked rather OK, so I just changed the last byte and that was it, problem solved!

      Thank you very much for taking your time to write this guide!

    • profile image

      Marco Zirino 2 years ago

      First of all, thank you so much for taking the time to publish this. That is an amazing process (which fixed my monitor after hours of searching).

    • profile image

      emmanuel 3 years ago

      Gracias salvo mi monitor