Skip to content

TimeOut recovery #8

Closed
Closed
@stickbreaker

Description

@stickbreaker

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.

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions