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: DS90UB954-Q1: I2C communication with DS90UB953 issue

Part Number: DS90UB954-Q1
Other Parts Discussed in Thread: DS90UB953-Q1
Hello, TI engineers:
We are debugging a project SENSOR IMX307 2LANE-> ds90ub953-> HOST
DS90UB954 IDX, MODE 10K against ground REFCLK:26MHZ.DS90UBDS90UB953 IDX 40.2K to ground.Using the 954 remote I2C
So our register address is configured as: TI954Q_WRITE_ID:0x60.TI953Q_WRITE_ID: 0 x30. TI953Q_WRITE_ALIAS_ID: 0X18
There is BIST Script running snla267a.pdf but there are some errors.
    //BIST Script                                                          
   #define TI954Q_WRITE_ID         0x60
   #define TI953Q_WRITE_ID         0x30
   #define TI953Q_WRITE_ALIAS_ID   0x18
   #define SEN_WRITE_ID            0x34
   #define SEN_WRITE_ALIAS_ID      0x36
    //# Port selection, Passthrough, and aliasing
    TI_WriteReg(TI954Q_WRITE_ID, 0x4C, 0x01); //Enable Port 0
    //writes
    TI_WriteReg(TI954Q_WRITE_ID, 0x58, 0xBE); //I2C Pass through  0x58 must be set to 0xBE, otherwise the I2C NACK of DS90UB953 will appear
    //Enabled and BC = 50Mbps
    TI_WriteReg(TI954Q_WRITE_ID, 0x5C, TI953Q_WRITE_ALIAS_ID<<1); //953 Alias defined
    //as 0x18
    //Digital Reset except for registers
    TI_WriteReg(TI953Q_WRITE_ALIAS_ID, 0x01, 0x01); //Resets 953
    Delay_DelayUs(500);
    TI_WriteReg(TI954Q_WRITE_ID, 0x01, 0x01); //Resets 954
    Delay_DelayUs(500);
    debug_msg("Devices Reset\r\n");
    //Confirm Devices can communicate with each other
    debug_msg("954 Device ID (0x00):0x%x\r\n",TI_ReadReg(TI954Q_WRITE_ID,0x00)); //954 Device ID,
    //should be 0x7A, check 0x00 for confirmation
    Delay_DelayUs(500);
    debug_msg("953 Device ID (0x00):0x%x\r\n",TI_ReadReg(TI953Q_WRITE_ALIAS_ID, 0x00)); //953 Device ID,
    //should be 0x30, check 0x5B for confirmation
    debug_msg("------------------------------------------------------------------\r\n");
    Delay_DelayUs(500);
    //Read Receiver Lock Status
    debug_msg("954 Receiver Lock Status (0x04):0x%x\r\n", TI_ReadReg(TI954Q_WRITE_ID,0x04));
    //0x04 is DEVICE_STS of 954
    debug_msg("Should read 0xCF\r\n");
    debug_msg("------------------------------------------------------------------\r\n");
    Delay_DelayUs(500);
    //Enable write for Port0 of FPD3_PORT_SEL
    TI_WriteReg(TI954Q_WRITE_ID, 0x4C, 0x01); //0x4C is
    //FPD3_PORT_SEL
    //Clear Errors and Error Count
    TI_WriteReg(TI953Q_WRITE_ALIAS_ID, 0x49, 0x28); //0x49 is BC_CTRL.
    //0x28 selects BIST_CRC ERR CLR and CRC ERR CLR
    debug_msg("953 Read BCC Error Status (0x79):0x%x\r\n",TI_ReadReg(TI953Q_WRITE_ALIAS_ID, 0x79));//Clear possible
    //BCC_Error by Reading BCC Error Status
    debug_msg("Consult Register 0x79 on the SER for more information\r\n");
    debug_msg("------------------------------------------------------------------\r\n");
    debug_msg("953 Pre Error Link Status of 953 (0x52):0x%x\r\n",TI_ReadReg(TI953Q_WRITE_ALIAS_ID, 0x52));//0x52 is
    //GENERAL_STS of 953
    debug_msg("Should read 0x45 = RX Lock Detect, HS PLL Lock, Link Detect\r\n");
    debug_msg("------------------------------------------------------------------\r\n");
    debug_msg("953 BIST CRC Error count (0x54):0x%x on 953 before forced error.\r\n",TI_ReadReg(TI953Q_WRITE_ALIAS_ID, 0x54));//0x54 is BIST ERR CNT
    debug_msg("------------------------------------------------------------------\r\n");
    Delay_DelayUs(1000);
    //Enabling BIST, Error, and Lock-Change Status
    debug_msg("954 Read BIST CTL register (0xB3):0x%x  Before BIST ENABlED\r\n",TI_ReadReg(TI954Q_WRITE_ID, 0xB3));//xB3 is BIST_CTL, bit 1 controls if enabled or not
    debug_msg("Should read 0x00 or 0x08\r\n");
    TI_WriteReg(TI954Q_WRITE_ID, 0xB3, 0x01);//Enable BIST using
    //BIST_CTL
    debug_msg("954 Read BIST CTL (0xB3):0x%x register After BIST ENABLED\r\n",TI_ReadReg(TI954Q_WRITE_ID, 0xB3));//0xB3 is BIST_CTL
    debug_msg("Should read 0x01\r\n");
    Delay_DelayUs(250);
    debug_msg("------------------------------------------------------------------\r\n");
    debug_msg("954 Read BIST Lock Status Change of 954 RIGHT AFTER BIST enabled (0x4D):0x%x \r\n",TI_ReadReg(TI954Q_WRITE_ID,0x4D));//0x4D is RX_PORT_STS1 of 954
    debug_msg("Read to clear BIST enable Lock Status Change.\r\n");
    TI_WriteReg(TI954Q_WRITE_ID, 0xD0, 0x01);//Force 1 Error, 0xD0
    //is PORT_DEBUG register
    TI_WriteReg(TI954Q_WRITE_ID, 0xD0, 0x02);//Force Continuous
    //errors, 0xD0 is PORT_DEBUG register
    Delay_DelayMs(10);//Can run BIST for
    //as long as needed
    TI_WriteReg(TI954Q_WRITE_ID, 0xD0, 0x00);//If forced
    //continuous errors, stop forcing errors
    debug_msg("954 Read Post BIST Lock Status Change of 954 RIGHT BEFORE BIST disabled (0x4D):0x%x\r\n",TI_ReadReg(TI954Q_WRITE_ID, 0x4D));//0x4D is RX_PORT_STS1 of 954
    debug_msg("Should read 0x03, If lock status changed during BIST, will read 0x13\r\n");
    //Disable BIST and Port0
    TI_WriteReg(TI954Q_WRITE_ID, 0xB3, 0x00);//Disable BIST, using
    //BIST_CTL
    TI_WriteReg(TI954Q_WRITE_ID, 0x4C, 0x00);//0x4C is
    //FPD3_PORT_SEL
    debug_msg("------------------------------------------------------------------\r\n");
    Delay_DelayMs(1);
    //Check if Error(s) occurred
    debug_msg("953 Post Error Link Status of 953 (0x52):0x%x\r\n", TI_ReadReg(TI953Q_WRITE_ALIAS_ID, 0x52));//0x52 is GENERAL_STS of 953
    debug_msg("Should read 0x4D = RX Lock Detect, HS PLL Lock, Link Detect, and BIST CRC Error\r\n");
    debug_msg("954 Receiver Lock Status (0x04):0x%x\r\n",TI_ReadReg(TI954Q_WRITE_ID, 0x04));//0x04 is DEVICE_STS of 954
    debug_msg("Should read 0xCF\r\n");
    debug_msg("------------------------------------------------------------------\r\n");
    debug_msg("953 BIST CRC Error count (0x54):0x%x on 953.\r\n",TI_ReadReg(TI953Q_WRITE_ALIAS_ID, 0x54));//0x54 is BIST
    //ERR CNT
    debug_msg("954 Parity Error count MSB (0x56):0x%x on 954.\r\n",TI_ReadReg(TI954Q_WRITE_ID, 0x56));//0x56 is
    //number of Parity error 8 most significant bits
    debug_msg("954 Parity Error count LSB (0x55):0x%x on 954.\r\n",TI_ReadReg(TI954Q_WRITE_ID, 0x55));//0x55 is
    //number of Parity error 8 least significant bits
    debug_msg("------------------------------------------------------------------\r\n");
    debug_msg("953 Device ID (0x00)::0x%x\r\n", TI_ReadReg(TI953Q_WRITE_ALIAS_ID, 0x00));//953 Device ID,
    //should be 0x30, check 0x5B for confirmation,
    //Usually use this
    //to see if 954 is stuck in BIST mode
    //Clear BIST Errors on 953
    TI_WriteReg(TI953Q_WRITE_ID, 0x49, 0x28);// #0x49 is BC_CTRL.
    //0x28 selects BIST_CRC ERR CLR and CRC ERR CLR
