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.

RTOS/TDA2PXEVM: Serializer and Sensor not getting detected using I2C Back channel

Part Number: TDA2PXEVM
Other Parts Discussed in Thread: AWR1243, ALP, USB2ANY

Tool/software: TI-RTOS

Hello,

I am testing the radar satellite configuration using 1 AWR1243 Sensor boost->Customized daughter board with UB953 and I2C-SPI Bridge->Coax cable-> Fusion Board+TDA2PX EVM Setup.

I do not have GPIO Expander in my customized board but I am using the GPIOs available in SPI-I2C bridge to perform the SOP4 function (TDO, PMICOUT and SYNCOUT) and UB953's GPIO for WarmReset and NERROR_IN operation. 

When I run the radar usecase using single AWR124-FFT-Display (usecase 3) with 1 radar in 2G Mode using Normal configuration, I am able to detect and initialize the UB960 Successfully but it is not able to communicate with the Serializer and Sensor. I think it is not able to perform I2C read or write operation with the Serializer through FPD-Link coax cable. As per the datasheet, the 8-Bit I2C address is 0x30, which is same as the address that is used in the software in "bsputils_ub960.c" file in the function 'BspUtils_Ub960I2cParams gUb960Cfg_D3AR1243[]'. I tried changing the serializer address to 0x32, but it is still giving me the same error and it is not able to communicate with the Serializer. According to one post in e2e forum, another user was also facing the same issue and he felt that the SerDes communication was not getting established at 50MHz frequency and it was working for him at 25 Mhz. However, I tried both back channel frequencies and I am still facing the same problem. The Log files are given below:

[IPU1-0]     33.228359 s: CHAINS: UB960 is configured for 2Gbps Mode

[IPU1-0]     33.228481 s: Using AR12xx

[IPU1-0]     33.228725 s: Detected UB960 !!!

[IPU1-0]     35.138321 s:

[IPU1-0]     35.138595 s: i2cMdSubmitChan: i2c4 transfer to slave address 0x74 failed             //0x74 is the Serializer Alias address as mentioned in the code

[IPU1-0]     35.138717 s: src/bsp_deviceI2c.c @ Line 580:

[IPU1-0]     35.138809 s: I2C4: DEV 0x74: WR 0x0e = 0xd2 ... ERROR !!!                                 //I am trying to write 0xd2 value in Register 0x0E in Serializer alias address 0X74 

[IPU1-0]     35.138900 s: src/bsp_deviceI2c.c @ Line 602:

[IPU1-0]     35.138992 s: I2C4: Error timeout 1 ms!!!

[IPU1-0]     35.139083 s: src/bsputils_ub960.c @ Line 1542:

[IPU1-0]     35.139144 s: Could not configure UB913 Ser !!!

[IPU1-0]     35.140730 s: src/bsputils_ub960.c @ Line 1350:

[IPU1-0]     35.140822 s: Failed to probe serializer at alias: 74 | status: -1

[IPU1-0]     35.142164 s: src/bsputils_ub960.c @ Line 1359:

[IPU1-0]     35.142286 s: Failed to probe sensor at alias: 40 | status: -1                                           //0x40 is the Sensor Alias Address 

[IPU1-0]     35.143018 s:

[IPU1-0]     35.143353 s: i2cMdSubmitChan: i2c4 transfer to slave address 0x40 failed

[IPU1-0]     35.143475 s: src/bsp_deviceI2c.c @ Line 667:

[IPU1-0]     35.143536 s: I2C4: DEV 0x40: ERROR !!!

[IPU1-0]     35.143628 s: src/bsp_deviceI2c.c @ Line 689:

[IPU1-0]     35.143719 s: I2C4: Error timeout 1 ms!!!

[IPU1-0]     35.143811 s: radar_ar12xx/src/bspdrv_ar12xxPriv.c @ Line 119:

[IPU1-0]     35.143902 s: AR12XX: Radar Device Power On failed!!

[IPU1-0]     35.143963 s: Assertion @ Line: 273 in C:/New_Vision_SDK_3_05/vision_sdk/apps/src/rtos/radar/src/common/chains_common_ar12xx.c: SYSTEM_LINK_STATUS_SOK == retVal : failed !!!

