I have several devices on the I2C bus:

  1. RTC DS3231SN
  2. TMP100 temperature sensor
  3. EEPROM 24LC256

All devices are powered by 3.3V. The voltage on the I2C bus is 5V.

Question: Is the voltage difference on the bus and device power normal?

  • 3
    It's better to use level translator. Or you can try to power pull-ups from 3.3V, it usually works, but 3.3V CMOS output interfacing 5V CMOS logic input isn't 100% compatible as some devices might need almost 3.5V to detect high level. – KIIV Feb 21 '20 at 9:02
  • KIIV, Thank you for the help! – Delta Feb 21 '20 at 9:20
  • 1
    Are you using the bare chips, or do you have breakout board. If the latter, the problem might be with Arduino enabling the internal pull-up resistors inside the MCU. The breakouts already have pull-up resistors on them, so the Arduino board shouldn't do that (but does). Usually it doesn't matter, and help with people using bare chips, and forgetting to add pull-up resistors on the I2C lines. To disable them; see arduino.stackexchange.com/questions/13448/… . After that the I2C lines should read 3.3V instead of 5V. – Gerben Feb 21 '20 at 14:39

There are 3.3V devices that have 5V-tolerant inputs; that may be the case for your devices, but I would not risk it. Use a level converter designed for I2C, such as https://www.adafruit.com/product/757. Or you can make your own; https://cdn-shop.adafruit.com/datasheets/an97055.pdf explains how such a level converter works. Use a BSS138 if you are comfortable with soldering SMT components; otherwise use a 2N7000.

  • JayEye, Thanks for the answer! – Delta Feb 21 '20 at 9:47
  • For the DS3231 the maximum voltage if Vcc+0.3V. The TMP100 seems to allow up to 6V regardless of Vcc. The 24L256's maximum is Vcc+1.0V – Gerben Feb 21 '20 at 14:34

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.