Close
0%
0%

EDID Inserter

Boot to best resolution for all sources behind KVM or matrix switch,emulate E-EDID to fix display&audio issues even where there's no monitor

tenTEN
Similar projects worth following
PCs and other video sources often have trouble setting the most appropriate screen resolution (and audio features on HDMI or DisplayPort).
Whether you're using the latest&greatest flat-screen TV, projector or mostly no monitor at all (e.g. for VNC remote access at AMT or OS level):
In the worst case your picture will stay or go dark until the source's next reboot just because the sink is disconnected (even only momentarily).
HDMI audio routed through an amp (or decoded in the screen) can additionally make speaker configurations disappear when that (part of the) sink is switched off, or confuse an OS to the point of freezing.
With most KVM or matrix switches, one runs into these issues all the time.
This project is about a 1$ fix to that million-dollar problem. ;) Since it's tiny too, this is huge.

References to earlier prototypes have been popping up ever since I ruthlessly slit DVI cables to force DIL8s onto some of their pins a decade ago:

https://www.google.com/search?q=EDID+Inserter

Surprisingly the EDID Inserter hasn't become an off-the-shelf item over the years, probably because most have the problem at (or rather from) some point in time (and of their wiring) but cannot fathom this is what solves it (and even exists).

With every new generation of connectors, HDMI, DisplayPort and then their Mini and Micro incarnations, the pitch keeps shrinking further towards the physical limits of my vision ... and soldering station.

