Advanced Member level 4
Protocol SPI is used for communication with MMC/SD card. Although there is a problem – level of voltage accepted by the card is +3,3V, so that giving it +5V can cause damage.
So, how to make microcontrollers communicate with each other? There are many solutions of this problem: using Zener diodes 3,3V or resistors that are the voltage dividers.
Both methods seem to be satisfactory, although they have some disadvantages: first of all, they cause delays on signal lines, what in turn limits the maximum speed of communication with the card, and thus data transfer.
Another problem is the fact that when using voltage dividers, there may be difficulties is a device that sends levels of +3,3V (such as FPGA) wants to communicate with the card.
In order to overcome these problems, presented here idea of a simple module in which the 74LVC4245A acts as a converter between the input and output level (+3,3V).
The system is very quick and does not cause any delays, as well as universal – it can have both +3,3V and +5V at the input.
The card is powered form +3,3V produced by the adjustable stabilizer LM317 (it has +5V at the input).
The circuit operates well with Atmega and CPLD.
Additionally, there is a jumper that allows to ground the line of CS card.
Remember to pull the output data line of the card (MISO) to VCC, because that line is supported as an open collector (pulled to the ground, when the card sends bit 0 and disconnected when the card sends bit 1).
SD and MMC cards can be handled in the same way.
Link to original thread (useful attachment) - Moduł do komunikacji AVR/FPGA/CPLD z kartą MMC/SD