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
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.
