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.

DS90UB954-Q1: Steps for Enabling the BIST

Part Number: DS90UB954-Q1
Other Parts Discussed in Thread: DS90UB953-Q1, , ALP

I was wondering if anyone can help me out in setting up the BIST (Enabling the BIST) on the deserializer DS90UB954-Q1 and troubleshooting the issues on the serializer DS90UB953-Q1.

  • Hi, we have description on how to set the BIST test in the 954 d/s, you can refer to it. also one example is provided based on TI's EVM board test script (under ALP tool).

    ## BIST_953_954_Eanble.py
    ######################
    ##
    ## This script file is used to check the link between the 953 and 954
    ##
    ## The Built In Self Test (BIST) generates a puesdo random sequence
    ## and checks for CRC errors between transmitted and received sequence.
    ##
    ## Rev. 1.1
    ## Added Parity Errors, restructured code

    ######################

    import time

    #Define 954 and 953 Adresses
    UB953 = 0x18 #953 SER Alias ID, check 0x5C on 954 for confirmation
    UB954 = 0x60 #954 Device ID, check 0x00 on 954 for confirmation

    #Digital Reset except for registers
    board.WriteI2C(UB953, 0x01, 0x01) #Resets 953
    time.sleep(0.5)
    board.WriteI2C(UB954, 0x01, 0x01) #Resets 954
    time.sleep(0.5)

    #Port selection, Passthrough, and aliasing
    board.WriteI2C(UB954, 0x4C, 0x01) #Enable Port 0 writes
    hex(board.ReadI2C(UB954, 0x4c))
    board.WriteI2C(UB954, 0x58, 0x5E) #I2C Pass through Enabled and BC = 50Mbps
    board.WriteI2C(UB954, 0x5C, 0x18) #953 Alias defined as 0x18

    #Confirm Devices can communicate with each other
    print ("954 Device ID (0x00):", hex(board.ReadI2C(UB954, 0x00, 1))) #954 Device ID, should be 0x7A, check 0x00 for confirmation
    time.sleep(0.5)
    print ("953 Device ID (0x00):", hex(board.ReadI2C(UB953, 0x00, 1))) #953 Device ID, should be 0x30, check 0x5B for confirmation

    print ("------------------------------------------------------------------")
    time.sleep(0.5)

    hex(board.ReadI2C(UB954, 0x04, 0x1)) #0x04 is DEVICE_STS of 954
    time.sleep(1)


    #Clear Errors and Error Count
    board.WriteI2C(UB953, 0x49, 0x28)
    hex(board.ReadI2C(UB953, 0x79, 1)) #Clear possible BCC_Error by Reading BCC Error Status
    hex(board.ReadI2C(UB953, 0x52,1)) #0x52 is GENERAL_STS of 953
    hex(board.ReadI2C(UB953, 0x54, 1)) #0x54 is BIST ERR CNT

    # Enabling BIST, Error, and Lock-Change Status
    print ("Read BIST CTL register (0xB3) Before BIST ENABlED", hex(board.ReadI2C(UB954, 0xB3, 1)))
    print ("Should read 0x00 or 0x08\n")

    board.WriteI2C(UB954, 0xB3, 0x01)


    print ("Read BIST CTL (0xB3) register After BIST ENABLED", hex(board.ReadI2C(UB954, 0xB3, 1)))
    time.sleep(0.25)
    print ("------------------------------------------------------------------")
    hex(board.ReadI2C(UB954, 0x4D,1))
    hex(board.ReadI2C(UB953, 0x52,1))
    board.ReadI2C(UB954, 0x04, 0x1)
    board.ReadI2C(UB954, 0x4d, 0x1)
    board.ReadI2C(UB954, 0x4e, 0x1)

    print ("953 Device ID (0x00):", hex(board.ReadI2C(UB953, 0x00, 1))) #953 Device ID, should be 0x30, check 0x5B for confirmation,
    print ("Usually use this to see if 954 is stuck in BIST mode")

    # Clear BIST Errors on 953
    board.WriteI2C(UB953, 0x49, 0x28)
    #0x49 is BC_CTRL. 0x28 selects BIST_CRC ERR CLR and CRC ERR CLR

    Steven
  • By any chance is it possible to check the status of the serializer via deserializer through I2C commands.
  • yes, you can check the I2C over FPD-Link application note in www.ti.com.
    to enable the remote i2c access, you need set:
    1. enable pass-through setting
    2. set the alias
    3. visit the I2C with alias ID

    regards,
    Steven
  • I was wondering if you have any set commands for I2C in-order to perform this actions;
    1. enable pass-through setting
    2. set the alias
    3. visit the I2C with alias ID
  • Yes, you can visit www.ti.com to get the 954 d/s, which has example on i2c over FPD-Link. one example is copied here:

    7.5.5.1 Code Example for Broadcast Write
    # "FPD3_PORT_SEL Boardcast RX0/1" // if you select port0, you should set the 0x4c as 0x01.
    WriteI2C(0x4c,0x0f) # RX_PORT0 read; RX0/1 write
    # "enable pass through"
    WriteI2C(0x58,0x58) # enable pass through
    WriteI2C(0x5c,0x18) # "SER_ALIAS_ID", //Note: next time when you access the 953 module linked with the assigned port, the 953's ID address is 0x18. this example is for broadcast, both the 953 ID addr. linked with port0 and port1 are 0x18.

    WriteI2C(0x5d,0x60) # "SlaveID[0]"
    WriteI2C(0x65,0x60) # "SlaveAlias[0]"
    WriteI2C(0x7c,0x01) # "FV_POLARITY"
    WriteI2C(0x70,0x1f) # RAW10_datatype_yuv422b10_VC


    best regards,
    Steven
  • how I can read status from the serializer.

    For example, when i try
    i2cget -f -y 7 0x18 0x00
    Error: Read failed

    How I can communicate to the serializer.

  • You can try:

    ReadIC(953Alias, register).

    best regards,

    Steven