This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TFP401A: TFP401APZP - Implementing HDMI-EDID using external EEPROM - EDID communication Issues

Part Number: TFP401A

I am designing a HDMI to LVDS Bridge, and am using the TFP401APZP and DS90C387VJDX/NOPB to achieve this.

I am using my computer as a HDMI source and need to exchange the EDID of the TFT i am using. I have been able to retrieve the EDID from the TFT sucessfully.

I am now attempting to use an external EEPROM - M24C02-WMN6TP to store the EDID and transmit it to the computer upon Hot-Plug-Detect going high.

This is where I receive a behaviour i do not understand from my EEPROM. When the HDMI cable is connected it requests the last address (0x7F) of EDID and only the last address. If the last address changes then it will request the new highest address. I do not understand why only the last address is requested. This request and exchange of the last byte occurs 5 times seperated by about 100ms.

When i monitor the EDID exchange on a working screen it looks very differently. The source requests the first address (0x00) about 2 times, and then on the third time the entire 128-Byte data block is transferred and the display begins to display.

To be clear, i am only trying to get the PC to detect that a screen is present. I do not have TFP401APZP or DS90C387VJDX/NOPB currently soldered onto my PCB - The EDID should however be read regardless and it should be displayed on my PC as another monitor correct?

Q1) Is there something different about using my external EEprom and the EEprom thats within the working screen?

Q2) I have an STM32 MC to program the EDID onlo to the EEprom, effectively having a 2-master I2C network, could this cause any issues?

Q3) What am i doing wrong using the external EEprom which results in the HDMI source not even reading the data properly?

Thank you for any insight into my problem, I look forward to hearing from you.

Image Below is the trace from a working scree, showing that data begins from 0x00 and the entire 128-Byte block is transmitted after 2 failed attempts.

Image below is the trace from my design. as you can see, there are very large time lapses between seperate attempts (next attempt is identical but 100ms to the right), and also that the source requests the last byte only? why is the 128-Byte data not transmitted properly?

I have also attached the circuit below:

