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.

How do I reset the I2C channel after a timeout?

Basic information:

Processor: TM4C129DNCPDT

Eeprom: Atmel AT24C256C (256kbits)

Environment: IAR Embedded Workbench

TivaWare_C_Series-2.1.0.12573

Under normal conditions I can write to and read from the EEPROM. I am trying to handle some exceptions now. One of them is a timeout due to some glitch that might occur during the I2C transaction. To test it I force a timeout or, in other words, I do not handle the interrupt generated by the I2C controller. The first trace on the figure bellow is SCL and the second one is SDA (ignore the other two). As you can see, after some bytes being transferred the clock line stays low until the internal SCL timeout detection logic intervenes and the clock goes high. The data line never returns to high even if I force a reset with SysCtlReset(): the I2C just does not work any more. Only if I cycle the power it works again.


So what am I doing wrong and how I can put the channel back into a ready condition?

Thanks.

Elder;