Now that the current crop of equipment requires DisplayPort and HDMI sources to be connected to an HDMI screen through the trusty old DVI KVM switch in one place, and a 4*2 HDMI matrix in another (i.e. in a configuration as depicted for the "less affordable" http://www.altronics.com.au/p/a3610-edid-ghost-emulator-writer-hdmi in the bottom diagram), I had to resort to the surface-mounted SOIC version to keep using the Microchip 24LC22A 256*8-bit E-EDID EEPROM: http://ww1.microchip.com/downloads/en/DeviceDoc/21683B.pdf

Alternatives might be the STMicroelectronics M24C02 at even smaller pitches and wider voltage ranges http://www.st.com/content/ccc/resource/technical/document/datasheet/b0/d8/50/40/5a/85/49/6f/DM00071904.pdf/files/DM00071904.pdf/jcr:content/translations/en.DM00071904.pdf,

or ON Semiconductors CAT24C208 for one with (DIP-)switchable memory banks http://www.onsemi.com/pub_link/Collateral/CAT24C208-D.PDF.

Arduinos have been considered for emulation since http://media.blackhat.com/bh-eu-12/Davis/bh-eu-12-Davis-HDMI-WP.pdf (pages 14, 20 et seq.), cf. http://www.chrisbot.com/i2c-and-monitor-ddc.html and
https://forum.arduino.cc/index.php?topic=359255.0, but they end up being bulkier and probably only required for the trickiest cases.

Our circuit will thus be as simple as (or even the bare IC more simple than) this:

We can't be sure the monitor (sink) will power our EEPROM over the entire length of the video cable even when off.

So we'll want to be near the PC's video output (source) with a better chance to make the savings on capacitor (datasheet recommendations notwithstanding) and pull-ups (still required with DVI, but can apparently be expected internal to HDMI outputs these days) as imposed by the constraints of space.

Assumptions such as "video card was not putting out enough power for the chip" in http://www.mtbs3d.com/phpBB/viewtopic.php?f=26&t=19607#p152335 might actually indicate insufficiently stabilized voltage, i.e. need for a capacitor at the far (monitor) end.

Some superbly skilled solderers may want to integrate the EEPROM directly into a DisplayPort converter such as http://www.ebay.com/itm/Display-Port-DP-Male-To-HDMI-Female-Adapter-Converter-Adaptor-for-HDTV-DL-/291663354747: Only plugs properly (on my gear at least) with the plastic shell removed anyway, and based on the ParadeTech PS8121E, which actually buffers EDIDs itself but cannot be programmed to keep them across power cycles (unplugging) with the scarce information from its Product Brief http://paradetech.wpengine.netdna-cdn.com/wp-content/uploads/2009/06/PS8121E-Product-Brief-20111020.pdf.

For those who prefer wires to work on, and in any application that requires a more flexible HDMI in-line EDID Inserter, the rotating plug adaptors come in handy at just above a dollar, e.g. http://www.ebay.com/itm/180-HDMI-1-4-HDMI-Male-to-HDMI-Female-90-270-Rotating-Adapter-Connector-HDTV/162211579564 - my most recent prototypes are based on these, which allow one of the 4 plastic shell halves to be removed fairly easily (as in my pictures).

If you need HDMI to DVI on the far (monitor) end of the cable (probably requiring the pull-up resistors and capacitor as above), the RocketFish RF-G1174 https://www.rocketfishproducts.com/pdp/RF-G1174/9205898 might be suitable and a little more spacious, if you can get hold of one (maybe only in the US...

Read more »

  • 1
    Step 1

    The DVI to HDMI Pinout Schematic http://goo.gl/sN0o27 shows the front view of a female connector which of course at the same time depicts the PCB-side pinout of a male plug viewed from rear.

    When a suitable platform has been found and pried open...

    ...we'll have to cut the I²C (SCL and SDA) lines a centimeter or so from the rear of the male HDMI connector's pins 15 and 16.

    The respective stub of wire remaining at the connector is then soldered to the 24LC22A's pins 5 for SDA and 6 for SCL
    (counting counter-clockwise as usual from the notch on the IC's marked top, i.e. near the bottom right pin in the picture below).

    The electrical insulation from the DDC Ground and +5V wires (which will not be cut) is cautiously removed (mechanically or by heating) just as far as necessary and the bare wire below exposed and solder-tinned...

    ...so that the opposing corners of the IC can be soldered to make contact: DDC Ground wire 17 to pin 4 of the IC, +5V wire 18 bridging both pins 7 and 8 (so the VCLK pulled high will keep the EEPROM write-enabled).

    Once finished and with all necessary insulation restored, the circuitry is shrink-wrapped or the connector snapped shut again.

  • 2
    Step 2

    Before plugging in the freshly minted EDID Inserter (my last picture shows one dangling from a "3 in 1 Display Port DP Male to HDMI/DVI/VGA Female Adapter" off eBay, the case of which could also house our EEPROM of course),

    check that the sink with the most appropriate EDID is connected and detected.

    If it is connected through an amplifier that adds audio decoding to the E-EDID information,
    make sure this switched on and doing its magic on the HDMI as well.

    On Windows, you'd need a programming software, e.g. the special version of PowerStrip as in http://forums.entechtaiwan.com/index.php?topic=1970.msg21481#msg21481 for the following.

    Linux will let you take the risks (that you alone choose to bear) for free.

    In the Debian/Ubuntu example below, the numbers may vary from system to system.

    The eeprom module most conveniently dumps the E-EDID, but has to be removed again before running the i2ctools it's incompatible with:

    xrandr --verbose -q
    sudo apt install i2c-tools
    sudo modprobe eeprom
    cp /sys/bus/i2c/devices/3-0050/eeprom ~/E-EDID_EEPROM.bin
    sudo rmmod eeprom
    modprobe i2c-dev
    hexdump -C ~/E-EDID_EEPROM.bin
    sudo i2cdetect 3
    sudo i2cdump 3 0x50

    In the outputs from the above, you should see 3 (bytewise identical) dumps of the actual 256kB E-EDID you want. Tellingly the monitor/projector manufacturer's ID and model are going to show up in the right-hand (ASCII) side of the hexdump.

  • 3
    Step 3

    Plug in the freshly minted EDID Inserter and a repeated invocation of the following should yield only 256 FFs typical of an EEPROM fresh from the factory:

    sudo i2cdump 3 0x50

    Dire admonitions are issued even when merely trying to read:

    No size specified (using byte-data access)
    WARNING! This program can confuse your I2C bus, cause data loss and worse!
    I will probe file /dev/i2c-3, address 0x50, mode byte
    Continue? [Y/n] 
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
    00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
    f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................

View all 4 instructions

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates