Cheapest way to translate 5V SPI signal to 3V SPI?

The simplest way (I don't know if it's the best) is with a simple voltage divider. 3.3V is 2/3 of 5V, so a 1:2 divider should work:

enter image description here


A simple resistive divider is the cheapest method and may serve your purposes well enough.

Placing a small capacitor across the top resistor will help square up edges caused by capacitive load. As long as the RC time constant of the two resistors in parallel combined with the output load capacitance is much faster than the rise and fall time of the signals this capacitor should not be needed.

There are many bidirectional and active solutions available. As an example only of a compact solution Maxim's MAX3023 provides 4 bidirectional drivers in a TSSOP package.

enter image description here


As Matt said, the simplest is a resistor divider. The drawback is that it will slow edges a little. You'll probably be OK with the 1 kΩ and 2 kΩ he shows but it would be a good idea to check the waveform with a scope.

When speed is a issue, like it most likely would be if you were running the SPI bus at 10 MHz, then a explicit level converter would probably be better. These chips have two power supplies and usually a direction input, which you could permanently tie in one direction in your case.