I2C open-drain pull-ups

Why I2C SDA/SCL need pull-ups, how several modules share one net, and why 30–70 % of VDD is the rise window in UM10204.

An I2C bus is a wired-AND. Idle, SDA and SCL sit at VDD through pull-up resistors. Any device may pull a line to ground with an open-drain (or open-collector) transistor. That is why two drivers can share a net without fighting a push-pull high.

Several resistors on one net

Each module often ships its own pull-up. They all land on the same SDA or SCL node, so the DC resistance is the parallel equivalent. Four 4.7 kΩ parts become 1.175 kΩ. The I2C pull-up calculator lets you switch those modules on and off instead of pretending there is a single resistor.

Rise is an RC, not a 1τ rule of thumb

The line rises as V(t) = VDD (1 − e^(−t/RC)) after the transistor turns off. NXP UM10204 Rev. 7.0 §7.1 (1 October 2021) times the 30 % to 70 % slice of that exponential: t1 = 0.3566749 RC at 0.3 VDD, t2 = 1.2039729 RC at 0.7 VDD, so T = 0.8473 RC. That factor is written as 0.8473, not as ln(7/3) rounded by hand. TI SLVA689A §2 uses the same identities for Rp(min) and Rp(max).

Table 10 is not your pin

Table 10 lists IOL minima (3 mA in Standard-mode and Fast-mode at VOL = 0.4 V when VDD > 2 V; 20 mA in Fast-mode Plus) and Table 11 lists tr and Cb maxima. Those are bus numbers. A microcontroller GPIO, a level shifter, or a mixed-voltage stub can be weaker, slower, or capacitive in a way the table does not see. Enter the datasheet IOL and VOLmax you actually have. The calculator will not certify that a part can run Fm+.

What this note does not cover

Level-shifting topologies, series protection resistors, clock stretching, and HDMI/USB-C sidebands are different problems. If the [Rmin, Rmax] window is empty, shrinking Cb or raising allowed IOL is the physics — snapping to a nearby E24 does not make the interval exist.

Related