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.

DS90UB953A-Q1: I2C error

Part Number: DS90UB953A-Q1


Hello,

Our customer's application is HOST->954---953->MIPI 2LANE SENSOR307. The IDx,MODE  pin of DS90UB954 is pulled low by 10K resistor, and IDx of DS90UB953 is pulled low by 40.2Kohm resistor. The registers are configured as following:

TI954Q_WRITE_ID:0x60

  TI953Q_WRITE_ID:0x30

    //Set up Port0
     WriteReg(TI954Q_WRITE_ID, 0x4C, 0x01);
    //Set up Back Channel Config (0x58)
     WriteReg(TI954Q_WRITE_ID,0x58,0x5E);
    //Set up SER ID
     WriteReg(TI954Q_WRITE_ID,0x5B,0x30);
    //Set up SER Alias ID
     WriteReg(TI954Q_WRITE_ID,0x5C,0x30);
    //Set up Slave/Camera ID
     WriteReg(TI954Q_WRITE_ID,0x5D,0x34);
    //Set up Slave/Camera Alias ID
     WriteReg(TI954Q_WRITE_ID,0x65,0x34);
   
    //Set serializer CSI-2 data input from imager lane to 4 lane, 1.8V VDDIO
     WriteReg(TI953Q_WRITE_ID,0x02, 0x33);
    //Set GPIO1 and GPIO0 to outputs, where GPIO0 = FSYNC trigger and GPIO1 = IMX390 reset
     WriteReg(TI953Q_WRITE_ID,0x0E,0x30);
    //Set GPIO1 and GPIO0 to low - confirm snesor is power down mode
     WriteReg(TI953Q_WRITE_ID,0x0D,0x00);//0x90
     Delay_DelayMs(1);
    //Bring GPIO1 high again to prepare sensor for initialization
     WriteReg(TI953Q_WRITE_ID,0x0D,0x02);
   
    //enable CSI output and CSI continuous clock, 2lane
     WriteReg(TI954Q_WRITE_ID, 0x33, 0x23);
    //enable CSI replicate mode
     WriteReg(TI954Q_WRITE_ID, 0x21, 0x81);
    //enable RX 0 port forwarding to CSI ports
     WriteReg(TI954Q_WRITE_ID, 0x20, 0x20);

Now the question is that, the I2C appear error as this:

ERR:TI_I2C_Transmit() fail to send data, w_addr 0x30, r_addr 0x2, data 0x33, sts 2
ERR:TI_I2C_Transmit() fail to send data, w_addr 0x30, r_addr 0xE, data 0x30, sts 2
ERR:TI_I2C_Transmit() fail to send data, w_addr 0x30, r_addr 0xD, data 0x0, sts 2
ERR:TI_I2C_Transmit() fail to send data, w_addr 0x30, r_addr 0xD, data 0x2, sts 2
TI w_addr 0x60 Reg addr 0x00, data 0x60
TI w_addr 0x60 Reg addr 0x4C, data 0x01
TI w_addr 0x60 Reg addr 0x58, data 0x5E
TI w_addr 0x60 Reg addr 0x5B, data 0x00
TI w_addr 0x60 Reg addr 0x5C, data 0x30
TI w_addr 0x60 Reg addr 0x5D, data 0x34
TI w_addr 0x60 Reg addr 0x65, data 0x34
TI w_addr 0x30 Reg addr 0x02, data 0x30
TI w_addr 0x30 Reg addr 0x0E, data 0x30
TI w_addr 0x30 Reg addr 0x0D, data 0x30
TI w_addr 0x60 Reg addr 0x33, data 0x23
TI w_addr 0x60 Reg addr 0x21, data 0x81
TI w_addr 0x60 Reg addr 0x20, data 0x20
--------------------------------end---------------------------

Could you please help to analyze ?

Best regards

Kailyn

  • Hi Kailyn,

    First verify lock with the serializer. If you have lock, ensure that you are addressing the Alias address and that you are using the right address mode, based on whether your SoC expects a 7 or 8 bit address.

    Also, try setting the AUTO_ACK_ALL bit and I2C_PASS_THROUGH_ALL bits (bits 5 and 7) of the BCC_CONFIG register (address 0x58). These features are intended to help with the I2C debugging process.

    Let me know if this fixes your problem.

    Regards,

    Carrie

  • Hello Carrie,

    Thank you very much for your reply, and the I2C error problem has been resolved, but now the question is that the register of UB953 couldn't be written.

    That is to say, when read the register of UB953, it is not the correct value, so it looks like the register couldn't be written.

    TI_WriteReg(TI953Q_WRITE_ID,0x49, 0x24);//CRC error BIST error reset

    //Set serializer CSI-2 data input from imager lane to 4 lane, 1.8V VDDIO
    TI_WriteReg(TI953Q_WRITE_ID,0x02, 0x33);

    //Set GPIO1 and GPIO0 to outputs, where GPIO0 = FSYNC trigger and GPIO1 = IMX390 reset
    TI_WriteReg(TI953Q_WRITE_ID,0x0E,0xF0);
    //Set GPIO1 and GPIO0 to low - confirm snesor is power down mode
    TI_WriteReg(TI953Q_WRITE_ID,0x0D,0x00);//0x90
    Delay_DelayMs(1);
    //Bring GPIO1 high again to prepare sensor for initialization
    TI_WriteReg(TI953Q_WRITE_ID,0x0D,0x0F);

    Best regards

    kailyn

  • Hello Kailyn,

    To access the 953 registers, use the 8-bit serial alias of the 953.

    The 8-bit serial alias of the 953 can be read from 954 rx port specific register 0x5C.

    A note on port specific registers: An RX port specific register has to be set up to read/write from a specific RX port in order to access the values on the device at that port. This can be set up by programming register 0x4C on the 954, which selects the port to read and write from. Program register 0x4C before trying to access information in any ports specific register.

    To read the 8-bit serial alias:

    UB954 = 0x60

    WriteI2C(UB954, 0x4C, 0x01)       // Set up reads and writes from RX port 0

    Alias = ReadI2C(UB954, 0x5C)      // Read the serial alias

    Regards,

    Carrie

  • Hi Carrie,

    Thank you for your reply, and did it according to your configuration, when read the register, it appear

    <TI Read> w_addr:0x60 Reg addr:0x5c, data:0x0

    So could you please help to analysis? Is it hardware problem?

    Best regards

    Kailyn

  • Hi Kailyn,

    Please send a register dump from the both devices so that I can review your configuration.

    Regards,

    Carrie