Hello. I started a personal project where i design a device that includes these 2 functions:
1) Read/sniff the EDID data of a Displayport downsteam device (i.e. a PC monitor)
2) Emulate the EDID data to the upstream device (i.e. a GPU)
I plan on using an Arduino Micro for several reasons:
- Cheap, readily available and easy to program
- Built-in USB so a PC can be used to read/write data to without any extra components
- Has ADC0/ADC1 pins exposed unlike Pro Micro explained below
From what i understand so far EDID data on Displayport are transmitted via the AUX Differential Pair of which has 2 available modes for operation (page 329):
- 1Mbps Manchester-II code
- 720Mbps FAUX 8B10B encoding
Now consider the standard link:
GPU<----Monitor
For snooping, i just hook the AUX pair from the Monitor to the Arduino using the dedicated differential pair input available on: ADC0/ADC1 negative, ADC4..13 positive (that's why i need ADC0/1 exposed, page 298).
This should work fine (at least for the 1Mbps mode). No idea how the ADC input impedance will affect the signal however.
For the EDID emulation, i place a USB switch IC (USB3740B, just what i have in hand and should work for this) in order to modify the topology to:
GPU<----Switch<----Monitor
^--------Arduino
This is so i can switch the EDID data the GPU receives between the Monitor and the Arduino.
However, i am unsure which output pins are the most suitable to be used successfully with the Arduino in order to generate a differential output signal. I cannot find any info about it. I'll probably have to write to the output registers directly at the same time and do tricks to get the timing right?
Also i'll need a level shifter in between to drop to 3.3V signaling (i think), consider any bias voltage, and use the correct termination.
Maybe i need to use some kind of converter/driver instead.
As for the actual data being transmitted it looks like they are essentially I2C encoded SCL+SDA data but transferred over using the AUX differential pair link. It's called "I2C-over-AUX" in the documentation.
I am lost on this but since it's just software it can be done anytime. I just need to get the hardware right first (in fact i am preparing a 4-layer pcb as we speak).
Datasheets:
Displayport v1.2 standard:
https://glenwing.github.io/docs/DP-1.2.pdfATmega32U4:
https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7766-8-bit-AVR-ATmega16U4-32U4_Datasheet.pdfUSB3740B:
http://ww1.microchip.com/downloads/en/DeviceDoc/00001725D.pdfArduino Micro:
https://content.arduino.cc/assets/Pinout-Micro_latest.pdfhttps://content.arduino.cc/assets/arduino_micro_schematic.pdf