Protocol calculator
I2C Pull-Up Resistor Calculator
Pull-up resistor min/max range from VDD, capacitance, rise time, and sink current.
I2C Rp min/max calculator
Use the standard pull-up resistor window from sink current and rise-time constraints.
- Rp min
- 967 ohm
- Rp max
- 3.5 kohm
- E12 pick
- 1.8 kohm
Range is valid. Choose a value inside the min/max window and verify edge timing on the board.
Formula notes
The lower bound is set by pull-down current: Rp(min) = (VDD - VOL(max)) / IOL. The upper bound is set
by bus capacitance and rise time: Rp(max) = tr / (0.8473 * Cb).
What this calculator is for
Use this I2C pull-up resistor calculator when you need a practical resistor window for a real board, not just a generic value copied from a reference design. The inputs match the limits that actually decide whether an I2C bus works: bus voltage, allowed low-level voltage, sink current, total capacitance, and the rise-time limit for the selected speed mode.
The result is a range, not a single magic resistor. A lower resistor gives a faster rising edge but increases current when a device pulls the line low. A higher resistor saves current but can make SDA or SCL rise too slowly, causing missed bits, clock-stretching confusion, or intermittent reads at higher bus speeds.
Key parameters
- VDD: the voltage the pull-ups connect to, commonly 3.3 V or 5 V.
- VOL(max): the highest low-level output voltage that receivers still treat as a valid low.
- Bus capacitance: the sum of device pins, traces, connectors, cables, level shifters, and probes.
- Rise time limit: the timing limit for the selected I2C mode, such as 1000 ns for Standard-mode or 300 ns for Fast-mode.
- Sink current: the current the weakest device on the bus can pull while still meeting VOL(max).
Worked 3.3 V example
For a 3.3 V bus, VOL(max) = 0.4 V, IOL = 3 mA, Cb = 100 pF, and a Fast-mode
rise-time limit of 300 ns, the minimum resistor is about 967 ohm and the maximum is about
3.5 kohm. That means common values such as 1.8 kohm or 2.2 kohm are reasonable
starting points before oscilloscope verification.
When the range is invalid
If Rp(min) is greater than Rp(max), reduce capacitance, lower the target speed, use a
stronger pull-down device, split the bus, or add an active I2C buffer.
Practical board checks
Many Raspberry Pi boards, sensor breakouts, EEPROM modules, and level-shifter boards already include pull-ups. If
three modules each include 10 kohm pull-ups, the effective resistance is about 3.3 kohm
before you add anything else. If you then add a 2.2 kohm pair on the base board, the effective value
drops further, increasing sink current.
Placement also matters. A compact single-board bus usually works with pull-ups near the controller. A longer cable or multi-board harness may behave better with pull-ups closer to the electrical midpoint, but the final check is still the rise time at the farthest device. Use the calculator to choose a safe window, then confirm the waveform with the board assembled.
Before choosing a resistor
- Include every pull-up already present on sensor boards, level shifters, and connectors.
- Measure rise time at the farthest device on the bus.
- Use the speed-mode rise-time limit that matches the firmware configuration.
Frequently asked questions
Does I2C need pull-up resistors on both SDA and SCL?
Yes. I2C uses open-drain or open-collector outputs, so devices pull the line low but do not actively drive it high. SDA and SCL both need a pull-up to the bus voltage, whether that pull-up is on the controller board, a sensor module, or your own PCB.
What pull-up value should I use for 3.3 V I2C?
For a common 3.3 V Fast-mode bus with VOL(max) near 0.4 V, 3 mA sink current, 100 pF bus capacitance, and a 300 ns rise-time limit, the valid window is roughly 967 ohm to 3.5 kohm. A 2.2 kohm or 1.8 kohm resistor is often a practical first choice, but the right value depends on measured capacitance and every existing pull-up on the bus.
Where should I place I2C pull-up resistors?
Use one pair of pull-ups per bus segment, usually near the controller or near the electrical midpoint of a longer bus. Do not add a separate full-strength pair at every device; those resistors combine in parallel and can make the effective resistance too low for weaker devices to sink safely.
How do multiple I2C devices change the resistor calculation?
Each device, connector, trace, cable, probe, and level shifter adds capacitance. More capacitance lowers the maximum allowed pull-up resistance because the rising edge gets slower. Existing module pull-ups also combine in parallel, lowering the effective resistance and increasing low-state current.
Why is my calculated I2C pull-up range invalid?
An invalid range means the minimum resistor allowed by sink current is larger than the maximum resistor allowed by rise time. Reduce bus capacitance, lower the I2C speed, split the bus, use a device with stronger sink capability, or add an active I2C buffer.