Electrical – Removing pull-up resistors from breakout board

breakouti2cpullupresistors

I use VL53L0X breakout boards for distance measurement on I2C, each with built-in level shifter and pull-up resistors (10kΩ, as measured). As I connect many of those on a single bus (5 and more), I need to remove the pull-up resistors to keep the total resistance above some critical value, about 1.63kΩ for 5V, as explained here, so that i2c low-level voltage does not go above 0.4V.

I would am not sure I identify correctly the resistor on the board and how to remove it. It is a cheap board from ebay, so of course no schematics and so on. The board looks like this:
[![board front][1]][1]
[![board back][2]][2]

This is a better back picture from Amazon:
[![enter image description here][3]][3]

By measuring resistances, I could identify the resistor as the one "103" (not EDI — edited; thanks) in the middle, which is a 4-way resistor. It seems to be connecting more things together, so I think if I remove it completely, the board will stop working altogether. Is it doable "by hand" (I do have that fine tip for soldering but not much experience with miniature soldering)?

I appreciate any hints, I have numerics background, this is new to me 🙂

Best Answer

Is it [possible to remove the I2C pull-up resistors] "by hand" (I do have that fine tip for soldering but not much experience with miniature soldering)?

I think I've reverse-engineered the schematic for your board (it would be easier with the board in my hands) - and then I found a schematic online for a similar (though not identical) breakout board to yours, which fits with my analysis.

So I'm fairly confident, but you have the board in your hands and I don't, so please check my assumptions.

The bad news is that, as you know, your board wasn't designed to allow easy disconnection of the I2C pull-ups. Although it's easy to disconnect the pull-up from SDA, it's a little harder for SCL. My approach requires a sharp scalpel to cut traces and a small jumper wire needs to be added.

I've found a slightly more in-focus photo of your board from one of the many Ebay sellers, so I've marked the changes on there:

VL53L0X breakout board with modifications to disconnect I2C pull-ups

There are a number of ways to approach your requirement. I'm assuming that you want to make minimal modifications to the breakout boards.

  • Looking at the vertical green line 4: I believe the two 10k resistors in the resistor pack to the left of that line, both have their upper connections to the 3.3V from the 3-pin regulator immediately above on the PCB. Think of those as the "internal I2C pull-ups". You don't want to disconnect those.

  • The two 10k resistors in the resistor pack to the right side of green line 4 both have their upper connections to the external VIN pin. Think of those as the "external I2C pull-ups" and those are the ones you do want to disconnect.

  • Although not easy to see in any of the photos so far, I found another photo of this breakout board that showed the 6-pin SOT323 package device had the top mark 702. That fits with the package being a dual N-channel MOSFET (similar to two 2N7002 MOSFETs in one package). As an example, the GSM7002T is such a device, and has the top code 702:

GSM7002T dual N-channel MOSFET pinout

Provided the few critical parameters (especially Vgs) are suitable, then other dual N-channel MOSFET devices could also be used in that location, so I expect there are a variety of other top marks on those devices used on the various breakout boards. The purpose of that device is as a typical level-changer (level translator) for the two I2C signals, since according to the VL53L0X datasheet, it should not be connected directly to an I2C bus which is pulled-up to anything above 3.5V e.g. a 5V I2C bus.

  • To disconnect the "external I2C pullups" you need to:
    • Cut the track at point 1 to disconnect the external pull-up to SDA.
    • Cut the track at point 2 to disconnect the external pull-up to SCL.
    • Solder an insulated jumper wire as shown for connection 3, between the Drain D1 of the dual N-channel MOSFET, and the SCL header pin hole.

Then you can add one suitable pull-up resistor to each of the two I2C signals, as appropriate for the whole I2C bus. Job done!


Later, I found that Pololu make a VL53L0X breakout board and they supply a schematic diagram:

Pololu VL53L0X breakout board schematic

That schematic nicely shows the use of the N-channel MOSFETs as level-changers. It is not completely accurate for your board, but the differences are fairly small, e.g.:

  • The header pinout is obviously different.

  • Your board probably has a 3.3V regulator (this is based on the top codes that I saw on various other Ebay listings - I can't read the regulator's top code on your photos); the Pololu board has a 2.8V regulator.

  • Instead of discrete resistors on the Pololu board, 4 resistors are replaced by the resistor pack on your board.

  • The Pololu board has 47k pull-ups on XSHUT and GPIO1 and 1k series resistors in both signals; your board has 10k pull-ups and no series resistors.

From a quick comparison:

  • Pololu R1 = 4th resistor from the left in your 10k resistor pack
  • Pololu R2 = 3rd resistor from the left in your 10k resistor pack
  • Pololu R3 = 2nd resistor from the left in your 10k resistor pack
  • Pololu R4 = leftmost resistor in your 10k resistor pack
  • Pololu R5 & R6 = separate 10k resistors near the XSHUT and GPIO1 header pin holes on your board.

I have no association with Pololu, but their documentation is always far above the near-zero information from Ebay, Ali Express and Amazon sellers etc., so I have been a happy buyer of their products.