The information obtained by the serial port of the machine is:
--------------------------------start---------------------------
Devices Reset
 TI w_addr  0x60  Reg addr 0x00, data 0x60
954 Device ID (0x00):0x60
 TI w_addr  0x18  Reg addr 0x00, data 0x18
953 Device ID (0x00):0x18
------------------------------------------------------------------
 TI w_addr  0x60  Reg addr 0x04, data 0xDF
954 Receiver Lock Status (0x04):0xdf
Should read 0xCF
------------------------------------------------------------------
 TI w_addr  0x18  Reg addr 0x79, data 0x18
953 Read BCC Error Status (0x79):0x18
Consult Register 0x79 on the SER for more information
------------------------------------------------------------------
 TI w_addr  0x18  Reg addr 0x52, data 0x18
953 Pre Error Link Status of 953 (0x52):0x18
Should read 0x45 = RX Lock Detect, HS PLL Lock, Link Detect
------------------------------------------------------------------
 TI w_addr  0x18  Reg addr 0x54, data 0x18
953 BIST CRC Error count (0x54):0x18 on 953 before forced error.
------------------------------------------------------------------
 TI w_addr  0x60  Reg addr 0xB3, data 0x08
954 Read BIST CTL register (0xB3):0x8  Before BIST ENABlED
Should read 0x00 or 0x08
 TI w_addr  0x60  Reg addr 0xB3, data 0x01
