I'm using the TM4C as an I2C slave. I'm running into an issue where the TM4C decides to release the SDA line in the middle of a transfer so my host controller reads invalid data. This is causing major glitches in my control system.
The TM4C is coded with a standard I2C register format. Each register is 32bits so it requires 4 bytes to be sent back. I uncovered the issue because on one of the registers I read is only 16bits so i zero out the upper bytes however when I scope SDA I sometimes see the line go high in the middle of one of the upper bytes and sometimes one of the lower bytes.
Under what conditions would the TM4C release the SDA line during a transfer? The TM4C is not hung because I can continue to read/write it and it continues its control functions.
Summary
- I2C0 set up as slave
- Releases SDA randomly during 4 byte transfer(happens in any of the four bytes) when addressed as slave transmitter.
- Usually recovers at the next transfer
- Host reads at ~200Hz
- Happens at a non-deterministic rate
- Happens at both 100khz and 400khz SCL speeds
Thanks