29.2.4.1.3 I2C Host Mode Start Condition Timing
To initiate a Start condition (see Figure 29-25),
the user sets the Start Condition Enable (SEN)
bit. If the SDA and SCL pins are sampled high, the Baud Rate Generator is reloaded with the
contents of SSPxADD and starts its count. If SCL and SDA are both sampled high when the Baud
Rate Generator times out (TBRG), the SDA pin is driven low. The action of the
SDA being driven low while SCL is high is the Start condition and causes the Start (S) bit
to be set. Following this, the Baud Rate Generator is reloaded with the contents of SSPxADD
and resumes its count. When the Baud Rate Generator times out (TBRG), the SEN
bit will be automatically cleared by hardware; the Baud Rate Generator is suspended,
leaving the SDA line held low and the Start condition is complete.
Important:
- If at the beginning of the Start condition, the SDA and SCL pins are already sampled low, or if during the Start condition, the SCL line is sampled low before the SDA line is driven low, a bus collision occurs, the Bus Collision Interrupt Flag (BCLxIF) is set, the Start condition is aborted and the I2C module is reset into its Idle state.
- The Philips I2C Specification states that a bus collision cannot occur on a Start.