Skip to content
Free public beta until December 4, 2026: every course is open, no card needed. After that, the first chapter of each course stays free and full access is a one-time $39 ($19 for up to 100 founding members chosen for helpful feedback). Your progress is kept. How the beta works

Recipe

Connect a 3.3 V part and a 5 V part

Use when: two chips that run at different supply voltages share one or more signal wires

Goal: every signal read reliably in both states, with no input pushed past its absolute maximum

Taught in 3.3 V vs 5 V and level shifting

  1. 1

    Note which chip drives each wire, and whether any wire is driven from both ends.

    Example

    Uno R4 TX → ESP32-S3 RX (down); ESP32-S3 TX → Uno R4 RX (up); a shared I²C data line (both).

    Why: down and up need different fixes, and a both-ways wire needs a third.

  2. 2

    For each direction compare the driver's highest HIGH with the input's maximum, then V_{OH} with V_{IH} and V_{OL} with V_{IL}.

    • over the maximum — shift down.
    • a negative HIGH margin — shift up.
    • both margins positive and under the maximum — connect directly.

    Why: the maximum protects the chip; the margins make the reading reliable.

  3. 3

    Down only: a divider for slow signals, a 5 V-tolerant buffer for fast ones. Up: a buffer powered from 5 V, or a MOSFET shifter. Both ways: a MOSFET shifter or an auto-direction chip.

    Why: a divider can only lower a voltage, and pull-up shifters are slower than driven ones.

  4. 4

    Recompute the HIGH, the LOW and the worst case at the receiving pin.

    Why: a shifter that lands below the HIGH threshold is a new fault, not a fix.

Common mistakes

  • Trusting "it works on my desk" for a negative margin.
  • Assuming a pin is 5 V tolerant because the chip family is.
  • Using a divider on a wire that is driven from both ends.