i2c pull-up resistors
i2c devices can only pull the bus low — resistors do all the pulling high. Get them wrong in either direction and the bus misbehaves in confusingly different ways.
The why
Why i2c needs pull-up resistors: open-drain in one paragraph
SDA and SCL are open-drain: any device may ground the line, none may drive it high. That's what lets many chips share two wires without ever short-circuiting each other — but it means the line only returns high because a resistor to the supply drags it there. The resistor's value sets how fast that rising edge is: too weak (high resistance) and edges become lazy ramps that smear at speed; too strong (low resistance) and devices — guaranteed by the i2c spec (UM10204) to sink only 3 mA — can no longer pull the line convincingly low. That bounds every bus to roughly 1 kΩ–10 kΩ.
One resistor per line, from that line to VCC — that's the entire circuit. Every device on the bus shares the same pair, which is exactly why chained breakouts (each bringing its own pull-ups) stack in parallel; more on that below.
The values
What i2c pull-up resistor value to fit
| Situation | Pull-up value |
|---|---|
| Standard-mode, 100 kHz (default) | 4.7 kΩ – 10 kΩ |
| Fast-mode, 400 kHz, or longer wires | 2.2 kΩ – 4.7 kΩ |
| Fast-mode Plus, 1 MHz | ≈ 1 kΩ |
| Absolute floor (3 mA sink limit) | ≈ 1 kΩ — never lower |
The trap
Chained breakouts multiply pull-ups
Nearly every breakout ships with its own pull-ups (typically 2.2–10 kΩ), which is why Qwiic and STEMMA QT chains work with zero thought. But parallel resistors combine: five boards with 10 kΩ each present 2 kΩ to the bus, and a long chain of boards with strong pull-ups can sail under the 1 kΩ floor — at which point devices can't pull the bus low and everything vanishes from a scan. If a long chain dies, that's the first suspect: disable or desolder pull-ups on some boards, or split the chain with a multiplexer (see the address-conflict guide).
Symptoms cheat-sheet: no devices found → pull-ups missing entirely; works short, fails long → pull-ups too weak for the wire length, go stronger; long chain suddenly dead → combined pull-ups too strong, remove some. A logic analyzer makes all three obvious — lazy ramps versus crisp edges versus a line that never rises.
Mixed voltages?
Questions
Pull-up resistor FAQ
What value pull-up resistor should I use for i2c?
4.7 kΩ is the safe default at 100 kHz on 3.3 V or 5 V. Go stronger (2.2 kΩ) for Fast-mode 400 kHz or longer wiring, and around 1 kΩ for Fast-mode Plus. Never go below about 1 kΩ — the spec only guarantees devices can sink 3 mA, and a stronger pull-up than that can't be pulled low reliably.
Do I need pull-ups if my breakout board already has them?
Usually not — most breakouts (Qwiic, STEMMA QT, Grove) ship with pull-ups on board, which is why plug-together chains just work. The catch is that parallel pull-ups combine: chain five boards with 10 kΩ each and the bus sees 2 kΩ total. Long chains can end up too strong — desolder or disable some if the bus stops responding.
Can I use my microcontroller's internal pull-ups for i2c?
Only as a bench hack. Internal pull-ups are typically 20–50 kΩ — far too weak for clean i2c edges except at low speed with very short wires. If it works, it's marginal; fit real external resistors for anything you intend to keep.
What happens if pull-ups are missing entirely?
The bus can't return high, so nothing works: SDA/SCL sit low or float, i2cdetect finds nothing, and reads time out. If a sensor works on one host but not another, missing pull-ups on the second host are the first thing to check — some bare modules and MCU boards include none.
Do both SDA and SCL need a pull-up?
Yes, one resistor each, to the bus voltage (3.3 V or 5 V). And on a mixed-voltage bus, a proper level shifter provides its own pull-ups on both sides — that's the clean way to bridge 3.3 V and 5 V devices.