I have two slaves on the I2C bus. Before, both master and slaves used the same power source (2.8V), and the I2C bus works fine.

Today, I changed the master to another power source (3.3V), keep the two slaves on 2.8V. Two pull up resistor are 4.7kohm, connected to 2.8V. Now my I2C bus doesn't work at all.

Is there anything else I have to do, to make this change? Do I need to change something in my code? I would appreciate any advice.

  • 1
    \$\begingroup\$ Since I2C is open collector and pullups to 2v8 should be above the logic threshold for almost all 3v3 parts, it's most likely that your problem is not the voltage difference but something else that changed while you where changing it. You might try going back. You are just getting to, but have not quite reached, the point where accidentally configuring the 3v3 part with a push-pull output could in theory damage the lower voltage parts. You do, however need to avoid the situation where one is powered and the other is not, this can cause everything form damage to failed startup. \$\endgroup\$ May 14, 2019 at 19:29
  • 1
    \$\begingroup\$ There is the possiblity that under certain conditions the pull up to 2.8V is not strong/fast enough to cross the "high" trigger level of the 3.3V logic. Or you might have messed up something with the grounds. \$\endgroup\$ May 14, 2019 at 20:09
  • 1
    \$\begingroup\$ (a) If you have an oscilloscope, then please edit your question and add scope traces showing (attempted) activity on the I2C bus for (i) the current, failing, configuration with a mixture of power sources and (ii) if possible, also the original, working, configuration. (b) Add details of the master and slave devices (including links to their datasheets). (c) You said that you have 4.7k pull-ups to 2.8V in the "failing" configuration, but you gave no details of the pull-ups in the "working" configuration. Please fully explain both configurations (and ideally add diagrams / photos). Thanks. \$\endgroup\$
    – SamGibson
    May 15, 2019 at 2:11

1 Answer 1


The power sources must have the same common for I2C to work. When you changed one of the power sources to 3.3V, you must make sure the ground of the 3.3V supply is still connected to the ground of the 2.8V supply.

Otherwise this is fine in general. In practice you should check what the high logic level threshold is for your 3.3V slave. If it is too close to 2.8V, then you will also need a level shifter to convert the 2.8V levels to 3.3V levels.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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