29.2.3.6.2 7-Bit Reception with AHEN and DHEN

Client device reception with AHEN and DHEN set operate the same as without these options with extra interrupts and clock stretching added after the eighth falling edge of SCL. These additional interrupts allow the client software to decide whether it wants to ACK the receive address or data byte, rather than the hardware. This functionality adds support for PMBus™ that was not present on previous versions of this module.

This list describes the steps that need to be taken by client software to use these options for I2C communication. Figure 29-17 displays a module using both address and data holding. Figure 29-18 includes the operation with the SEN bit set.

  1. The Start (S) bit is set; SSPxIF is set if SCIE is set.
  2. Matching address with the R/W bit clear is clocked in. SSPxIF is set and CKP cleared after the eighth falling edge of SCL.
  3. Software clears the SSPxIF.
  4. Client can look at the ACKTIM bit to determine if the SSPxIF was after or before the ACK.
  5. Client reads the address value from SSPxBUF, clearing the BF flag.
  6. Client transmits an ACK to the host by clearing ACKDT.
  7. Client releases the clock by setting CKP.
  8. SSPxIF is set after an ACK, not after a NACK.
  9. If SEN = 1, the client hardware will stretch the clock after the ACK.
  10. Client clears SSPxIF.
    Important: SSPxIF is still set after the ninth falling edge of SCL even if there is no clock stretching and BF has been cleared. Only if a NACK is sent to the host is SSPxIF not set.
  11. SSPxIF is set and CKP cleared after eighth falling edge of SCL for a received data byte.
  12. Client looks at the ACKTIM bit to determine the source of the interrupt.
  13. Client reads the received data from SSPxBUF, clearing BF.
  14. Steps 7-14 are the same for each received data byte.
  15. Communication is ended by either the client sending a NACK, or the host sending a Stop condition. If a Stop is sent and the Stop Condition Interrupt Enable (PCIE) bit is clear, the client will only know by polling the Stop (P) bit.
    Figure 29-17. I2C Client, 7-Bit Address, Reception (SEN = 0, AHEN = 1, DHEN = 1)
    Figure 29-18. I2C Client, 7-Bit Address, Reception (SEN = 1, AHEN = 1, DHEN = 1)