I2C pullups

Hi all,

I know that the SDA and SCL I2C lines should have pullups, and some breakout boards like Adafruit’s 992 have the pullups on the board.

So what happens if I use a number of sensors and it turns out that more than one has the pullups on board? Wouldn’t we then have a whole bunch of pullup resistors in parallel and a subsequent reduction in the actual pullup resistance? Would that have any consequences?

Yes! consequences. Some sensors are not that strong with pulling down the SDA and SCL, and those are the first that cause trouble with too much pullup.

I have a level shifter with pullups on both sides, plus sensor modules, plus the Arduion Mega board with onboard 10k pullups. It's just too much.

With a level shifter, a 3.3V sensor has to pull down the 3.3V side and the 5V side of the I2C bus. Also a 5V sensor has to pull both sides down.

I think about 2k2 total pullup can be used for a 400k I2C bus. But 4k7 for total pullup on a normal 100k I2C bus. The total value is all the pullup resistors parallel of course. With a level shifter in the circuit, the 3.3V makes it different, and it is better to calculate the total current. So I de-solder all the pullups from the sensor modules, since I have enough pullup in my circuit already. I also disable the internal pullup resistors in my Arduino I2C slaves now.

P.S.: In Arduino 1.5.8 a new function Wire.setClockSpeed() can set the speed to 400k (or any other value).