I2C, SPI, UART & RS-485 DISCUSSION

How do I choose I2C pull-up resistor values for a 400 kHz bus with several sensors?

Started by k.sureshkumar I2C pull-up resistorsbus capacitancerise time400 kHz fast modeopen drain
5 replies 248 views 6 participants
Latest activity · 30 Sep 2026

How do I choose I2C pull-up resistor values for a 400 kHz bus with several sensors?

k.sureshkumar I2C, SPI, UART & RS-485 Forum
#1

Tutorials suggest anything from 1 kΩ to 10 kΩ for I2C pull-ups, usually without a reason. My bus runs at 3.3 V and 400 kHz with five sensors on about 20 cm of traces and a short cable. Some of the breakout boards already have their own 10 kΩ pull-ups fitted.

Is there a way to calculate the right value instead of guessing, and do the pull-ups on the breakout boards matter?

Community replies 5

Re: How do I choose I2C pull-up resistor values for a 400 kHz bus with several sensors?

#2

There is a window with two limits. The lower limit comes from the sink current a device must handle while still reaching a valid low level: R_min = (VDD - 0.4 V) / 3 mA. At 3.3 V that is 2.9 V / 3 mA, roughly 970 Ω. Going lower than that asks the outputs to sink more than the specification guarantees.

The upper limit comes from rise time, because the resistor has to charge the bus capacitance.

Re: How do I choose I2C pull-up resistor values for a 400 kHz bus with several sensors?

#3

For the upper limit the I2C specification uses R_max = t_r / (0.8473 × C_b). Fast mode allows a rise time of 300 ns. With 200 pF of bus capacitance that gives 300 ns / (0.8473 × 200 pF), about 1.8 kΩ. With 100 pF it is about 3.5 kΩ. Standard mode allows 1000 ns, which is why 4.7 kΩ or even 10 kΩ works on slow, short buses.

Each device pin adds several picofarads, traces add a little, and cable is the big contributor, so estimate C_b generously.

Re: How do I choose I2C pull-up resistor values for a 400 kHz bus with several sensors?

#4

The breakout pull-ups do matter because they are all in parallel. Five boards with 10 kΩ each give an effective 2 kΩ, which may already sit inside your window. Add another 4.7 kΩ on the main board and the total falls to about 1.4 kΩ. That is still above the 970 Ω minimum here, but with more modules it is easy to drop below it, so count every resistor on the bus and remove some if needed.

Re: How do I choose I2C pull-up resistor values for a 400 kHz bus with several sensors?

#5

Measure instead of trusting the estimate. Put a scope probe on SCL and look at the rising edge: it should reach 70 percent of VDD well inside 300 ns for fast mode. A slow, rounded shark-fin edge means the pull-up is too weak for the capacitance; a low level that sits well above ground means it is too strong.

Use a 10x probe, because a 1x probe adds enough capacitance to change the result.

Re: How do I choose I2C pull-up resistor values for a 400 kHz bus with several sensors?

#6

One more check when devices run from different supplies: the pull-ups should go to the lowest supply that every device accepts as a valid high level, and no pin may be pulled above its absolute maximum rating. If a 5 V device and a 3.3 V device must share the bus and the 3.3 V part is not 5 V tolerant, use a level translator intended for I2C rather than adjusting resistor values.

TEP COMMUNITY