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.

DS90UB949-Q1: How to drive DS90UB949-Q1 HPD (Hot plug Detection) signal by registers configuration

Part Number: DS90UB949-Q1
Other Parts Discussed in Thread: ALP, USB2ANY

Tool/software:

Hi Team,

How can I drive the HPD (Hot plug Detection) signal using a DS90UB949-Q1 registers configuration?

I did not find documentation on ds90ub949-q1.pdf related to HDMI 

My final goal is to update a new EDID in SRAM (already done) and assert the HPD low and high to force the PC (HDMI source) to read the new display data without disconnect and re-connect the entire HDMI cable 

Thank you in advance for your support

  • Hi Alberto,

    You can use the below script to control the HPD output on the DS90UB949-Q1. 

    Best,

    Jack

    #### 929/949 HPD Control #####
    
    import time
    
    serAddr = 0x18
    HOT_PLUG_DETECT = 0x01000001
    HOT_PLUG_NOT = 0x01000000
    
    def AssertHPD():
        board.WriteI2C(serAddr, 0x48, 0x1)
        board.WriteI2C(serAddr, 0x49, 0x0)
        board.WriteI2C(serAddr, 0x4a, 0x0)
        board.WriteI2C(serAddr, 0x4b, HOT_PLUG_DETECT & 0xFF)
        board.WriteI2C(serAddr, 0x4c, HOT_PLUG_DETECT & 0xFF00)
        board.WriteI2C(serAddr, 0x4d, HOT_PLUG_DETECT & 0xFF0000)
        board.WriteI2C(serAddr, 0x4e, HOT_PLUG_DETECT & 0xFF000000)
        board.WriteI2C(serAddr, 0x54, 0x00)
    
    
    def DeassertHPD():
        BRIDGE_CFG = board.ReadI2C(serAddr, 0x54)
        board.WriteI2C(serAddr, 0x54, BRIDGE_CFG | 0x80)
        board.WriteI2C(serAddr, 0x48, 0x1)
        board.WriteI2C(serAddr, 0x49, 0x0)
        board.WriteI2C(serAddr, 0x4a, 0x0)
        board.WriteI2C(serAddr, 0x4b, HOT_PLUG_NOT & 0xFF)
        board.WriteI2C(serAddr, 0x4c, HOT_PLUG_NOT & 0xFF00)
        board.WriteI2C(serAddr, 0x4d, HOT_PLUG_NOT & 0xFF0000)
        board.WriteI2C(serAddr, 0x4e, HOT_PLUG_NOT & 0xFF000000)
        
        
    DeassertHPD()
    time.sleep(1)
    AssertHPD()

  • Hi Jack,

    I tried your script but it does not work on my ALP setup:

    *** Running 929-949 HPD toggle.py ***
    Traceback (most recent call last):
      File "<input>", line 1, in ?
      File "C:\_Letteratura\_PROGRAMMI\_MTA_GATE\MTA_Gate_Scripts\FPDLINKMTA\FPDLINK-F175PIP-1920x720\_COMMANDS\929-949 HPD toggle.py", line 32, in ?
      File "C:\_Letteratura\_PROGRAMMI\_MTA_GATE\MTA_Gate_Scripts\FPDLINKMTA\FPDLINK-F175PIP-1920x720\_COMMANDS\929-949 HPD toggle.py", line 29, in DeassertHPD
      File "C:\Program Files (x86)\Texas Instruments\Analog LaunchPAD v1.57.0010\Profiles\FPDL3Base\FPDLink3_Lib.py", line 1126, in WriteI2C
      File ".\Drivers\i2c_controllers\usb2any\python\usb2any_lib.py", line 400, in i2c_writeByteMult
      File ".\Drivers\i2c_controllers\usb2any\python\usb2any_lib.py", line 351, in HexToByte
    ValueError: invalid literal for int(): 0L
    *** Script execution time 0 min 0.172 sec ***
    >

    Best Regards

    Alberto Neri

  • Hi Jack,

    Starting from your example I prepared this code that works on my setup:

    ##ser 949 - HPD toggle commands

    ##import for delay
    import time

    ##Serializer and Deserializer I2C addresses
    Ser_I2C_8bit_addr   = 0x18;
    Des_I2C_8bit_addr   = 0x58;

    ##Serializer main registers addresses
    BRIDGE_CTL         = 0x4F;
    BRIDGE_CFG         = 0x54;
    APB_CTL         = 0x48;
    APB_ADR0         = 0x49;
    APB_ADR1         = 0x4A;
    APB_DATA0         = 0x4B;
    APB_DATA1         = 0x4C;
    APB_DATA2         = 0x4D;
    APB_DATA3         = 0x4E;

    ##Deassert HPD
    board.WriteI2C(Ser_I2C_8bit_addr,APB_CTL                        ,0x01)
    board.WriteI2C(Ser_I2C_8bit_addr,APB_ADR0                       ,0x00)
    board.WriteI2C(Ser_I2C_8bit_addr,APB_ADR1                       ,0x00)
    board.WriteI2C(Ser_I2C_8bit_addr,APB_DATA0                      ,0x01)
    board.WriteI2C(Ser_I2C_8bit_addr,APB_DATA1                      ,0x00)
    board.WriteI2C(Ser_I2C_8bit_addr,APB_DATA2                      ,0x00)
    board.WriteI2C(Ser_I2C_8bit_addr,APB_DATA3                      ,0x01)
    board.WriteI2C(Ser_I2C_8bit_addr,BRIDGE_CFG                     ,0x00)

    time.sleep (0.100)

    ##Assert HPD
    BRIDGE_CFG_value = board.ReadI2C(Ser_I2C_8bit_addr, BRIDGE_CFG)
    board.WriteI2C(Ser_I2C_8bit_addr, BRIDGE_CFG, BRIDGE_CFG_value | 0x80)

    board.WriteI2C(Ser_I2C_8bit_addr,BRIDGE_CFG                     ,0x80)
    board.WriteI2C(Ser_I2C_8bit_addr,APB_CTL                        ,0x01)
    board.WriteI2C(Ser_I2C_8bit_addr,APB_ADR0                       ,0x00)
    board.WriteI2C(Ser_I2C_8bit_addr,APB_ADR1                       ,0x00)
    board.WriteI2C(Ser_I2C_8bit_addr,APB_DATA0                      ,0x00)
    board.WriteI2C(Ser_I2C_8bit_addr,APB_DATA1                      ,0x00)
    board.WriteI2C(Ser_I2C_8bit_addr,APB_DATA2                      ,0x00)
    board.WriteI2C(Ser_I2C_8bit_addr,APB_DATA3                      ,0x01)
    board.WriteI2C(Ser_I2C_8bit_addr,BRIDGE_CFG                     ,0x00)