29.2.5.1.1 Bus Collision During a Start Condition
During a Start condition, a bus collision occurs if:
- SDA or SCL are sampled low at the beginning of the Start condition (see Figure 29-34).
- SCL is sampled low before SDA is asserted low (see Figure 29-35).
During a Start condition, both the SDA and the SCL pins are monitored.
If the SDA pin is already low, or the SCL pin is already low, then all of the following occur:
- the Start condition is aborted,
- the BCLxIF flag is set and
- the MSSP module is reset to its Idle state (see Figure 29-34).
The Start condition begins with the SDA and SCL pins deasserted.
When the SDA pin is sampled high, the Baud Rate Generator is loaded and counts down. If the
SCL pin is sampled low while SDA is high, a bus collision occurs because it is assumed that
another host is attempting to drive a data ‘1
’
during the Start condition.
If the SDA pin is sampled low during this count, the BRG is reset
and the SDA line is asserted early (see Figure 29-36).
If, however, a ‘1
’ is sampled on the SDA pin, the
SDA pin is asserted low at the end of the BRG count. The Baud Rate Generator is then
reloaded and counts down to zero; if the SCL pin is sampled as ‘0
’ during this time, a bus collision does not occur. At
the end of the BRG count, the SCL pin is asserted low.