29.5.4 Client Mode 10-Bit Address Reception

This section describes a standard sequence of events for the MSSP module configured as an I2C client in 10-bit Addressing mode.

Figure 29-20 is used as a visual reference for this description.

This is a step-by-step process of how the client software can accomplish I2C communication.

  1. Bus starts Idle.
  2. The host sends Start condition; the S bit is set; SSPxIF is set if interrupt on Start detect is enabled.
  3. The host sends matching high address with the R/W bit clear; the UA bit is set.
  4. The client sends ACK and SSPxIF is set.
  5. Software clears the SSPxIF bit.
  6. Software reads the received address from SSPxBUF, clearing the BF flag.
  7. The client loads low address into SSPxADD, releasing SCL.
  8. The host sends matching low address byte to the client; the UA bit is set.
    Important: Updates to the SSPxADD register are not allowed until after the ACK sequence.
  9. The client sends ACK and SSPxIF is set.
    Important: If the low address does not match, SSPxIF and UA are still set so that the client software can set SSPxADD back to the high address. BF is not set because there is no match. CKP is unaffected.
  10. The client clears SSPxIF.
  11. The client reads the received matching address from SSPxBUF, clearing BF.
  12. The client loads high address into SSPxADD.
  13. The host clocks a data byte to the client and clocks out the client’s ACK on the ninth SCL pulse; SSPxIF is set.
  14. If the SEN bit is set, CKP is cleared by hardware and the clock is stretched.
  15. The client clears SSPxIF.
  16. The client reads the received byte from SSPxBUF, clearing BF.
  17. If SEN is set, the client sets CKP to release the SCL.
  18. Steps 13-17 are repeated for each received byte.
  19. The host sends Stop to end the transmission.