20.5.4.4.1 Acknowledge Generatrion

Normally, the client Acknowledges all the received bytes by sending an ACK on the ninth SCLx clock. If the receive buffer is overrun, the client does not generate this ACK. The overrun is indicated if either (or both) of the following occur:

  • The Receive Buffer Full bit, RBF (I2CxSTAT1[1]), was set before the transfer was received
  • The Receive Overflow bit, I2COV (I2CxSTAT1[6]), was set before the transfer was received

Table 20-23 shows what happens when a data transfer byte is received, given the status of the RBF and I2COV status bits. If the RBF status bit is already set when the client attempts to transfer to the I2CxRCV register, the transfer does not occur, but the interrupt is generated and the I2COV status bit is set. If both the RBF and I2COV status bits are set, the client acts similarly. The shaded cells show the condition where user software did not properly clear the overflow condition.

Reading the I2CxRCV register clears the RBF status bit. The I2COV status bit is cleared by writing to a ‘0’ through user software.

Note: If the BOEN bit (I2CxCON1[20]) is set, then the I2COV bit (I2CxSTAT1[6]) is ignored and only the RBF bit (I2CxSTAT1[1]) determines whether the module will Acknowledge the message or not.