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.

DS90UB948-Q1: It seems deserializer holds SDA line LOW and blocks I2C communication

Part Number: DS90UB948-Q1

I use serializer 949 connected to host and 948 on the other side. I often have to read register I2C_CONTROL_2 to check FORWARD_CHANNEL_S EQUENCE_ERROR bit. In very rare cases during read timeout happens and SDA line is constantly LOW. There is no recover from that from MCU POV except reset because MCU I2C registers show that bus is busy and in slave mode and MCU is not able to send stop bit cause SDA is LOW.

BCC_WATCHDOG_CONTROL register has default values and I2C_CONTROL_2 register has the following configuration: I2C_BUS_TIMER_SPEED UP = 1,  I2C_BUS_TIMER_DISABLE = 0. I though I2C watchdog will handle this case bit it doesn't. Is there any way to handle this scenario? Is it possible that deserializer holds SDA line LOW?

Thank you

  • Hi Tomislav,

    It seems this is a replicated thread that has been answered and resolved before. Normally, the timer watchdog for the BCC will clear the I2C issue. You might want to increase the timer watchdog speed to see if you can resolve the issue. Could you please provide the following information?

    1. How many devices are connect to the I2C same bus?
    2. Can you provide the waveform snapshot on 949 side?

    Aaron

  • Hi Aaron,

    That's right. It's the same issue. I thought it was solved, but obviously not.

    There is one master on that bus (MCU) and couple of slaves. Only serializer is connected "directly" to bus. 

    On deserializer side there are three devices connected to bus: EEPROM memory, Backlight controller, Touch controller 

    Overall 1 master ond 5 slaves.

    It doesn’t seem easy to catch waveform in that case because it happens very rare, but i will try.

  • Hi Tomislav,

    Thank you for the confirmation. I would like to find out who is pulling the SDA low. Would it possible for you to isolate the EEPROM memory, Backlight controller, Touch controller from the 949 and 948? I don't think you are using clock stretching right?

    Please let me know if you can isolate them and see if the SDA is still low.

    Aaron

  • Hi Aaron,

    I'm not managed to isolate other devices on I2C bus, but i guess there is no slave device who can use the bus in the same time as deserializer, right? 

    Regarding clock stretching, MCu supports clock stretching but i'm not sure is it used. How can I know that?

    BR,

    Tomislav 

  • Hi Tomislav,

    Yes agreed, but any device can pull the SDA low. Would it possible for you to capture the transaction on the bus?

    Aaron