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.

DS90UB929-Q1EVM: Is there any way to make HDMI interface to reinit programmatically via I2C

Part Number: DS90UB929-Q1EVM

Hi,

is there any way to make HDMI interface to reinit programmatically via I2C?

I want to upload my EDID structure to the DS90UB929 SRAM using I2C, but I have to replug HDMI cable to force these changes to take effect on HDMI source (PC). Is there any way to do this using only I2C interface?

I suppose the proper way is to toggle HPD pin. But writng to I2C Reset register (Reg addr 0x01) seems not affecting HPD pin.

  • Hello,

    I'm looking into the registers to see if this can be done.

  • I checked on the bench and doing an I2C register 0x01 reset will toggle the HPD.
  • Ok, if I load my new EDID and then write 0x10 into 0x1 register it does not affect HPD pin. I tried RESET0, RESET1 and HDMI Reset bits.

    Here's my config: Windows 10 PC -> HDMI -> SV600978 Devboard -> FPD-Link -> DS90UB926 -> 854x480 Screen

    After powering on I configure remote deserializer and screen via I2C. I see distorted image on the screen because PC sends 720p video stream. It sends 720p because of default SV600978 devboard EDID.

    Then I load my EDID into serializer SRAM. PC still detects devboard as 720p receiver. Here if I manually replug HDMI cable then PC detects devboard as 854x480 receiver.

    After loading my EDID if you try to reset using different bits on 0x01 register it does not help at all.

    The only thing that helps me to reinit HDMI without replugging is:

    1) set HPD pin to low for 1 second using GPIO cofigured as open-drain

    2) and then write 0x02 value (RESET1) to register 0x01

  • Hello,

    You can de-assert HPD with the following commands:

    0x48 = 0x01

    0x49 = 0x00

    0x4A = 0x00

    0x4B = 0x01

    0x4C = 0x00

    0x4D = 0x00

    0x4E = 0x00

    You can re-assert it with these commands:

    0x48 = 0x01

    0x49 = 0x00

    0x4A = 0x00

    0x4B = 0x01

    0x4C = 0x00

    0x4D = 0x00

    0x4E = 0x01

    Best Regards,

    Casey 

  • Hello.
    Nope. HDP pin didn't toggle after this commands.
    Where can I read about this "HDMI APB interface" and what is the purpose of these registers?
  • Hello,

    I just tried this on bench and I can verify it definitely does toggle HPD with the commands I provided. Can you verify that the RX_5V is detected at J16? It should have 5V on it when the HDMI source is connected. The HPD pin is open drain so it can only pull down, not drive high. On the EVM it is pulled up to 5V by the HDMI source.

    Best Regards,
    Casey
  • Hello,

    This code helped to resolve this issue:

    I2CRegWriteByte(Addr1, 0x40, 0x10);
    I2CRegWriteByte(Addr1, 0x41, 0x49);
    I2CRegWriteByte(Addr1, 0x42, 0x10);
    I2CRegWriteByte(Addr1, 0x42, 0x00);

    Thread.Sleep(200);

    I2CRegWriteByte(Addr1, 0x40, 0x14);
    I2CRegWriteByte(Addr1, 0x41, 0x49);
    I2CRegWriteByte(Addr1, 0x42, 0x10);
    I2CRegWriteByte(Addr1, 0x42, 0x00);