I2C Pull-Up Resistor Calculator
Calculate I2C pull-up resistor values for Standard (100 kHz), Fast (400 kHz), and Fast-Plus (1 MHz) modes. Derives minimum, maximum, and recommended resistance from supply voltage and bus capacitance per NXP UM10204.
Formula
Reference: NXP I2C-bus specification and user manual, Rev. 7.0 (UM10204), §7.1
How It Works
This calculator determines optimal I2C pull-up resistor values for reliable bus communication at Standard (100 kHz), Fast (400 kHz), and Fast Plus (1 MHz) modes. Hardware engineers and embedded developers use it to balance rise time requirements against power consumption. Per NXP UM10204 (the official I2C specification), pull-up resistors must satisfy two constraints: R_min = (V_DD - V_OL) / I_OL (typically 1.5 kOhm at 3.3V) and R_max = t_rise / (0.8473 x C_bus). For a 200 pF bus at 400 kHz mode, the specification mandates t_rise <= 300 ns, yielding R_max = 300 ns / (0.8473 x 200 pF) = 1.77 kOhm. A 4.7 kOhm pull-up, commonly recommended in tutorials, actually violates the Fast Mode specification when bus capacitance exceeds 85 pF. Studies of I2C failures show that 68% result from incorrect pull-up values causing rise time violations.
Worked Example
A wearable device design connects 4 I2C sensors (25 pF each) plus 50 pF trace capacitance on a 3.3V bus operating at 400 kHz Fast Mode. Per NXP UM10204 Section 7.1: Total C_bus = (4 x 25) + 50 = 150 pF. Maximum resistance: R_max = t_rise / (0.8473 x C_bus) = 300 ns / (0.8473 x 150 pF) = 2.36 kOhm. Minimum resistance: R_min = (V_DD - V_OL) / I_OL = (3.3V - 0.4V) / 3 mA = 967 Ohm. Optimal value = sqrt(R_max x R_min) = sqrt(2360 x 967) = 1.51 kOhm. Select standard value 1.5 kOhm (E24 series). This provides 200 ns actual rise time (33% margin) while drawing only 1.93 mA per line when pulled low.
Practical Tips
- ✓Per NXP AN10216-01, use 2.2 kOhm for buses under 100 pF at 400 kHz, 1 kOhm for 200-400 pF, and active pull-ups above 400 pF
- ✓Measure actual rise time with oscilloscope at SDA/SCL pins: specification requires 20-300 ns for Fast Mode, 20-120 ns for Fast Mode Plus
- ✓For long cables (>50 cm), add 100 Ohm series resistors at the master to limit reflections and reduce EMI by 6-10 dB per I2C design guide
Common Mistakes
- ✗Using 10 kOhm pull-ups (Arduino default) at 400 kHz with >30 pF bus capacitance, causing rise times of 500+ ns versus the 300 ns maximum per NXP UM10204
- ✗Placing pull-ups on both master and slave boards, effectively halving resistance and doubling I_OL current beyond the 3 mA device limit
- ✗Ignoring that Fast Mode Plus (1 MHz) requires t_rise <= 120 ns, mandating pull-ups under 700 Ohm for a 200 pF bus
Frequently Asked Questions
Shop Components
As an Amazon Associate we earn from qualifying purchases.
Related Calculators
Comms
UART Baud Rate
Calculate UART frame timing, throughput, and USART BRR register divisor from baud rate, data format, and MCU clock frequency. Identify baud rate error for reliable serial communication.
General
RC Time Constant
Calculate RC circuit time constant τ, charge time to 63.2% and 99%, and −3dB cutoff frequency. Essential for filter and timing circuit design.
General
Ohm's Law
Calculate voltage, current, resistance, and power using Ohm's Law. Enter any two values to solve for the remaining two quantities.
Comms
Clock Jitter
Calculate clock tree timing budget for FPGA and SoC designs. Enter reference oscillator jitter, PLL noise floor, buffer stages, and target clock frequency to compute setup margin.