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.

Sending a "RESET" command holds SDA low

I have a project I am working on that is using I2C communication and when I send a "RESET" command the SDA line gets held low. If another command is sent after this point the "RESET" command and the next subsequent command become one long command. I know that the issue is because when I send the RESET command the stop bit for I2C is not being sent. I have read online that a way to fix this issue is to toggle clock a number of times, but this does not work for my application.

Example of command (seen using Aardvark to monitor I2C lines)

[S] <21:w> 52 45 53 45 54 40 21 DF [P]

The 52 45 53 45 54 part is RESET in hex and the 21 DF is a read command.

If I send the same RESET command directly from the Aardvark it works fine, and the RESET command when sent normally occasionally works(<10% success).

Any suggestions as to how I can free the I2C SDA line without a power cycle?

  • Hey Matthew,

    It sounds like the state machine of the device is glitched and stuck. The only ways I know about resolving this issue is either through continuous clock pulsing (18 pulses or so) or a POR (power on reset).

    How many times are you toggling the clock?

    Do you have Oscope shots when right before the bus latches? It may be helpful to see whats going on with that. We may also want to watch Vcc while communication is happening to ensure it's stable.

    Thanks,
    -Bobby