0
\$\begingroup\$

I have different SPI peripherals operating at 3.3 and 5 V logic levels, with the MCU operating at 3.3 V. Therefore I use level shifters (in my case I used 74LV1T32GWH with the two inputs tied together) to communicate with the 5V peripherals, which works fine on its own.

However, it looks like the MISO signal of the 3.3V peripheral is now "absorbed" by the output pin of the 5-to-3.3V level shifter (probably because the output pin of the level shifter doesn't have a high input impedance?) and therefore no signal from the 3.3V peripheral arrives at the MCU.

What can I do to solve this problem? Can I add a diode between MISO and 5-to-3.3V level shifter? Or do I need some kind of additional buffer? (I suspect this is what open drain buffers are for?)

I would like to avoid using some Tri-State-Buffer where I have to actively enable the buffer, because then I would have to have an additional CS line for that (at least if i have several 5V-peripherals behind the level shifter which don't share a common CS line).

\$\endgroup\$

1 Answer 1

-1
\$\begingroup\$

Two outputs can't be connected together to drive a single input. You need something you can disable the output, and a three-state buffer would be the first solution. A diode won't solve the problem.

\$\endgroup\$
4
  • \$\begingroup\$ So when SPI peripherals (without any level shifters) are connected, it only works because the devices have an internal tri-state buffer and switch their SDO pin to high impedance when not active? \$\endgroup\$
    – mrspl
    Dec 29, 2021 at 14:10
  • \$\begingroup\$ Yes. Typically SPI devices have three-state output drivers which makes it possible to connect multiple devices on same bus, otherwise it would not be possible. Some devices don't have three state output and then a three state buffer must be added to make it compatible with other devices and the chip select can be used to enable the buffer. \$\endgroup\$
    – Justme
    Dec 29, 2021 at 14:13
  • \$\begingroup\$ And could I also use open-drain buffers for level-shifting the MISO path instead, where I pull the common path high using a pull-up resistor? \$\endgroup\$
    – mrspl
    Dec 29, 2021 at 14:20
  • \$\begingroup\$ You could, but do you really want to? It will limit the communication speed, and you would still have to make absolutely sure that the unused device won't accidentally pull low. So it depends on your application. \$\endgroup\$
    – Justme
    Dec 29, 2021 at 14:23

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.