BME680 breakout pullups


#1

Does the BME680 breakout have pullups on the I2C lines? I’ve looked round and can’t find (or have overlooked) any circuit diagram.

Looking at the photos, it looks like it might have a FET-based logic level shifter on board, and there’s a sprinkling of SMD labelled 472, which I might think are 4k7 pull-up resistors, except I can’t quite see the traces well enough to be sure. (Though noting that the device works at 1.2-3.6V I observe it wouldn’t need shifting on a pi).

I’m nervous because I would want to put it on a bus that already has a few devices on it. Those devices are on Adafruit breakout boards, and they customarily put 10k pullups on board. The I2C specs say pullups should not be less than 1k0 for a bus at 3.3V, and if it is 4k7 pullups, I’m going to exceed that limit if this goes on the bus with the other devices already there. In that case, with the 1k8 on-board on the pi, this on its own gives a total 1k3. I can just squeeeze two more 10k on (total effect than 1k03) before going below the allowed minimum.

Of course, I could then do some desoldering, but I’d want to know which to desolder, so a circuit diagram would be nice…


#2

Could you please post links to this info? The i2c pull up limit specifically. It’s news to me and I’d like to educate myself on it. For what its worth, on one PI I have a BMP180, SI1146, DS3231, and Sense Hat all running off of i2c with no issues. Non that I’m aware of anyway.


#3

The canonical reference has to be https://www.nxp.com/docs/en/user-guide/UM10204.pdf since Philips created the bus. Section 7.1 of that (and specifically figure 42) addresses the limits of pullup resistor values.

ti has an application note specific to the question: http://www.ti.com/lit/an/slva689/slva689.pdf Figure 2 in that is a chart for resistor minimum value.

The specification states that each device needs to be able to sink 3mA to pull the bus lines low. Clearly, if the devices on the bus are all actually capable of sinking a lot more than that, then you could have much lower pullup resistances. My guess is that most devices are capable of sinking more, so one would mostly get away with it. However data sheets don’t always quote the limit - for example, I’m looking at putting multiple Holtek HT16K33 on a bus, and although the datasheet has various I2C interface electrical characteristics specified, the sink current capability is not one of them - presumably because it is at least the 3mA the standard requires, so the manufacturer sees no need to specify it more precisely.


#4

Ok, thanks for that. I’ll save reading it (in depth) for another day. I won’t pretend to fuly understand it at this time. Are you worried about damaging something, or it just not working as intended?


#5

Most likely not working reliably, though in principle it could break something - if a device had delicate internals interfacing to the bus and you stuck much more current through than it could handle that could do some damage.


#6

Our BME680 breakout has a 1.8v regulator onboard, plus- as you rightfully point out - i2c logic level shifting. There are pull-ups on the 1.8v (device) side of the logic level shifting circuit, but since the Pi has built-in i2c pull-ups (and this is designed predominately for the Pi) there are none on the host side of the bus.


#7

Doing some quick math three 10 K resistors in parallel is only 3.3 K. Put 4.7 in parallel with that and its 1.94 K. Even with 4 10 K and a 4.7 K its still 1.5 K. Still above the min of 1 K.


#8

Alphanumeric, I think you’ve possibly forgotten about the 1k8 pullups on the Pi itself. If you include them, I believe you’ll get the answers I give in my opening post.

However, gadgetoid has indicated that there are no pullups on the host side of the breakout level shifter, so my speculation about 4k7 on the board is false. Thus, I can almost certainly safely put my four adafruit breakouts plus the BME680 - the bus pullup will then be 1.04kOhm, so only just outside limit (3.2mA).


#9

Yes missed that part, my bad.