Description
TimeOut, Arbitration, and Bus Busy errors cause by hardware faults are difficult to recover from.
The current Wire.reset()
cannot successfully reset the hardware.
This can be tested by initing the Wire
library with Wire.begin()
then grounding SDA. This is simulate a START
-> STOP
, it is considered a void statement by the I2C standard and not recommended. But, reality cannot be ignored, it happens.
The bus will be clear(SCL and SDA high with no activity), but the SM will fall into an irrecoverable state of BUS_BUSY, TIMEOUT perhaps ARBITRATION.
The only successful recovery is a HARDWARE reset operation. Or, if a second set of GPIO pins are dedicated, a manual bit banged START
9 clocks STOP
can recover the SM.
Does anyone have a successful Software Recovery Method?
Chuck.