Usage Notes and Known Design Exceptions to Functional Specifications
Advisory 1.0.26
I2C: SDA and SCL Open-Drain Output Buffer Issue
Revisions Affected
2.0, 1.0
Details
The I2Cx_SDA and I2Cx_SCL outputs are implemented with push-pull 3-state output
buffers rather than open-drain output buffers as required by I2C. While it is possible for
the push-pull 3-state output buffers to behave as open-drain outputs, an internal timing
skew issue causes the outputs to drive a logic-high for a duration of (0–5 ns) before the
outputs are disabled. The unexpected high-level pulse will only occur when the SCL or
SDA outputs transition from a driven low state to a high-impedance state and there is
sufficient internal timing skew on the respective I2C output.
This short high-level pulse injects energy in the I2C signals traces, which causes the I2C
signals to sustain a period of ringing as a result of multiple transmission line reflections.
This ringing should not cause an issue on the SDA signal because it only occurs at times
when SDA is expected to be changing logic levels and the ringing will have time to damp
before data is latched by the receiving device. The ringing may have enough amplitude
to cross the SCL input buffer switching threshold several times during the first few
nanoseconds of this ringing period, which may cause clock glitches. This ringing should
not cause a problem if the amplitude is damped within the first 50 ns because I2C
devices are required to filter their SCL inputs to remove clock glitches. Therefore, it is
important to design the PCB signal traces to limit the duration of the ringing to less than
50 ns. One possible solution is to insert series termination resistors near the AM335x
SCL and SDA terminals to attenuate transmission line reflections.
This issue may also cause the SDA output to be in contention with the slave SDA output
for the duration of the unexpected high-level pulse when the slave begins its ACK cycle.
This occurs because the slave may already be driving SDA low before the unexpected
high-level pulse occurs. The glitch that occurs on SDA as a result of this short period of
contention does not cause any I2C protocol issue but the peak current applies unwanted
stress to both I2C devices and potentially increases power supply noise. Therefore, a
series termination resistor located near the respective AM335x SDA terminal is required
to limit the current during the short period of contention.
A similar contention problem can occur on SCL when connected to I2C slave devices
that support clock stretching. This occurs because the slave is driving SCL low before
the unexpected high-level pulse occurs. The glitch that occurs on SCL as a result of this
short period of contention does not cause any I2C protocol issue because I2C devices
are required to apply a glitch filter to their SCL inputs. However, the peak current applies
unwanted stress to both I2C devices and potentially increases power supply noise.
Therefore, a series termination resistor located near the respective AM335x SCL
terminal is required to limit the current during the short period of contention.
If another master is connected, the unexpected high-level pulses on the SCL and SDA
outputs can cause contention during clock synchronization and arbitration. The series
termination resistors described above will also limit the contention current in this use
case without creating any I2C protocol issue.
Workarounds
Insert series termination resistors on the SCL and SDA signals and locate them near the
AM335x SCL and SDA terminals. The SCL and SDA pullup resistors should also be
located near the AM335x SCL and SDA terminals. The placement of the series
termination resistor and pullup resistor should be connected as shown in
.
28
SPRZ360F – October 2011 – Revised November 2013
Sitara™ AM335x ARM
®
Cortex™-A8 Microprocessors (MPUs) (Silicon
Revision 2.1, 2.0, 1.0)
Copyright © 2011–2013, Texas Instruments Incorporated