954 Read BIST CTL (0xB3):0x1 register After BIST ENABLED
Should read 0x01
------------------------------------------------------------------
 TI w_addr  0x60  Reg addr 0x4D, data 0x17
954 Read BIST Lock Status Change of 954 RIGHT AFTER BIST enabled (0x4D):0x17
Read to clear BIST enable Lock Status Change.
 TI w_addr  0x60  Reg addr 0x4D, data 0x07
954 Read Post BIST Lock Status Change of 954 RIGHT BEFORE BIST disabled (0x4D):0x7
Should read 0x03, If lock status changed during BIST, will read 0x13
------------------------------------------------------------------
 TI w_addr  0x18  Reg addr 0x52, data 0x18
953 Post Error Link Status of 953 (0x52):0x18
Should read 0x4D = RX Lock Detect, HS PLL Lock, Link Detect, and BIST CRC Error
 TI w_addr  0x60  Reg addr 0x04, data 0xDF
954 Receiver Lock Status (0x04):0xdf
Should read 0xCF
------------------------------------------------------------------
 TI w_addr  0x18  Reg addr 0x54, data 0x18
953 BIST CRC Error count (0x54):0x18 on 953.
 TI w_addr  0x60  Reg addr 0x56, data 0xFF
954 Parity Error count MSB (0x56):0xff on 954.
 TI w_addr  0x60  Reg addr 0x55, data 0xFF
