I2C/The two wires/Too many pull-ups

Too many pull-ups

Most modules carry their own pull-ups, and on one bus they all end up in parallel. A few are fine; five 4.7 kΩ pull-ups make 940 Ω, too strong for a chip to pull the line to a clean zero.

A module sold on its own has to work on its own, so almost every I2C module has pull-up resistors on the board. Put several on one bus and those resistors sit side by side, from the same line to the same supply. In parallel, they add up to less than any one of them:

Modules with 4.7 kΩTogether
14.7 kΩ
22.35 kΩ
31.57 kΩ
5940 Ω
6783 Ω

Below about 970 Ω on 3.3 V, a chip sinking the 3 mA it promises can no longer pull the line under 0.4 V (lesson 10). With five modules the lowest it reaches is about 0.48 V, and with six about 0.95 V. Nothing breaks: the bus that worked with three modules starts failing with six, some reads come back wrong, and some chips stop answering.

The fix: one set of pull-ups

Keep the pull-ups on one module and take them off the rest. Most modules have a way to do that: a solder jumper to cut, or resistors to remove. On our TK42 temperature board the jumper is on the back, labelled I2C PULL UP, and it ships joined, connecting two 10 kΩ pull-ups. Cut it on every TK42 but one.

If the modules' pull-ups are all removed, fit your own: 4.7 kΩ from SDA to 3.3 V and another from SCL to 3.3 V, once, anywhere on the bus.

Edit this page — content/fundamentals/i2c/too-many-pull-ups.mdx

Discuss this article

Ask about this page. The answer stays here, on the page it belongs to, for whoever hits the same wall next.

Browse Fundamentals on the forum →