This is a widely used circuit for level-shifting I2C signals that will be familiar to many of us here:


simulate this circuit – Schematic created using CircuitLab

Can it be used for shifting UART signals at, say 9600 baud as well? The simulator doesn't see any problems with that idea. Obviously, UART is not a bus topology, but if you isolated this as a circuit between two devices and used one for RX and one for TX would you foresee any problems in doing that?

I recognize that the pull-up resistors don't serve a purpose in a UART context either (because it's a push-pull driver). But I'm thinking about sharing this level shifting circuit electrically in a context where I might be switching back and forth between open-collector and push-pull drivers (UART / I2C).

  • 1
    \$\begingroup\$ I've used this circuit for UART a bunch with no problems. I was using 115200 baud. UART idles high by default so as long as the driver current is not exceeded then there is no problems leaking the pull up resistors. \$\endgroup\$ – vini_i Sep 8 '18 at 16:57
  • \$\begingroup\$ What are the voltage levels you want to switch between? If one of them is true RS232 then I think the answer is no, it won't work. \$\endgroup\$ – Elliot Alderson Sep 8 '18 at 18:12
  • \$\begingroup\$ @ElliotAlderson 5V and 3.3V as depicted in the schematic. \$\endgroup\$ – vicatcu Sep 8 '18 at 18:27
  • \$\begingroup\$ Really depends on your implementation, path length etc.. Also most logic, even 5V will detect 3.3V as a valid high level, to go from 5V to 3.3V where you can use a simple voltage divisor with 2 resistors. \$\endgroup\$ – Damien Sep 13 '18 at 13:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.