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
Results
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 mAMinimum 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
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Ω
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 ≈ 10pFPull-up Value Quick Reference
| Mode | Max speed | t_rise | C_bus (max) | R typical | R range |
|---|---|---|---|---|---|
| Standard | 100 kHz | 1000ns | 400pF | 4.7kΩ | 1k–10kΩ |
| Fast | 400 kHz | 300ns | 400pF | 2.2kΩ | 1k–3.3kΩ |
| Fast+ | 1 MHz | 120ns | 550pF | 1kΩ | 820Ω–1.5kΩ |
| High-speed | 3.4 MHz | 40ns | 100pF | 220Ω | 100Ω–470Ω |
More Examples
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Ω
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.