2.19.19 SERCOM-I2C: I2C Client in DATA32B Mode

When SERCOM is configured as an I2C client in 32-bit Data mode (DATA32B=1) and the I2C host reads from the I2C client (client transmitter) and outputs its NACK (indicating no more data are needed), the I2C client still receives a DRDY interrupt.

If the CPU does not write new data to the I2C client DATA register, the I2C client will pull the SDA line, which results in stalling the bus permanently.

Work Around:

  1. Write dummy data to the data register when a NACK is received from the host.
  2. Use command #2 (SERCOMx->I2CS.CTRLB.bit.CMD=2) when a NACK is received from the host.
Important: STATUS.RXNACK always indicates the last received ACK; therefore, to determine when a NACK is received from the I2C host, the I2C client software needs to consider I2CS.STATUS.RXNACK only on the second DRDY interrupt after receiving the AMATCH interrupt.

Affected Silicon Revisions

PIC32CX1012BZ25048/WBZ451/WBZ451H
A0A2
XX
PIC32CX1012BZ24032/WBZ450
A2
X