I need a level shifter circuit between 5v and 3.3v. I'm interfacing two devices raspberry pi and arduino using I2C protocol. I google about level shifter for raspberry pi and arduino. I got this circuit. enter image description here

and also tried thisenter image description here

my raspberry pi i2c doesn't show any address of arduino. None of them gave close to 3.3v volt. Fisrt one gave 2.34v and second circuit gave 2.26v. I checked with other device,i connected the eeprom and i got the address of EEPROM. So raspberry pi i2c is working. What is the problem? Do I need to make some modification in those circuits to achieve 3.3v and to get the address of arduino?

  • What Arduino do you have? Can you disable any pull-ups to 5V on the Arduino? If you disable any pull-ups to 5V you won't need a level converter to talk to the Pi.
    – joan
    May 18 '15 at 12:33
  • What Pi do you have? When I was looking through raspi-config I found that one can turn i2c off, so you might want to check that. May 18 '15 at 18:44

When powered by 5V, Quad NMOS bus switches such as the TI 74CBT3125 and Fairchild FST3125 bi-directionally translate from 5V to 3.3V due to the threshold voltage of the NMOS switches. Fairchild has a good app note explaining how it works. The chips are available in 14 pin SO packages and cost about $0.20 each. You can translate 4 lines with a single chip.

There is also a page about using an Arduino as an I2C slave with the RPi at this page


at low currents such as in digital buses the Vds across the NMOS is very small and will not drop you from 5V to 3.3V. the app note is useless and wrong.

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.