Open
Description
I have a problem when using I2c with Wire library. When the SDA signal is disturbed by something then sometimes when the process reaches line 530 in SERCOM.cpp it gets stuck in an infinite loop running SERCOM::startTransmissionWIRE() over and over again. If I add a 1500 µS delay before line 530 it seems to get out of the loop. Its like the hardware do not get time to recover without the delay. But a delay would maybe be bad for performance if it's common for this code to be run.
I have this problem on two MKR GSM 1400. Maybe someone can confirm this on different hardware. If I connect SDA to 3V3 I run into this problem.
Here is the lines around SERCOM.cpp:530 with my fix.
if(!isBusOwnerWIRE())
{
// Restart communication after small delay
delayMicroseconds(1500);
startTransmissionWIRE(address >> 1, flag);
}
Metadata
Metadata
Assignees
Labels
No labels