Datasheet
PIC12(L)F1822/PIC16(L)F1823
DS41413C-page 248 2010-2012 Microchip Technology Inc.
25.5 I
2
C SLAVE MODE OPERATION
The MSSP1 Slave mode operates in one of four
modes selected in the SSP1M bits of SSP1CON1 reg-
ister. The modes can be divided into 7-bit and 10-bit
Addressing mode. 10-bit Addressing modes operate
the same as 7-bit with some additional overhead for
handling the larger addresses.
Modes with Start and Stop bit interrupts operated the
same as the other modes with SSP1IF additionally
getting set upon detection of a Start, Restart, or Stop
condition.
25.5.1 SLAVE MODE ADDRESSES
The SSP1ADD register (Register 25-6) contains the
Slave mode address. The first byte received after a
Start or Restart condition is compared against the
value stored in this register. If the byte matches, the
value is loaded into the SSP1BUF register and an
interrupt is generated. If the value does not match, the
module goes Idle and no indication is given to the soft-
ware that anything happened.
The SSP Mask register (Register 25-5) affects the
address matching process. See
Section 25.5.9
“SSP1 Mask Register”
for more information.
25.5.1.1 I
2
C Slave 7-bit Addressing Mode
In 7-bit Addressing mode, the LSb of the received data
byte is ignored when determining if there is an address
match.
25.5.1.2 I
2
C Slave 10-bit Addressing Mode
In 10-bit Addressing mode, the first received byte is
compared to the binary value of ‘1 1 1 1 0 A9 A8
0’. A9 and A8 are the two MSbs of the 10-bit address
and stored in bits 2 and 1 of the SSP1ADD register.
After the acknowledge of the high byte the UA bit is set
and SCL is held low until the user updates SSP1ADD
with the low address. The low address byte is clocked
in and all eight bits are compared to the low address
value in SSP1ADD. Even if there is not an address
match; SSP1IF and UA are set, and SCL is held low
until SSP1ADD is updated to receive a high byte
again. When SSP1ADD is updated the UA bit is
cleared. This ensures the module is ready to receive
the high address byte on the next communication.
A high and low address match as a write request is
required at the start of all 10-bit addressing communi-
cation. A transmission can be initiated by issuing a
Restart once the slave is addressed, and clocking in
the high address with the R/W
bit set. The slave hard-
ware will then acknowledge the read request and pre-
pare to clock out data. This is only valid for a slave
after it has received a complete high and low address
byte match.
25.5.2 SLAVE RECEPTION
When the R/W bit of a matching received address byte
is clear, the R/W
bit of the SSP1STAT register is
cleared. The received address is loaded into the
SSP1BUF register and acknowledged.
When the overflow condition exists for a received
address, then not Acknowledge is given. An overflow
condition is defined as either bit BF of the SSP1STAT
register is set, or bit SSP1OV of the SSP1CON1 regis-
ter is set. The BOEN bit of the SSP1CON3 register
modifies this operation. For more information see
Register 25-4.
An MSSP1 interrupt is generated for each transferred
data byte. Flag bit, SSP1IF, must be cleared by soft-
ware.
When the SEN bit of the SSP1CON2 register is set,
SCL will be held low (clock stretch) following each
received byte. The clock must be released by setting
the CKP bit of the SSP1CON1 register, except
sometimes in 10-bit mode. See
Section 25.2.3 “SPI
Master Mode”
for more detail.
25.5.2.1 7-bit Addressing Reception
This section describes a standard sequence of events
for the MSSP1 module configured as an I
2
C Slave in
7-bit Addressing mode. All decisions made by hard-
ware or software and their effect on reception.
Figure 25-14 and Figure 25-15 is used as a visual
reference for this description.
This is a step by step process of what typically must
be done to accomplish I
2
C communication.
1. Start bit detected.
2. S bit of SSP1STAT is set; SSP1IF is set if inter-
rupt on Start detect is enabled.
3. Matching address with R/W
bit clear is received.
4. The slave pulls SDA low sending an ACK
to the
master, and sets SSP1IF bit.
5. Software clears the SSP1IF bit.
6. Software reads received address from
SSP1BUF clearing the BF flag.
7. If SEN = 1; Slave software sets CKP bit to
release the SCL line.
8. The master clocks out a data byte.
9. Slave drives SDA low sending an ACK
to the
master, and sets SSP1IF bit.
10. Software clears SSP1IF.
11. Software reads the received byte from
SSP1BUF clearing BF.
12. Steps 8-12 are repeated for all received bytes
from the Master.
13. Master sends Stop condition, setting P bit of
SSP1STAT, and the bus goes Idle.