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.

C6678 I2C EEPROM hang-up

TI experts-

On our custom C6678 board, we have an issue where I2C EEPROM can get stuck and we cannot access it.  Only a power-cyle can free it up; otherwise it's solid and we read/write to it a lot.

We've tried CCS resets and the "hard reset" by writing 0x5A69 to the RSTCTRL register -- not enough.  The hang appears to be the I2C RRDY bit after giving a read command (the error code returned in platform library is a 3).

Is there some additional resets we can try using memory-mapped registers?

Thanks.

-Jeff
Signalogic

  • Hi Jeff,

    This is a known issue with the I2C standard. Since the I2C clock can be stopped without violating the specification, slave devices will not time out an access while waiting for the next clock to arrive. If you are accessing an I2C memory and the memory device is driving the data pin low when a reset to the C6678 occurs, the memory device will continue to drive the data pin low. This will, effectively, block the C6678 from ever accessing the I2C bus since it represents a busy condition. The C6678 believes that there is another master using the I2C bus so it will wait for the data pin to go high, which never happens. 

    This is discussed in usage note 6 in the errata document. There isn't any way to clear this condition without an additional hardware component. Both an additional GPIO connection to the I2C clock line and some software is needed to clear the problem.

    Regards, Bill