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: Accessing the register issue.

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

Hi, 

We are using DS90UB954-Q1 this serializer in our board, it's interfaced on the i2c. On the same i2c two devices are connected one is responding properly but DS90UB954-Q1 device is not responding. its showing error as Remote I/O error. i am following sequence for the reading the register of the serializer. wrting  device addres , register address , then reading the by providing the device address. when i am sending device address only its giving an error. i confirmed the device address its correct by referring the datasheet .

  • Hi Maheshwar,

    Thanks for providing information about the issue that you are encountering with this device. To further understand what may be causing this issue, I have the following questions:

    1. Are you able to perform local reads and writes successfully to the deserializer (the DS90UB954-Q1), or are you encountering this error when you try to use the I2C bus to communicate with both the serializer and the deserializer?

    2. Is the lock status of the deserializer in a "high" state? This can be checked by either reading from bit 2 of register 0x04, or by probing the LOCK pin (pin 48) of the DS90UB954-Q1.

    3. Is I2C_PASS_THROUGH enabled for the DS90UB954-Q1? This bit is enabled by setting Bit 6 of Register 0x58. Note that this is an RX port specific register, so to correctly enable I2C pass through, you first need to enable writes for the specific RX port that you are using. 

    4. Is there an alias address set for the connected serializer? If there is and I2C_PASS_THROUGH is enabled, then the serializer will only respond to I2C communications if the alias is used as the I2C address.

    Regards,

    Kenneth

  • Hi, before enabling and i am not getting response from the device (PD pin = 1). for the de-serializer also we are facing same issue. lock pin is high only. we are unable read and write the register for the both serializer and de- serializer.

    root@adc5-basehigh-b0:~# i2cget -f -y 4 0x74 0x00
    0x02
    root@adc5-basehigh-b0:~# i2cget -f -y 4 0x18 0x00
    Error: Read failed
    root@adc5-basehigh-b0:~# i2cget -f -y 4 0x18 0x00
    Error: Read failed
    root@adc5-basehigh-b0:~# i2cget -f -y 4 0x74 0x00
    0x02
    root@adc5-basehigh-b0:~# i2cget -f -y 4 0x74 0x01
    0x0e

    0x18 is serializer slave address. 0x74 is the another slave address. for this slave we are getting response but for the serializer we are getting any response.

  • Hi Maheshwar, 

    Thank you for providing additional information.

    From the information that you have provided, I am assuming that the I2C controller is connected locally to the deserializer. If this is not the case, please let me know. 

    To fix this issue, I recommend that we first try and determine why local I2C writes to the deserializer are not working. Doing this may help us eventually determine why remote I2C reads and writes to the serializer are not working. To help determine the cause of this problem, I have the following questions:

    -What is the resistance of the pull up resistors that are currently connected to the I2C Bus?

    -Can you please share the portion of your schematic that shows what resistors that are currently connected to the IDX pin of the DS90UB954-Q1? Sharing this information will help me confirm that the I2C address is set correctly. 

    -Additionally, can you also show the results of performing an I2C read on only register 0x0 of the DS90UB954-Q1?

    Regards,

    Kenneth

  • Hi,

    The I2C controller is connected locally to the serializer. 3.3K resistors for the pull-up. above results are for the register 0 only. for the idx pin we connected 40.2k for the pull down. reading 0x0 register also having the same issue.

  • Hi Maheshwar,

    Thanks for providing a screenshot of the schematic.

    From what I can see in the schematic, I am assuming that for your test, you are performing local I2C reads and writes to the DS90UB935-Q1 serializer. If this is not the case, please let me know.

    The setting of the IDX pin for the DS90UB935-Q1 is correct. In addition, the pull up resistors that you have chosen for the I2C bus are within the range supported by the I2C bus.

    When you are sending the I2C address to the device, are you using the 8-bit version of the address? From code that you previously provided, you showed that for the I2C address function parameter, you were using 0x18, which is the 7-bit I2C address. When the command is actually being sent to the device over the bus, the 8-bit address is the one that should be used, where the 8th bit is the read/write bit. If the 7-bit address is used, I2C writes/reads may not work. For the 7-bit address 0x18, the 8-bit address is 0x30. When writing to the device, 0x30 should be used. When reading from the device, 0x31 should be used. For more information about this, you can refer to Table 8-17 in Section 7.5 of the datasheet.

    In the schematic, I also see that you have the PDB pin of the DS90UB935-Q1 connected to a pulldown resistor. Is this pin being driven high by the GPIO pin of another device? If yes, are you following the power sequence requirements given by Section 9.1 of the DS90UB935-Q1 datasheet? As stated by this section, the PDB pin should only be brought high after all other power supplies on the board have stabilized.  

    Additionally, have you captured waveforms showing your I2C communication attempts with the DS90UB935-Q1? If yes, can you share them? Viewing these waveforms will help us confirm that the I2C controller is correctly sending read/write commands to the device.

    Regards,

    Kenneth

  •  We are trying local i2c read and write. We are using 7 bit address only because that function will covert to 8 bit add the wr/rd bit inside this function. Power down pin at the high state only  after the power sequence.

  • Hi Maheshwar,

    Thanks for sending I2C waveforms. From the waveforms that you have sent, I can clearly see that there is a NACK bit at the end of the transmission whenever 0x30 is being sent. Did you measure these waveforms using the test points TP44012 and TP44013 in the schematic?

    Previously, you also said that you are using 3.3 kΩ pull up resistors for the I2C bus. Are the 3.3 kΩ pull up resistors connected to 1.8 V? Based on how the IDX pin is set, both pull up resistors should be connected to 1.8 V for the I2C bus to operate as expected. Additionally, in the screenshot of the schematic that you provided, I cannot tell with the current resolution of the image if there are 47 kΩ series resistors or 47 Ω series resistors connected to the SDA and SCL pins. Can you please clarify the resistance values of these series resistors?

    Also, do you have one of our DS90UB954-Q1 or DS90UB953-Q1 evaluation modules? If you do, can you see if you can successfully perform a local I2C read of register 0x0 for one of the devices on the evaluation module? Doing this will allow us to better determine if this communication error is being caused by either hardware or software. 

    Regards,

    Kenneth

  • Hi,

    we are measuring the waveforms on the  test points TP44012 and TP44013. The pullup 3.3kΩ for the voltage for that is 1.8volts. The series resistor value is 47Ω only. We are not having the evolution board for the DS90UB954-Q1 or DS90UB953-Q1. IDX pin is connected with the 40.2kΩ pulldown to ground.

  • Hello Maheshwar,

    Today 2/20 is a US public holiday so the team will resume activity on 2/21. Thank you for your patience during this time 

    Best Regards,

    Casey 

  • Hi Maheshwar, 

    I'm currently looking into this and will provide an update within the next 24 hours.

    Regards,

    Kenneth

  • Hi Maheshwar,

    Thank you for your patience. 

    What frequency is your I2C clock signal operating at? Both the DS90UB935-Q1 and the DS90UB954-Q1 have a maximum I2C frequency specification of 1 MHz.

    Additionally, in the waveform screenshot that you provided, it looks like there is a lot of noise on the I2C bus. For instance, even when the bus is driven low in the waveforms screenshot, it looks like there is noise still showing that the bus is high. Is this the result of your measurement setup, or the design? If it is a result of the design, it could be caused by an unstable GND connection. Have you investigated what might be the cause for this noise on the I2C bus? If the noise is above a certain threshold, it could possibly cause I2C communication errors.

    Regards,

    Kenneth

  • Hi Kenneth , 

    I can able to access the registers of the slave device. Can please provide the full drivers for the same device. Means all the initialization sequence and register data, like drivers for the serializer.

  • Hi Maheshwar,

    For an I2C driver, we recommend that you use the USB2ANY interface adapter. With the USB2ANY, you can use a GUI to send I2C commands to the both the serializer and the deserializer. For more information about this, you can refer to the USB2ANY product folder: https://www.ti.com/tool/USB2ANY

    If you are using your own driver, I recommend that you measure the timing of the I2C signals generated by the driver to ensure that the signals meet the timing specifications outlined by the device datasheets. For the DS90UB935-Q1, the I2C timing specifications can be found in Section 6.6 of the DS90UB935-Q1 datasheet. For the DS90UB954-Q1, the I2C timing specifications can be found in Section 6.8 of the DS90UB954-Q1 datasheet. 

    Regards,

    Kenneth