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 :)

  • 1
    \$\begingroup\$ The 8-lead device marked "103" (not "EDI") is probably a resistor pack, with four 10K (10,000 Ohm) resistors (value code is "103"). There are two single 10K resistors in the bottom left of the second photo. \$\endgroup\$ – Peter Bennett Apr 21 '18 at 6:32
  • \$\begingroup\$ Edited the EDI , thanks :)) The two on the left go to X and G pins, the pull-ups are between SCL-VIN and SDA-VIN. \$\endgroup\$ – eudoxos Apr 21 '18 at 6:35
  • \$\begingroup\$ You really should be able to see for yourself that these pictures are out of focus. \$\endgroup\$ – Olin Lathrop Apr 21 '18 at 7:25
  • \$\begingroup\$ From what I see, VL53L0X has a static, non-programmable I2C address. You can't connect more the one on a bus. \$\endgroup\$ – Oldfart Apr 21 '18 at 7:30
  • \$\begingroup\$ @oldfart the address is perfectly programmable, just non-persistent. Using the XSHUT pin one brings them up one by one and reprograms the address. \$\endgroup\$ – eudoxos Apr 21 '18 at 7:58

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.

  • 1
    \$\begingroup\$ Wow, excellent, thank you so much! I will try and let you know. For Pololu (and Adafruit) I agree it is good to support them by buying their products, for the superior quality of docs, support and manufacture; in this case however it is their form-factor which is too big for the device I would like to build. \$\endgroup\$ – eudoxos Apr 22 '18 at 5:08
  • \$\begingroup\$ I measured resistances on the board now and I am getting "zeros" between SCL-D1 and SDA-D2, and also between VIN and the upper right half of the resistor pack. Why would it be necessary to add the SCL-D1 jumper? Also from the Pololu schematics, it should be enough to cut the traces from R1/R2 before Q2A/Q1A, since SCL-Q1A and SDA-Q1B traces must be already there? \$\endgroup\$ – eudoxos Apr 22 '18 at 5:29
  • \$\begingroup\$ "I am getting "zeros" between SCL-D1 and SDA-D2 ... Do you mean 0 Ω or open-circuit? \$\endgroup\$ – Transistor Apr 22 '18 at 8:05
  • \$\begingroup\$ @Transistor: 0Ω (plus some measurement noise and trace resistance). \$\endgroup\$ – eudoxos Apr 22 '18 at 8:19
  • \$\begingroup\$ @eudoxos - "Why would it be necessary to add the SCL-D1 jumper?" Because otherwise, after cutting at point 2, there's no connection from D1. "it should be enough to cut the traces from R1/R2 before Q2A/Q1A" That is effectively what I'm suggesting on your board (depending on what you mean by "before"). The challenge on your board is that your "R1 & R2" are in that resistor pack. "SCL-Q1A and SDA-Q1B traces must be already there" Yes they are, but due to limited physical access to cut anywhere easier, my suggested cut 2 disconnects the SCL-Q1A (D1) path & needs the jumper added. \$\endgroup\$ – SamGibson Apr 22 '18 at 11:36

Based on the excellent answer by @SamGibson (and his comment with suggestion), I realized the VIN trace is only used to feed the voltage regulator and those two pull-up resistors. So I could cut the trace in location 5 (after VIN goes to the regulator) and 1 (which disconnects SCL and SDA from each other through 2x10k resistor on the right of the 4-pack); the rest of the board is consuming regulated 2.8. For cutting, micro-drill is very good, better than Stanley knife. I am now running 7 sensors on one bus without any issue. Works perfectly.

board cut 5 schematics

breadboard with 7 vl53l0x sensors and OLED

  • \$\begingroup\$ I'm glad that modification works for you :-) However there's a reason why I deliberately didn't suggest it - it leaves SDA and SCL connected to each other through 20k i.e. through the two right-hand 10k resistors in the resistor pack. Measure it and you'll see I'm correct. This will cause crosstalk between the two signals and can cause problems (I've seen it). If you really want to cut at point 5 then, to prevent the crosstalk, you also need to cut the track linking the upper pads of the two right-hand resistors. However I thought that would be harder than my suggestion. It's up to you :-) \$\endgroup\$ – SamGibson Apr 22 '18 at 11:12
  • \$\begingroup\$ @SamGibson: you're right, they SDA and SCL have 20k between them :)) If I cut at both (5) and (1), will that be okay? I am looking for solution without jumper wires, it's more tricky to add them. \$\endgroup\$ – eudoxos Apr 25 '18 at 9:34
  • \$\begingroup\$ "If I cut at both (5) and (1), will that be okay?" Yes, that looks like a good plan - it's easier than my suggestion (which uses a jumper), as long as people can cut at point 5 (using only a blade, I thought the limited space around there would make that difficult, but with your micro-drill then cutting there is an option, as you have done). Can you add this "cut at 5 and 1" as an update in your answer? After doing that, it's fine with me if you want to then "de-accept" my answer and accept yours, as yours is the simpler solution for people who can cut at point 5. +1 :-) \$\endgroup\$ – SamGibson Apr 27 '18 at 12:39
  • \$\begingroup\$ @SamGibson I did as you said, though morally it is you who should get all the solution points. Thanks a lot again. \$\endgroup\$ – eudoxos Apr 30 '18 at 12:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.