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, 2020 at 9:02
  • KIIV, Thank you for the help!
    – Delta
    Feb 21, 2020 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, 2020 at 14:39

1 Answer 1


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, 2020 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, 2020 at 14:34

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.