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:
- Write dummy data to the data register when a NACK is received from the host.
- 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/WBZ451HA0 | A2 | |||||
---|---|---|---|---|---|---|
X | X |
A2 | |||||
---|---|---|---|---|---|
X |