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.

BQ27510-G3: Unjamming the I2C bus

Part Number: BQ27510-G3
Other Parts Discussed in Thread: BQ27510

We're using a BQ27510-G3 Gas Gauge in our design.

Because of previous experience with various I2C Bus devices on moderately-complex I2C busses, we want to include the ability to unjam our I2C Bus should it get stuck. In the past we wrote and tested a fairly complex GPIO "bit-banging" sequence that seemed capable of recovering an I2C bus from most "stuck" conditions. (That is, it brought most I2C peripherals to a properly "Stopped" state no matter what state they may have been in within any ongoing I2C data transfer.)

But our current I2C bus only has an MSP430 as the Master and the BQ27510 as the Slave and there's a paragraph in the Data Sheet (SLUSAT1A –MARCH 2013–REVISED NOVEMBER 2015) that sounds very promising:

If I'm reading this optimistically, it sounds like (but doesn't exactly come right out and say) that the BQ27510 I2C Bus state machine will be brought back to its "ground state" any time that it sees SDA and SCL both held low for two seconds. This sounds a lot simpler and more reliable than our arcane I2C unjamming sequence.

Am I reading this too generously? Or is my interpretation what is actually meant? (Assuming my MSP430 I2C bus master isn't hosed,) Could I unjam my current I2C bus simply by doing the following?

  1. Switching the Master's I2C lines to GPIO lines,
  2. Holding them both low for >2 seconds, and
  3. Switching the Master's back to I2C lines under the control of the MSP430's serial peripheral.