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.

ADS7828: SDA line gets stuck low

Part Number: ADS7828

We have a design where around 1 of 8000 I2C transactions towards ADS7828 results in SDA line gets stuck low.

I managed to capture a transaction where this occurs.

After a repeated start, it never releases the SDA line after address ACK.

What can cause this?

Transaction:

Close up:

Measured timings from the frame in question:

f_scl = 330 kHz
t_buf = 100 ms
t_hd,sta = 1.40 us (start)
t_hd,sta = 1.45 us (repeated start)
t_low = 1.46 us
t_high = 1.38 us
t_su,sta = 3.0 us
t_su,dat = 740 ns
t_hd,dat = 340 ns
t_rcl = 120 ns
t_fcl = 260 ns
t_rda = 120 ns
t_fda = 260 ns
t_su,sto = inf

  • Hi Gaute,

    I know nothing about ADS7828, but I had a very similar problem with another I2C implementation that also got stuck sometimes during communication.

    There the reason was a bug in the MCU or HAL implementation of the I2C error management  (it was a STM32F4xx) which was hidden in a errata sheet of the MCU. Perhaps you might have a look if something similar could be the reason for your problem. The Lord works in mysterious ways... ;)

    Best Regards,

    Birger

  • Hi Birger,

    Thanks for the tip.

    I read through the errata for my chip (NXP iMX6UL), but I did not find anthing that could be related to the issue I'm seeing.

    I still believe it is the ADS7828 that is holding the SDA line low.

  • Hello Gaute,

    When issues like this occur, it has historically is the host that originates the issue.

    The second image you shared zoomed up only shows the last frame, can you confirm that the previous transaction ended with an acknowledge from the ADC?

    The last frame also shows the stop condition with the SCLK going back down and releasing it until much later, can the host release the sclk after the stop condition to idle high. 

    Regards

    Cynthia

     

  • Hi Cynthia,

    Thank you for replying.

    I can confirm that in the last frame, the previous transaction ended with an acknowledge from the ADC.

    The reason why SCL is released after a long time is because of a timeout in the host driver.

    In the last transaction I was assuming that the ADS7828 acknowledged its address and never released the SDA line after that. But it may just as well be the master that holds the SDA line low. After some more debugging I think I have discovered a race condition in the host I2C driver that could explain this. I need to do some more testing to confirm this...