0
\$\begingroup\$

Usually pullup resistors are needed for i2c but if I have pullups in master and hosts devices and when I add another one device to I2C bus then bus stop working. I cann't remove pullups. Does it make sense to add pulldown resistor to compensate pullups? or even resistance regulator to find optimal radio for pullup and pulldown?

PS My device is quad with matek 405 ctr. I am adding GPS TS100 mini. I watched a set of videos. They say that there is a zillion of fake magnetometers. hmc5883, qmc5883, qmc5883 that is flashed to be hmc5883. I tried 3 GPS (not just TS100) and I pulldown resistor is just another hack I thinking to try and I wonder how common this is and what could be wrong. I am a bit out of budget to get 4th GPS.

\$\endgroup\$
  • 3
    \$\begingroup\$ this will just create a voltage divider \$\endgroup\$ – JonRB Oct 30 '18 at 22:48
  • 2
    \$\begingroup\$ How many loads are on the bus? Have you verified you are in spec for bus capacitance? \$\endgroup\$ – The Photon Oct 30 '18 at 22:53
  • 2
    \$\begingroup\$ If you can't remove the pullups (bad design), then there's going to be a limit on the number of devices that you can't exceed. At some point, no single device can pull down against all of the combined pullups. \$\endgroup\$ – Dave Tweed Oct 30 '18 at 23:03
  • 2
    \$\begingroup\$ Max - "I cann't remove pullups" Why not? What parts of the system can be changed? Can you describe the overall system design, to give readers a better chance to find more creative solutions? \$\endgroup\$ – SamGibson Oct 30 '18 at 23:19
  • 1
    \$\begingroup\$ To understand the actual problem here, you need to do things like verify that it is not an address conflict (or main loop timing one or software bug), and look at the actual waveform with a scope. Removing pullup resistors is fairly simple. Overall this sounds more like an off-topic question on the usage of devices with unknown internal details, rather than an on-topic question about designing something yourself. \$\endgroup\$ – Chris Stratton Oct 31 '18 at 12:50
2
\$\begingroup\$

No, or at least not past a very low limit like one or two additional devices. You would (1) be creating a voltage divider and the logic levels for I2C would go out of spec and (2) further increasing the pull-down current the I2C devices have to handle. Usually I2C devices only use pull-ups at one or two ends of the bus.

If you really have to, you can calculate how much of a divider you can tolerate before you reach the minimum voltage of I2C, but also calculate the Thevenin equivalent and verify that you are not exceeding the drive current (unlikely given that exceeding this current is what is making you consider this).

If you really cannot remove the extra pull-ups you might be able to use some of the many available I2C repeaters/bus extenders or isolators. You should be able to find breakout boards with some of those devices. Adafruit has an I2C multiplexer that would work, but it would require software changes.

\$\endgroup\$
  • \$\begingroup\$ How exactly do you think that pull-down resistors will increase the pull-down current that devices have to handle??? A resistor in parallel with a FET does not increase the current through it. \$\endgroup\$ – Chris Stratton Oct 31 '18 at 12:47
  • \$\begingroup\$ The pull-down resistor itself won’t. But adding a device will, which is the problem. You cannot divert too much current via the pull-down anyway. \$\endgroup\$ – Edgar Brown Oct 31 '18 at 12:52

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.