Search topics...
I2CPhysical Layerfoundational

How do you choose pull-up resistor values for I2C, and what happens if you get them wrong?

0 upvotes
Practice with AISoon
Study the fundamentals first — I2C topic page

Pull-up resistor selection is a trade-off between rise time, power consumption, and noise margin. The I2C specification defines maximum rise times for each speed mode: 1000 ns for standard mode (100 kHz), 300 ns for fast mode (400 kHz), and 120 ns for fast mode plus (1 MHz). The rise time is determined by the RC time constant of the pull-up resistor (R) and the total bus capacitance (C, including trace capacitance, pin capacitance of all connected devices, and connector capacitance).

The minimum resistor value is limited by the maximum sink current of the I2C output drivers. The specification requires that the bus voltage is below 0.4V (VOL) when a device pulls it low while current flows through the pull-up. For a 3.3V bus: R_min = (VDD - VOL) / I_sink = (3.3 - 0.4) / 3 mA = 967 ohm. In practice, 1 kohm is the floor.

The maximum resistor value is limited by the rise time requirement. For fast mode (300 ns max rise time) with 200 pF bus capacitance: the rise time to 70% of VDD is approximately 0.8 x R x C, so R_max = 300 ns / (0.8 x 200 pF) = 1875 ohm. Typical values are 2.2 kohm for fast mode and 4.7 kohm for standard mode.

If resistors are too large: rise times are slow, causing the bus to fail at the target speed. The signal never fully reaches VDD before the next clock edge, and devices may not recognize high-to-low transitions reliably. At standard mode (100 kHz) with low capacitance, 10 kohm may work; at fast mode (400 kHz), it will fail.

If resistors are too small: the pull-up current exceeds the output driver's sink capability, and the device cannot pull the line below VOL. This causes false NACKs and communication failures. Excessively small resistors also waste power — at 1 kohm on a 3.3V bus, each pulled-low line draws 3.3 mA, which matters in battery-powered designs.

A common interview trap: candidates say "4.7 kohm" without understanding why. That value works for standard mode with moderate capacitance but is often too high for fast mode or buses with many devices.

Source: I2C Q&A