Guide

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

VCC 4.7 kΩ 4.7 kΩ CONTROLLER your MCU SDA — data SCL — clock sensor 0x76 display 0x3C RTC 0x68

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

One resistor each on SDA and SCL, to the bus voltage
SituationPull-up value
Standard-mode, 100 kHz (default)4.7 kΩ – 10 kΩ
Fast-mode, 400 kHz, or longer wires2.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.