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.

DS90UB941AS-Q1: 941(local) + 948(remote) , remote i2c stuck low

Part Number: DS90UB941AS-Q1

Hi experts,

    we have a issue for i2c communication NAK on local bus,  after reproduce this issue, we found that remote i2c bus stuck low for long time. please help us to find the root cause.

   

    MCU( 0x6B ) is setup as  ( 0x6D ) in 941 alias registers, SOC access MCU always use 0x6D as its address.

    when issue occor, the i2c command is to read 16 bytes from 0x10 register in MCU. so it's 2 i2c messages, one for write register value, one for read data.

    1st write message success issued.   2nd message failed, but 1st byte is read out.  analyzer result is

    the primary waveform is 

    and the defail waveform of part-1 and part-2 is

    we tried reset 941( by PWDN pin) or 948 ( by register reset ) , issue can not clear.  remove power supply for  ECU-2 can clear this issue.

thanks.

  • Hi Linzhi,

    Thank you for providing the initial information this issue. Is the MCU the only peripheral connected to the 948's I2C bus?

    On the remote bus, either the 948 or the MCU Is pulling the bus low. Specifically the SDA line never returns to the default state after the setup write. On the local bus, there is clock stretching on the SCL line which is expected and the SDA line goes high during this time. There is a watchdog timer on the 948 that will clear the bus if SDA is pulled low. Register 0x6 (I2C_CONTROL_2) can be set to 0x3 to enable the watchdog timer. It will clear the bus after 50µs.

    Are you able to send over the I2C waveform files?

    Best,

    Jack

  • Hi Jack,

        Thanks for your reply.  ECU-2 is from other company, we don't know the detail of inside. as I know , the mcu is the controller of ECU-2, other sensors is accessed  directly by mcu, SOC communicate with mcu to access sensors indirectly.

        please refer to 2024-02-23_14-19-43.kvdat , this file can be open by KingVIS software ( https://www.qdkingst.com/download/vis_win  ).  the issue occor at  43.492s .

    Thanks.

    2024-02-23_14-19-43.zip

  • Hi Linzhi,

    Once I get permission from IT to install the KingstVIS software, I'll review the I2C waveform file. Have you had the chance to enable the I2C watchdog timer on the 948?

    Best,

    Jack

  • Hi Jack,

        we tried to set 948 reg 0x06 as 0x03 after this issue occor, but we can not see any wave form change on remote i2c bus, bus keep low as it is.

    Best

  • Hi Shuming,

    I was able to look at the I2C waveform. Here is the main issue I see (starting at 43.492s).

    The SoC initiates the 16-byte read from the MCU and we are able to get one byte from the MCU. During the readback, the MCU is driving the SDA and SCL lanes on the remote side. After that first byte, the MCU only pulses the clock once then stops. This is strange since the previous 16-byte transaction at 43.4766s is the exact same read but the MCU drives the SCL lane correctly.

    This seems to implicate the MCU but it's too early to say conclusively. Do you know what MCU is used on the ECU-2 side?

    but we can not see any wave form change on remote i2c bus, bus keep low as it is.

    MCU might be keeping the SCL and SDA lanes low. This will prevent the watchdog timer from functioning.

    Best,

    Jack

  • Hi Jack,

        thanks for your analysis。 as we don't know the detail of ECU-2, I think it need ECU-2 to check this issue.

    Best

  • Hi Shuming,

    Let me know if you find new details on the ECU-2. In the meantime, you could try testing if the bus hangs with different register writes and reads. Maybe there is a specific sequence that causes the bus to hang.

    Best,

    Jack