1258.Circuit.pdf

  • Hi,

    Do you have a EEPROM that can be set to a 7-bit slave address of 0x50h?

    Thanks

    David

  • Hi David,

    I'm using the M24C02-FMN6TP which can be set to address 0x50 by using 0xA0 (all explained in the datasheet).

    Im able to write data to the eeprom and for some reason when the hdmi is connected it only reads the last byte. 

    I'm confused as to what I've done wrong, I've checked the hardware, components and the EDID addressing and everything seems in order.

    I'd appreciate it if you could give me some insight into what could be causing it.

    Thank you 

    Kacper

  • Kacper

    The HDMI_SCL and HDMI_SDA need to be pulled up to HDMI_+5V through the pull-up resistor, and not the 3.3V.

    If this does not work, can you switch to this EEPROM, https://www.digikey.com/en/products/detail/microchip-technology/24LC02BT-I-OT/443519?

    Thanks

    David

  • Hi David,

    I have changed the pull up voltage to HDMI +5V and it made no difference. The waveform remained the same as in my very first post in this thread.

    The EEprom you recommended is out of stock everywhere, can you please recommend another one so im certain thats not causing the issue.

    However i do not see why it would be the EEprom itself, as the M24C02-WMN6TP is addressed using a single byte, is there a specific type of addressing for HDMI I2C that im not meeting? - however how would this result in only the very last byte of the EEprom being read every time?

    Regards,

    Kacper

  • Kacper

    This EEPROM looks to be in stock at Digikey and support Enhanced EDIDTm (E-EDIDTm) 1.3.

    Thanks

    David

  • Hi David,

    24LC02BT-I/OT is not currently in stock and i would need to wait 3 weks for the next delivery.

    Am i able to use 24LCS22A - 2K VESA® E-EDID Tm Serial EEPROM?

    www.mouser.co.uk/.../21683a-25839.pdf

    My only issue with this part is that im unsure how to connect it directly to the HDMI connector so that the Source can read the EDID, while also having the option to reprogram the EEprom with new data.

    How should i change the schematic connections to accomodate the VCLK pin and also having the I2C pins (SCL & SDA).

    Would i just connect the HDMI and Microcontroller SDA lines together to the EEprom? And then connect the SCL from EEprom only to the Microcontrollers SCL, while the VCLK pin to the HDMI SCL pin?

    en.wikipedia.org/.../HDMI

    I would appreciate some insight into how to use these devices please.

    Best Regards,

    Kacper

  • Kacper

    Do you have a way to program this EEPROM externally and then put it on your board?

    Thanks
    David

  • Hi David,

    I have an stm32 MC connected to the EEPROM in parallel with the hdmi connector. Allowing the MC to program it and the hdmi source to read it.

    Is the MC in parallel a problem? The I2C allows for multiple masters.

  • Hi,

    It depends on the HDMI source I2C master behavior. I would remove the MC from the bus to make sure it does not cause issue with the HDMI source.

    Thanks

    David

  • Hi David,

    The first trace I posted of the EDID error was taken without the MC present on the I2C bus. The issue is certainly between the EEPROM and HDMI source.

    I can try swapping the EPROMS, would the one I asked questions about suffice? How would I connect it to HDMI with the additional CLK pin?

    Unfortunately the EEPROMS you suggested are out of stock for now, and I would like to have this issue resolved, I've tried everything I can think of.

    I tried using 258 byte EEPROMS, and EEPROMS that are much larger.

    I have tried to include and exclude the microcontroller on the bus while the EDID exchange occurs. Everything I have found online I have tried, is there anything you can suggest? I would really appreciate it.

    Thank you and best regards - kacper

  • Kacper

    Are you using the same EDID when using the external EEPROM? Register 0x7F is the Checksum Byte and it needs to contain a value such that a checksum of the entire 128-byte BASE EDID equals 00h. I am wondering if the source is reading 0x7F first to make sure the Checksum Byte is correct.

    Thanks
    David

  • Hi David, 

    Thank you for your reply,

    I read the EDID from the AD board supplied with the TFT and saved registers 0x00 to 0x7F from that EDID (all other registers were 0x00).

    I proceeded to save the value of each register to the same address in the EDID. 

    The difference I'm seeing when I sample the AD board EDID upon hdmi connection, is that it starts to read from address 0x00 up to 0x7F. So I'm not sure why by EEPROM starts from 0x7F.

    I have attached a picture I took of the data I read from the AD board for reference. 

     Thank you for your help,

    Best Regards,

    Kacper

  • Kacper

    Can you post the picture to this e2e thread? I am wondering for EDID, you have to use a specific EEPROM for EDID purpose. As I was looking through the M24C02-FMN6TP EEPROM datasheet, I did not see anything that can explain why the host will read the 0x7F first. This is why I think we may have to use a particular EEPROM that calls out support for EDID.

    Thanks

    David 

  • Hi David I have attached the I2C trace again. It shows that the HDMI source is trying to read the data, but its requesting data from the very last byte first (and then nothing afterwards). Im my Trace you can see it asks for byte 0xFF as this was the lasy byte in my EDID, i have since tried to change to 0x7F but i receive the same behavious, only it asks for address 0x7F instead.

    I have tried looking for some EEproms that allow EDID, however they all utilise an additional pin called Vclk when the device is in transmit mode, and then it uses the SCL bus when writing.

    Can you please advise an EEprom to try thats readily available and doesnt require weeks of waiting for stock. Thank you

    The reason i went ahead with using the M24C02 is because there are many online examples of people using this device for EDID I have attached a link below of one such example, maybe im misunderstanding something, i would really appreciate your insight.

    blog.danman.eu/.../

    Thank you for your help, i really appreciate it.

    Best Regards,

    KAcper

  • Hi Again,

    All the E-EDID EEproms im finding require the HDMI source to use a Vclk line to provide the clock for tranmitting the data. Does this look like a device that can be used in my design? If so, what provides the Vclk signal, as all my Microcontroller has are SDA and SCL I2C pins.

    ww1.microchip.com/.../21682E.pdf

    Thank you again,

    Kacper

  • Kacper

    There is a note in the datasheet that "Vsync signal is normally used to derive a signal for VCLK pin on the 24LCS22A.".

    Thanks

    David