I2C Pull-up Resistor Calculator

I2C bus issues that only show up at certain clock speeds or bus lengths are almost always a pull-up resistor problem. This calculator finds the valid pull-up range straight from the I2C-bus specification's sink-current and rise-time limits, for your actual bus capacitance and target clock speed, rather than defaulting to whatever value ended up in the last design.

I2C Pull-up Resistor

Bus pull-up range from the I2C-bus specification's sink-current and rise-time limits

Show your work
Bus speed mode
Rp min (sink-current limit)
967 Ω
Rp max (rise-time limit)
3.54 kΩ
Suggested E24 value
1.80 kΩ
Rise time at suggested value
153 ns
Formula
VDDRpSDA or SCLCbevery pin + tracedevicedeviceIOL
Rp,min=VDD−VOL,maxIOL
Rp,max=tr,max0.8473·Cb
Rp≈Rp,min·Rp,max
tr=0.8473·Rp·Cb

Standard mode (100 kHz): rise time up to 1000 ns

Fast mode (400 kHz): rise time up to 300 ns

Fast-mode Plus (1 MHz): rise time up to 120 ns

0.8473 = ln(0.7 / 0.3): the I2C spec measures rise time from 30% to 70% of VDD. The suggested value is the standard resistor nearest the geometric middle of the range.

  • VDD = supply the pull-up connects to (V)
  • VOL,max = highest voltage that still counts as a logic low (V)
  • IOL = current a device can sink while holding the line low (A)
  • Cb = total bus capacitance: every pin, trace and connector (F)
  • tr = rise time, 30% to 70% of VDD (s)
  • Rp = pull-up resistor, one on SDA and one on SCL (Ω)

Two pull-ups are needed — one on SDA, one on SCL — each sized from this same range. Most designs use matched values on both lines.