Here is my project on interfacing of SD Card (microSD). microSD cards
are available very cheap nowadays, a great option for having a huge
memory in any embedded system project. It is compatible with SPI bus, so
the interfacing is easy. SD card adapters are also easily available in
market, one can easily make a bread-board adapter by soldering few pins
on it. Following figures show the SD card pin-out & the bread-board
adapter design by soldering 7-pins of a breakout header on the microSD
adapter (Click on images for larger view).
I
had started this project with 1GB microSD card from SanDisk (later on
tested with transcend cards also). The microcontroller is AVR ATmega8 or
ATmega32 running at
8Mhz
internal clock. MAX232 is used to interface the circuit with PC for
monitoring the data. A 3.3v supply is used for powering the mega8,
microSD and max232 (though the specified supply for max232 is 5v, it
works comfortably at 3.3v).7 pins of the microSD are used here, shown in
the figure of pin-out.
Schematic for ATmega8 is shown here (
updated on 10 May 2010,
SD series resistors are removed, as they were limiting the speed of SPI
bus. 51k pullups are added on CMD/DAT lines. This gives better
stability with different cards. Also, two 3.6v zeners are added to
protect SD in case when the ISP programmer voltage levels are of 5v.
these diodes are not required if your programmer has settings for 3.3v
output)
(Note: VCC & GND pins of MAX232 are not shown in the schematic, but they must be connected in the actual hardware)

Following is the schematic for ATmega32, without RTC (updated on
10 May 2010):

Following is the schematic for ATmega32, with RTC (added on 17 May 2010). Here two supply voltages are used, 3.3v for SD & 5v for remaining ICs.

The
aim of this project was to learn interfacing of SD card and to
understand the data transfer in raw format as well as in FAT32 format. I
started with raw data transfer, sending some data to any block of the
microSD, reading a block of it, reading and writing multiple blocks,
erasing multiple blocks. All this in raw format. I used RS232 for
viewing the data read by microcontroller from SD card. The uc sends the
data to HyperTerminal. Similarly, to write data to card, the data was
fed thru HyperTerminal, by typing some text.
Read more ►