We're having an odd issue with a custom board using a TM4C1294NCPDT. We're using I2C Channel 9 to talk to 8 different slave sensors. When our board powers up, I have the TM4C perform an initialization step on the sensors to make sure communication is working. After this, status from the sensors is read every 80 milliseconds. This works fine in the beginning but eventually (anywhere from a few seconds to an hour) communication completely stops.
We have an oscilloscope hooked up to the SCL and SDA lines. When communication stops, both the SCL and SDA lines remain high indefinitely despite the firmware continuing to call the typical series of I2C Tiva Ware functions to read data such as: I2CMasterSlaveAddrSet, MAP_I2CMasterDataPut, MAP_I2CMasterControl, etc.
Even after calling MAP_I2CMasterControl to initiate a I2C_MASTER_CMD_BURST_SEND_START the lines SCL and SDA lines both remain high. I set a breakpoint there to see what the I2C register values, I've attached them in the below image.
You'll notice I2C_MCS_BUSY is false yet I2C_MCS_BUSBY is true. The datasheet (SPMS433B) explains I2C_MCS_BUSY as relating to the "controller" (e.g. "the controller is either idle or busy") and the I2C_MCS_BUSBY as relating to the "bus" (e.g. "the bus is ide or busy").
So, in my case, based on the register values below, the controller is not busy, but the bus is. However, because of the oscilloscope, we're certain both lines are high, which, in my experience, means the bus is not busy. Anyone know what might be going on?