Hi, we have a custom board that is hanging during I2C communication, it seems to randomly happen where both SCL and SDA remain high indefinitely and the I2CMCS register show both I2C_MC_BUS and I2C_MC_BUSBSY are set to 1.
We believe it's likely a hardware problem, and the hardware issue is currently under investigation, however, it would be nice to also somehow do a reset in software to fix the issue.
I've tried calling SysCtlPeripheralDisable(), then calling SysCtlDelay(2000) and then calling SysCtlPeripheralEnable() and reinitializing the I2C channel but that did not fix it.
I've also tried the following:
// Disable the I2C module MAP_I2CMasterDisable(I2C9_BASE); // Clear any pending interrupts MAP_I2CMasterIntClear(I2C9_BASE); // Re-enable the I2C module MAP_I2CMasterEnable(I2C9_BASE)
That did not fix the problem either.
However, we've found that performing a software reset of the Tiva, by calling SysCtlReset(), does result in I2C communication on this channel to work again.
Is there some way to do what SysCtlReset() is doing, but only for a specific I2C channel?