I²C Pull-Up Resistor Calculator

Minimum and maximum pull-up values from bus capacitance and rise-time limits, per the I²C specification.

Example: A 3.3 V bus at 400 kHz with 100 pF of capacitance needs pull-ups between 966.7 Ω and 3.541 kΩ — use 1.8 kΩ.

Check it against real silicon

Chiprun runs your firmware on an emulated microcontroller and hands back the UART output, so you can confirm these numbers rather than trusting them.

Chiprun docs

Formula

R_max = t_r / (0.8473 × C_bus)    R_min = (V_dd − V_OL) / I_OL

Calculations follow NXP UM10204 (I²C-bus specification).

Worked example

A 3.3 V bus at 400 kHz with 100 pF of capacitance needs pull-ups between 966.7 Ω and 3.541 kΩ — use 1.8 kΩ.

  1. R_max = t_r / (0.8473 × C_bus)

    R_max = 300 ns / (0.8473 × 100 pF)

    R_max = 3.541 kΩ

    A larger resistor charges the bus capacitance too slowly to meet the rise-time budget.

  2. R_min = (V_dd − V_OL) / I_OL

    R_min = (3.3 V − 0.4 V) / 3 mA

    R_min = 966.7 Ω

    A smaller resistor demands more current than the open-drain output can sink, so the line never reaches a valid low.

  3. recommended = √(R_min × R_max)

    √(966.7 Ω × 3.541 kΩ)

    1.85 kΩ → 1.8 kΩ (E24)

Frequently asked questions

What value pull-up should I use for I²C?

It depends on bus capacitance and speed, which is why a single answer does not exist. 4.7 kΩ is the traditional default and works for a short 100 kHz bus. At 400 kHz with several devices you often need 2.2 kΩ or lower, and a long bus may need a buffer instead.

Why does my I²C bus fail at 400 kHz but work at 100 kHz?

Almost always rise time. Fast mode allows only 300 ns against Standard mode's 1000 ns, so a pull-up that was comfortable at 100 kHz cannot charge the bus fast enough at 400 kHz. Lower the resistor value, or reduce capacitance by shortening the traces.

Can I make the pull-ups as small as I like?

No. Every device pulling the line low has to sink the resulting current, and the spec only guarantees 3 mA. Go too low and the line never reaches a valid logic zero — the bus appears stuck high with no obvious cause.

Do I need pull-ups on every module?

No, and it is a common problem. Pull-ups belong once per bus, not once per device. Several breakout boards each fitting their own 4.7 kΩ puts them in parallel — four modules gives 1.2 kΩ, which may exceed what your devices can sink.

Related tools