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.
Sometimes when doing USCI B I2C with communications the SCL line and Bus Busy get stuck low after a slave device doesn't correctly send an NACK. I don't think there's any way to prevent that from happening but I need to be able to gracefully recover.
Things I have tried in the I2C timeout interrupt :
Manually toggling SCL low and high 9 times.
Toggling the I2C UCSWRST bit on and off.
I cannot try to get it to transmit a start or stop condition because since SCL is being pulled low I cannot send a start or stop. Any suggestions would be appreciated.
I'm pretty sure the I2C protocol doesn't really provide a way to force a misbehaving slave to behave. Some slaves have bus timeouts (not part of I2C), but evidently not this one.
When I can (which is actually quite often) I try to arrange to power the slave using a GPIO (<4mA) so I have a "heavy hammer" just in case.
**Attention** This is a public forum