[IPU1-0]     35.144970 s: Assertion @ Line: 273 in C:/New_Vision_SDK_3_05/vision_sdk/apps/src/rtos/radar/src/common/chains_common_ar12xx.c: SYSTEM_LINK_STATUS_SOK == retVal : failed !!!

Could you help me with this problem? I am getting 3.3V and 1.8 V in my Serializer daughter board through FPD-Link coax cable. I checked the voltages at UB953 Physically and they seem correct. The i2c Voltages are pulled up to 3.3V. At VDD1_CAP, VDDDRV_CAP and VDDPLL_CAP, the voltage is very low (approx 0.2V). I am not sure if this is what you are supposed to get in these 3 terminals. The Mode is selected for synchronous mode of operation. Could you tell me how to read the register values in UB953? I tried using "Bsp_deviceRead8" function but since the i2c address of UB953 Seems problematic, it is not able to read anything. How would you read the register values in 953 Serializer through FPD-Link?

I look forward to your response.

Best Regards,

Nishant

  • Hi Nishant,

    The UB953 I2C Slave address is configured via the IDx pin. Please refer to UB953 datasheet for the IDx pin table to determine the correct slave address to used based on PU/PD resistors ratio is used on HW.

    Could you check the error status registers from UB960? BCC_STATUS (0x47), RX_PORT_STS1, RX_PORT_STS2.
    You can check if there is any link error from FPD-Link.
    If a stable link is not established between UB960 and UB953 over FPD-Link connection, you won't be able to read UB953 registers.

    Regards,
    Stanley
  • Hello Stanley,

    I have chosen the resistors such that it corresponds to IDx3 values as per the datasheet, hence I believe the address of the serializer should have been 0x30. I tested the target voltage obtained across the resistor to confirm the voltage across IDx pin in UB953.

    How would you recommend I check the register values in UB960? Should I use ALP tool for debugging? Do I need to have USB2ANY device for using ALP? Also, which connector should I use in my fusion board? Do I need to use J15 Aardvark I2C connector or should I use J11 and make S3 [3] Switch to OFF for debugging?

    I look forward to your reply. Thank you!
    Best Regards,
    Nishant
  • Hi Nishant,

    Use Aardvark I2C tool is probably the easiest way. You have to pull I2C_SW_EXTERNAL pin HIGH to enable the I2C path to J15.
    Another way will be using Bsp_deviceRead8() to read UB960 registers in the code to dump the value.

    Regards,
    Stanley
  • Hello Stanley,

    Thank you for your help. I used Bsp_deviceRead8() to read the UB960 Registers and I got the following values:
    BCC_STATUS (0x47)- 0x00
    RX_PORT_STS1- 0xc0
    RX_PORT_STS2- 0x02
    I implemented this function right after Bsp_deviceWrite8() function inside BspUtils_appInitUB913Ser() function. The code is given below:

    Int32 BspUtils_appInitUB913Ser(UInt32 instId, UInt32 portId, BspUtils_Ub960I2cParams* i2cPrms,UInt32 numRegs)
    {
    Int32 retVal = BSP_SOK;
    UInt32 nIdx;
    UInt32 i2cDevAddr;
    UInt32 count;
    const UInt8 regis4=0x47;
    const UInt8 regis5=0x4D;
    const UInt8 regis6=0x4E;

    if (BSPUTILS_UB960EVM_MAX_PORTS > portId)
    {
    i2cDevAddr = gSlaveAliases[instId].rSlave1Addr[portId];
    }
    else
    {
    GT_0trace(BspAppTrace, GT_ERR,
    "Wrong instance of UB913 Ser !!!\r\n");
    retVal = BSP_EFAIL;
    }

    for (nIdx = 0U; ((nIdx < numRegs) && (BSP_SOK == retVal)); nIdx++)
    {
    retVal = Bsp_deviceWrite8(UB960_ACCESSIBLE_FROM_I2C_INST, i2cDevAddr, &(i2cPrms[nIdx].nRegAddr), &(i2cPrms[nIdx].nRegValue), (UInt32) 1U);
    if (retVal != BSP_SOK)
    {

    UInt8 ret4,ret5,ret6=0;
    Int32 retVal2 = BSP_SOK;

    retVal2= Bsp_deviceRead8( UB960_ACCESSIBLE_FROM_I2C_INST, UB960_SLAVE_ADDR, &regis4, &ret4, (UInt32) 1U);
    if (retVal2 == BSP_SOK)
    {
    GT_1trace(BspDeviceTrace, GT_ERR, "Inside Serializer Loop- BCC Status Register: 0x%02x \r\n", ret4);
    }

    retVal2= Bsp_deviceRead8( UB960_ACCESSIBLE_FROM_I2C_INST, UB960_SLAVE_ADDR, &regis5, &ret5, (UInt32) 1U);
    if (retVal2 == BSP_SOK)
    {
    GT_1trace(BspDeviceTrace, GT_ERR, "Inside Serializer Loop- RX_PORT_STS1 Register: 0x%02x \r\n", ret5);
    }

    retVal2= Bsp_deviceRead8( UB960_ACCESSIBLE_FROM_I2C_INST, UB960_SLAVE_ADDR, &regis6, &ret6, (UInt32) 1U);
    if (retVal2 == BSP_SOK)
    {
    GT_1trace(BspDeviceTrace, GT_ERR, "Inside Serializer Loop-RX_PORT_STS2 Register: 0x%02x \r\n", ret6);
    }
    GT_0trace(BspAppTrace, GT_ERR,
    "Could not configure UB913 Ser !!!\r\n");
    break;
    }

    Based on the RX_PORT1_SRS1 register value [7:6], It is displaying the RX port 3's status. As per logic, shouldn't it have displayed Port 0s value?There doesn't seem to be any error flag here but the FPD-CLK seems to be missing I guess. How do I check for RX Port 0s status?

    Thank you!
    Best Regards,
    Nishant

  • Hello Stanley,

    So I debugged the circuit today using the oscilloscope and I found that UB960 U1 on the fusion board is getting the I2C Signals correctly from the TDA2PX board, but the output DOUTP from UB960 is just a DC voltage of 5V (power) and that there is no change in signal corresponding to I2C Read/write commands to remote I2C Device UB953. This means that there seems to be a mistake in the register settings of UB960, in the way it is forwarding I2C commands to the Serializer and the the remote sensor.

    I have attached the table for register settings of UB960 below. It would be really helpful if you could find any mistake in the register settings or if you want me to add/delete something here:

    BspUtils_Ub960I2cParams gUb960Cfg_D3AR1243[] = {
    /* Reset */
    {0x01, 0x01, 1000},
    /* ENABLE SERIAL LINK DATA INTEGRITY ERROR COUNT */
    {0xB9, 0x18, UB960_REG_DELAY_TIME},
    /* ENABLE SFILTER with AEQ ADAPTION */
    {0x42, 0x71, UB960_REG_DELAY_TIME},

    /* RX0 */
    {0x4c, 0x01, 1000}, /* Port 0 */
    {0x58, UB960_FREQ_SEL, UB960_REG_DELAY_TIME}, /* Enable Back channel, set to 50Mbs */
    {0xD5, 0xC0, UB960_REG_DELAY_TIME}, /* Set AEQ MIN/MAX widest values */

    {0x5B, 0x30, UB960_REG_DELAY_TIME}, /*New Serializer I2C Address*/
    {0x5C, (D3_AR1243_PORT_0_SER_ADDR << 1U), UB960_REG_DELAY_TIME}, /*New Serializer alias address*/

    {0x5D, 0x50, UB960_REG_DELAY_TIME}, /*New Sensor I2C Address*/
    {0x65, ( D3_AR1243_PORT_0_SENSOR_ADDR<< 1U), UB960_REG_DELAY_TIME}, /*Serializer alias address*/

    {0x32, 0x01, UB960_REG_DELAY_TIME}, /*Enable TX port 0*/
    {0x33, 0x03, UB960_REG_DELAY_TIME}, /*Enable Continuous clock mode and CSI output*/

    {0xBC, 0x00, UB960_REG_DELAY_TIME}, /*Unknown*/
    {0x6D, 0x6C, UB960_REG_DELAY_TIME}, /*CSI Mode*/
    {0x05, 0x00, UB960_REG_DELAY_TIME}, /*CSI Mode*/
    {0x06, 0x01, UB960_REG_DELAY_TIME}, /*CSI Mode*/
    {0x72, 0x00, UB960_REG_DELAY_TIME}, /*VC Map - All to 0*/
    {0x7C, 0x00, UB960_REG_DELAY_TIME}, /*Line Valid active high, Frame Valid active high*/
    {0xD5, 0xF3, UB960_REG_DELAY_TIME}, /*Auto Attenuation*/

    /* RX1 */
    {0x4c, 0x12, 100}, /* Port 1 */
    {0x58, UB960_FREQ_SEL, UB960_REG_DELAY_TIME}, /* Enable Back channel, set to 50Mbs */
    {0xD5, 0xC0, UB960_REG_DELAY_TIME}, /* Set AEQ MIN/MAX widest values */
    {0x5B, 0x30, UB960_REG_DELAY_TIME}, /*New Serializer I2C Address*/
    {0x5C, (D3_AR1243_PORT_1_SER_ADDR << 1U), UB960_REG_DELAY_TIME}, /*New Serializer alias address*/

    {0x5D, 0x50, UB960_REG_DELAY_TIME}, /*New Sensor I2C Address*/
    {0x65, ( D3_AR1243_PORT_1_SENSOR_ADDR<< 1U), UB960_REG_DELAY_TIME}, /*Serializer alias address*/

    {0x32, 0x01, UB960_REG_DELAY_TIME}, /*Enable TX port 0*/
    {0x33, 0x03, UB960_REG_DELAY_TIME}, /*Enable Continuous clock mode and CSI output*/

    {0xBC, 0x00, UB960_REG_DELAY_TIME}, /*Unknown*/
    {0x6D, 0x6C, UB960_REG_DELAY_TIME}, /*CSI Mode*/
    {0x05, 0x00, UB960_REG_DELAY_TIME}, /*CSI Mode*/
    {0x06, 0x01, UB960_REG_DELAY_TIME}, /*CSI Mode*/
    {0x72, 0x55, UB960_REG_DELAY_TIME}, /*VC Map - All to 0*/
    {0x7C, 0x00, UB960_REG_DELAY_TIME}, /*Line Valid active high, Frame Valid active high*/
    {0xD5, 0xF3, UB960_REG_DELAY_TIME}, /*Auto Attenuation*/

    /* RX2 */
    {0x4c, 0x24, 100}, /* Port 2 */
    {0x58, UB960_FREQ_SEL, UB960_REG_DELAY_TIME}, /* Enable Back channel, set to 50Mbs */
    {0xD5, 0xC0, UB960_REG_DELAY_TIME}, /* Set AEQ MIN/MAX widest values */

    {0x5B, 0x30, UB960_REG_DELAY_TIME}, /*New Serializer I2C Address*/
    {0x5C, (D3_AR1243_PORT_2_SER_ADDR << 1U), UB960_REG_DELAY_TIME}, /*New Serializer alias address*/

    {0x5D, 0x50, UB960_REG_DELAY_TIME}, /*New Sensor I2C Address*/
    {0x65, ( D3_AR1243_PORT_2_SENSOR_ADDR<< 1U), UB960_REG_DELAY_TIME}, /*Serializer alias address*/

    {0x32, 0x01, UB960_REG_DELAY_TIME}, /*Enable TX port 0*/
    {0x33, 0x03, UB960_REG_DELAY_TIME}, /*Enable Continuous clock mode and CSI output*/

    {0xBC, 0x00, UB960_REG_DELAY_TIME}, /*Unknown*/
    {0x6D, 0x6C, UB960_REG_DELAY_TIME}, /*CSI Mode*/
    {0x05, 0x00, UB960_REG_DELAY_TIME}, /*CSI Mode*/
    {0x06, 0x01, UB960_REG_DELAY_TIME}, /*CSI Mode*/
    {0x72, 0xAA, UB960_REG_DELAY_TIME}, /*VC Map - All to 0*/
    {0x7C, 0x00, UB960_REG_DELAY_TIME}, /*Line Valid active high, Frame Valid active high*/
    {0xD5, 0xF3, UB960_REG_DELAY_TIME}, /*Auto Attenuation*/

    /* RX3 */
    {0x4c, 0x38, 100}, /* Port 3 */
    {0x58, UB960_FREQ_SEL, UB960_REG_DELAY_TIME}, /* Enable Back channel, set to 50Mbs */
    {0xD5, 0xC0, UB960_REG_DELAY_TIME}, /* Set AEQ MIN/MAX widest values */

    {0x5B, 0x30, UB960_REG_DELAY_TIME}, /*New Serializer I2C Address*/
    {0x5C, (D3_AR1243_PORT_3_SER_ADDR << 1U), UB960_REG_DELAY_TIME}, /*New Serializer alias address*/

    {0x5D, 0x50, UB960_REG_DELAY_TIME}, /*New Sensor I2C Address*/
    {0x65, ( D3_AR1243_PORT_3_SENSOR_ADDR<< 1U), UB960_REG_DELAY_TIME}, /*Serializer alias address*/

    {0x32, 0x01, UB960_REG_DELAY_TIME}, /*Enable TX port 0*/
    {0x33, 0x03, UB960_REG_DELAY_TIME}, /*Enable Continuous clock mode and CSI output*/

    {0xBC, 0x00, UB960_REG_DELAY_TIME}, /*Unknown*/
    {0x6D, 0x6C, UB960_REG_DELAY_TIME}, /*CSI Mode*/
    {0x05, 0x00, UB960_REG_DELAY_TIME}, /*CSI Mode*/
    {0x06, 0x01, UB960_REG_DELAY_TIME}, /*CSI Mode*/
    {0x72, 0xFF, UB960_REG_DELAY_TIME}, /*VC Map - All to 0*/
    {0x7C, 0x00, UB960_REG_DELAY_TIME}, /*Line Valid active high, Frame Valid active high*/
    {0xD5, 0xF3, UB960_REG_DELAY_TIME}, /*Auto Attenuation*/

    {0x0D, 0x90, UB960_REG_DELAY_TIME}, /*I/O to 3V3 - Options not valid with datasheet*/
    {0x0C, 0x0F, UB960_REG_DELAY_TIME}, /*Enable All ports*/
    {0x20, 0x00, UB960_REG_DELAY_TIME}, /*Forwarding and using CSIport 0*/

    /*Sets GPIOS*/
    {0x0F, 0xF0, UB960_REG_DELAY_TIME}, /*Disable GPIO 0 ~ 3 input*/
    #ifdef BOARD_TYPE_TDA3XX_RVP
    {0x10, 0x41, UB960_REG_DELAY_TIME}, /*GPIO 0 - Output received GPIO 2 (HST_INT) from Port 0*/
    {0x11, 0x45, UB960_REG_DELAY_TIME}, /*GPIO 1 - Output received GPIO 2 (HST_INT) from Port 1*/
    {0x12, 0x49, UB960_REG_DELAY_TIME}, /*GPIO 2 - Output received GPIO 2 (HST_INT) from Port 2*/
    {0x13, 0x4D, UB960_REG_DELAY_TIME}, /*GPIO 3 - Output received GPIO 2 (HST_INT) from Port 3*/
    #else
    {0x14, 0x41, UB960_REG_DELAY_TIME}, /*GPIO 4 - Output received GPIO 2 (HST_INT) from Port 0*/
    #endif
    {0x59, 0x83, UB960_REG_DELAY_TIME}, /* Enable 4 GPIOs */
    {0x21, 0x01, UB960_REG_DELAY_TIME}, /* for Round Robin/Best Effort Forwarding */
    {0x20, 0x00, UB960_REG_DELAY_TIME}, /* forwarding RX Port0~3 to CSI2 Port0 */
    };

    I tried using the original code where they have defined the Serializer address as Slave_Address[0] (0x5D) and Sensor Address as Slave_Address[1] (0X5E) as well as defining it in the Serializer Address Register (0x5B) and Sensor Address in 0X5D like above. Both the settings gave me the same error and I was not able to communicate with the Serializer using FPD-Link III. Please let me know if you have any suggestions.

    Best Regards,
    Nishant
  • Hi Nishant,

    First of all, for reading the status register, you have to make sure the FPD3_PORT_SEL register (0x4c) is pointing to the right port before dumping the status. It looks like it was pointing to port 3 when you dumped those registers. You need to select port 0 first.

    I think, for the UB960/UB953 configuration issue, you will be better supported at the below forum.
    There is some similar question posted and the TI expert for UB960/UB953 will be able to help you.
    e2e.ti.com/.../745900


    Regards,
    Stanley