954 Parity Error count LSB (0x55):0xff on 954.
------------------------------------------------------------------
 TI w_addr  0x18  Reg addr 0x00, data 0x18
953 Device ID (0x00)::0x18
--------------------------------end---------------------------
Please help me answer the following questions:
1. Are our TI954Q_WRITE_ID, TI953Q_WRITE_ID, TI953Q_WRITE_ALIAS_ID set correctly?
2. At present, DS90UB953 ReadReg is all address value, why?What need to be verified.
  • project SENSOR IMX307 2LANE-> ds90ub953->ds90ub954-> HOST

  • Hello, 

    1. Yes, you set them correctly, but you should set 0x58 = 0x7e. Set pass thorough instead of pass through all. Then, when you write to the TI_953, the address will be 0x18. When you have pass through all enabled instead of pass through, then TI_953 will respond to 0x30. 

    2. I am not sure what you are asking. Could you clarify? Are you not able to read back data at all? 

    Thanks, 
    Sally 

  • Hello, Sally
    Thank you for your answer!
    1. Now I am confused about the register address, please help to confirm the following problems:
    If you need to confirm the communication between HOST and DS90UB954, the DS90UB954 can write the data and read the correct value.Is the communication between HOST and DS90UB954 OK?
    So, DS90UB954 sets register TI_WriteReg (0x60,addr,data);The register address is configured as 8-bit 0x60 instead of 7-bit 0x30
    DS90UB953 sets register as TI_WriteReg (0x18,addr,data);The register address is configured as 7-bit 0x18 instead of 8-bit 0x30
    2. You don't quite understand what I asked you earlier.I describe it as follows:
    BIST Script is the sample code of SnLA267A.I used it to verify the DS90UB954 and DS90UB953's communication.
    Currently, <The information obtained by The serial port of The machine is:> part is information printed out by BIST script.
    BIST script for DS90UB953 write value read out of the state is not correct.
    For example, the register address of the DS90UB953 I set is 0X18.All registers in which the DS90UB953 was written and read read the value 0X18
    The register address of DS90UB953 I set is 0X30.All registers in which the DS90UB953 was written and read read the value 0X30
    TI_ReadReg (TI953Q_WRITE_ALIAS_ID, 0 x79)
    Corresponding information:
    TI w_addr 0x18 Reg addr 0x79, data 0x18
    So,DS90UB954 and DS90UB953 are not linked, are they?What are the reasons for this part?
    Since this is the first time for us to debug it, we may have more questions to ask you.Thanks again for your answer!

  • Hello, 
     
    1. It doesn't have anything to do with changing between 8-bit / 7-bit I2C. In regiser 0x 58 [7] = 1 means that you have i2c pass all through all bit enabled; therefore, it can use the SER's ID to communicate. If register 0x58 [6] =1 means that you have i2c pass through enabled; therefore, you can use the SER's alias ID to communicate to it. We recommend [7] =0 and [6] = 1. Then, when you write to the SER, you can use the alias ID. In the script you used, the alias ID is 0x18. 

    2. You can ignore register 0x79 as it is a reserved register in the datasheet. To see if you had a lock during BIST, you want to look at your BIST error counter. In that script, you forced one error. If you read back one error in your BIST error counter, then that means that the only error was the injected error during the test and there are not extra errors found. 

    Read the BIST error counter on the SER 0x54. It should read back a value of 1. 

    Thanks, 
    Sally 

  • Hello, Sally
    Thank you for your answer!
    Excuse me for this simple question, I just want to understand the register address of DS90UB953, SER's ID and SER's Alias ID.
    1. According to your answer, the configuration of the current hardware.Can I understand that the register address of DS90UB954 is 0x60, while the register address of DS90UB953 is determined according to 0X58?
    If 0x58 [6] =1and 0x58 [7] =0, this means the DS90UB953 register address is 0x18.If 0x58 [6] =0and 0x58 [7] =1, that means the DS90UB953 register address is 0x30?
    2. In fact, 0x58 was configured as 0x5E before, because I2C error occurred when DS90UB953 register address was written into register configuration before. I published an article on TI Chinese forum, and TI engineer told me to change it to 0XBE.
    So I will restore 0x58 to configure 0x5E.I2C error will occur when DS90UB953 register address is written to register configuration.What is the reason for this?

  • Hello, 

    1. Yes, register 0x58 on the DES can change the i2c address you use to communicate with the SER. Yes, your understanding is correct. I would suggest that you try setting those bits and then try reading back register 0x00 on the SER to confirm. 

    2. When you use 0x5E and you have an I2C error, is it because you were using the wrong address? Were you using the SER ID instead of the SER Alias?  

    Thanks, 
    Sally 

  • Hello, Sally
    Thank you for your answer!
    On register 0x5B set to 0x5E, there will be I2C error, I use SER ID and SER Alias the same phenomenon.
    After understanding the use of SER ID and SER Alias last time, I have started to check the hardware of DS90UB954/DS90UB953
    Can you give me a better suggestion?
    Thanks & Best Regards!

  • Hello, 

    Are you using 1.8 or 3.3 V pull up value? If you are using 1.8 V you should use a 2.2 kohm pull up resistor and if you are using 3.3V you should use a 4.7 kohm pull up resistor. Also, for your IDX values, are you making sure to use 1% resistor values? Does your resistors you chose match the IDX table? 

    Thanks, 

    Sally 

  • Hello, Sally
    Thanks for your support and answers!

    I've seen a message like this recently.

    Ds90ub953-q1, DS90ub954-Q1 DATASHEET and TI official website,

    Ds90ub953/954 System Design & Operation :Basic Design Rules -- Part 1

    For the MODE part, there are differences.Ds90ub953/954 System Design & Operation :Basic Design Rules -- Part 1 Introduces MODE, which can be divided into STP and COAX.The hardware resistance of MODE is different in the two ways.Should this be followed?Ds90ub953/954 System Design & Operation :Basic Design Rules -- Part 1 Introduction MODE Part Reference to configure?

    Thanks & Best Regards!

  • Hello, 

    I'm confused on what you are asking. Are you asking about how to connect the mode pin? 

    Thanks, 
    Sally 

  • Hello, Sally
    I'm sorry.Not describing the problem clearly!
    I see MODE PIN 10K resistor on the GROUND from the DS90UB954 DATASHEET.Synchronous Back Channel mode on CSI 2
    It is not specified whether STP or COAX is connected to SER.We are currently using COAX to connect to SER
    Ds90ub953/954 System Design & Operation :Basic Design Rules -- Part 1
    If MODE pin 10K resistance to ground means STP connection MODE
    If MODE pin 97.6k resistance to ground means COAX connection MODE
    Ds90ub953/954 System Design & Operation :Basic Design Rules -- Part 1
    Is the description correct?
    Can I refer to it this way?
    Thanks & Best Regards!

  • Hello, 

    Looking at Table 2. in the 954 D/S, there is no specification regarding Coax/STP mode. The mode strap settings will define the RX input mode. For using Coax/STP I recommend you double check register 0x6D and make sure [2] is properly selected.

    Thanks, 
    Sally 

  • Hello, Sally

    Because we found some problems with DS90UB953 in the link before, please refer to the EVM board again to go to LAYOUT.So the reply is delayed.

    Now we modify the hardware again:

    DS90UB954 MODE Pin pull up 78.7K pull down 97.6k.

    DS90UB953 MODE PIN pull up 10K pull down 402R.

    IDX is pulling down 40.2K.

    Now run BIST and own configuration register DS90UB953 I2C error

    Self-configured registers are as follows:

    TI954 0x60//DES Device ID
    TI953 0x18//SER Alias ID

    TI954, 0x4C, 0x01
    TI954,0x58,0x58
    TI954,0x5B,0x30
    TI954, 0x5C, 0x18
    TI954,0x5D,0x34
    TI954,0x65,0x34
    TI954,0x6d,0x7C
    TI954, 0x33, 0x23
    TI954, 0x20, 0x00
    TI953,0x49, 0x24
    TI953,0x02, 0x32
    TI953,0x06, 0x21
    TI953,0x07, 0x28
    TI953,0x0E,0xF0
    TI953,0x0D,0x00
    Delay_DelayMs(1);
    TI953,0x0D,0x01

    Could you help me check what the problem is?

    Thanks & Best Regards!!

  • What is the exact error? 

    What is your local device? 

    Can you read for lock status first before programming all these registers? 

    For debug,

    Connect to the 954 I2C so that this is the local device. Connect 954/953 via cable. 

    0x4d = ??? #954 read

    0x4c = 0x01 #954 write

    0x5C = 0x18 #954 write

    remotely read to the 953 from the 954 i2c 0x00 = ?? What do you read? 

    Measure the voltage at the i2c pin on the 953 and make sure it is within the target voltage max/min lims. 

  • Dear Sally

    Our device is a camera-> 954->953->sensor

    Connected by a coaxial line

    0 x4c write 0 x01

    0x5c write 0x18 <0x30 is also configured, as is >

    Serial port provides 953 I2C error.

    The register did not write successfully.All registers reading 953 have a value of 0x18.

    Read register values through 954 as follows:

    X4d 0:0 x00

    X4e 0:0 x02

    Thanks & Best Regards!!

  • Dear Sally
    We are already looking for hardware problems.
    There are usually 953 I2C errors. You have produced many projects in IC. What is the most likely cause?
    Can you give me some clear directions?
    Thanks & Best Regards!!

  • Hello, 

    So you are having trouble remote writing to the 953 device. Do you have lock? Can you read 0x04 on the 954 to check for lock?

    Based on 0x4E [1], the link is expected to be operational, CABLE_FAULT would indicate open or short on the cable as no FPD-Link clock is detected at the deserializer Rx input. 

    It looks like you may have a short or open at the RX input of the 954 or on the DOUT of the 953, which is why you cannot write to the 953 from the 954. Please investigate the hardware/layout of these traces to confirm. 

    Thanks,
    Sally 

  • Dear Sally
    Thank you for your answers all the time!
    Now the 953 can control the GPIO output as well as the CLK_OUT.Can you tell me that the communication between 954 and 953 is completely normal?
    But at present there is no image, there is already a problem in the platform!
    Thanks & Best Regards!!

  • Hello, 

    Did you fix the short or open on the FPD-LINK (RIN/DOUT)? Do you have lock now? 

    If you are no longer having a cable fault, then the i2c communication should be no issue. Where is the image source? Is it the camera module or are you running pattern generator from the 954/953? 

    Thanks 
    Sally 

  • Dear Sally
    This one can display the image through the camera.Is there a signal for every pin Angle signal, there is a signal.
    For the convenience of testing, we made the 953 into a transfer plate.A SENSOR is connected by a connecting wire.We're also looking at connection problems.
    Is the cable connected to the SENSOR likely to affect the image?
    Thanks & Best Regards!!!!!

  • Hello, 

    I'm not sure what a  transfer plate is. Is the camera sensor a whole module with the 953 integrated or are you using a connector to the 953?
    Before worrying about the image, were you able to establish lock and remote i2c communication?

  • Thank you for your answers all the time!
    Now for our project, change to 1080P30FPS.It has been imaged and can be used normally
    1080P60FPS, due to the line problem, the hardware is being processed
    Thanks & Best Regards!!