Rate this calculator

I2C Pull-up Resistor Calculator

Calculate the valid pull-up resistor range for I2C buses based on supply voltage, bus speed, and capacitance.

Bus Parameters

pF

Results

R max967 Ω
R min3.54 kΩ
No valid range — reduce bus capacitance or lower speed
VccRpSDAMCUSensorCbusGND

I2C pull-up: Rp connects SDA/SCL to Vcc

Why I2C Needs Pull-up Resistors

I2C is an open-drain bus — devices can only pull the line low. Pull-up resistors are required to bring the line back high when no device is driving it. Without them, the bus has no defined high state.

The maximum pull-up resistance is set by the VOL specification: the resistor must supply enough current (at least 3 mA sink) to meet the low-level output voltage requirement of 0.4 V.

The minimum pull-up resistance is set by the fall time (tf) specification. The RC time constant formed by the pull-up and bus capacitance must allow the signal to fall fast enough. Faster bus speeds demand lower resistance.

Maximum Resistance

Rmax = (Vcc − 0.4 V) / 3 mA

Minimum Resistance

Rmin = tf / (0.8473 × Cbus)

Key Points

  • Faster speeds (Fast, Fast+) need lower pull-up values
  • Higher bus capacitance also requires lower pull-up values
  • Too high a resistor: signal rise too slow, communication errors
  • Too low a resistor: excessive current, power waste, devices may not pull low
  • Maximum bus capacitance per I2C spec: 400 pF
  • Use the geometric mean of Rmin and Rmax as a good starting point

Common Applications

  • Microcontroller to sensor communication
  • EEPROM and RTC chips
  • OLED and LCD display drivers
  • IMU and environmental sensors

Practical Examples

3.3 V bus, 3 devices, 100 kHz

Short I2C bus on a PCB with 3 devices (approx. 50 pF total capacitance) at standard 100 kHz mode. Choose pull-up resistor.

Rmax = 0.8473 × R × 50pF < 1 µs → R < 23.6 kΩ · Rmin ≈ (3.3−0.4)/0.003 = 967 Ω · Use 4.7 kΩ

5 V bus at 400 kHz Fast Mode

Arduino I2C bus at 400 kHz Fast Mode with 100 pF estimated bus capacitance. Need rise time < 300 ns.

Rmax = 0.8473 × R × 100pF < 300ns → R < 3.54 kΩ · Use 2.2 kΩ or 3.3 kΩ pull-ups

Formula Reference

I2C pull-up resistor selection

Maximum R (rise time limit): R_max = t_rise / (0.8473 × C_bus) t_rise = 1000ns (standard), 300ns (fast), 120ns (fast+) Minimum R (current limit): R_min = (Vcc – V_OL) / I_sink V_OL ≤ 0.4V, I_sink = 3mA (standard I2C) → R_min = (3.3V – 0.4V) / 3mA = 967Ω → use ≥ 1kΩ Bus capacitance: traces ≈ 10pF/cm, each device ≈ 10pF

Pull-up Value Quick Reference

ModeMax speedt_riseC_bus (max)R typicalR range
Standard100 kHz1000ns400pF4.7kΩ1k–10kΩ
Fast400 kHz300ns400pF2.2kΩ1k–3.3kΩ
Fast+1 MHz120ns550pF1kΩ820Ω–1.5kΩ
High-speed3.4 MHz40ns100pF220Ω100Ω–470Ω

More Examples

Arduino + 2 sensors, standard 100kHz

C_bus ≈ 3×10pF + 10cm traces×5pF/cm = 80pF. R_max = 1000ns/(0.8473×80pF) = 14.8kΩ, R_min = 967Ω → use 4.7kΩ ✓

Recommended: 4.7kΩ · Valid range: 967Ω–14.8kΩ

Raspberry Pi + 5 devices, fast 400kHz

C_bus ≈ 6×10pF + 20cm×5pF/cm = 160pF. R_max = 300ns/(0.8473×160pF) = 2.21kΩ → use 2.2kΩ (right at limit). Consider shorter PCB traces or I2C bus buffer (PCA9600) for reliability.

Recommended: 2.2kΩ · R_max: 2.21kΩ (tight margin)

Design tip

When in doubt, use 4.7kΩ for 100kHz and 2.2kΩ for 400kHz. 3.3V systems: avoid 10kΩ pull-ups at fast mode — rise time too slow. Never use 5V pull-ups on 3.3V MCU I2C pins — use level shifter or 3.3V pull-ups. For long cables (> 1m): use active I2C buffer/repeater like TCA4307.

Did you know? I²C was invented by Philips Semiconductor (now NXP) in 1982 to allow chips on the same PCB to communicate with just two wires. The open-drain bus topology — where any device can pull the line low — means pull-up resistors are essential to return lines to the high state.