SD/SDHC Card Interfacing with ATmega8 /32 (FAT32 implementation)

Mar 19, 2013 by


Hi friends,
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.

Card Interfacing SD/SDHC Card Interfacing with ATmega8 /32 (FAT32 implementation)
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)

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.

Once raw data transfer achieved, I formatted the card with windowsXP (FAT32) and loaded it with some text files, directories and other files (all stored in root directory of the card). After that I wrote the FAT32 routines to read files, get file list (using HyperTerminal again), finding the total/free memory of card. All this data is sent to HyperTerminal by the uc.

 

For more detail: SD/SDHC Card Interfacing with ATmega8 /32 (FAT32 implementation)

Leave a Comment

You must be logged in to post a comment.

Recent Posts

Drumming Teaching and feedback device Using Atmega1284

Drumming Teaching and feedback device Using Atmega1284

For our ECE 4760 final project, we designed and built a drum trainer that can be attached to most Ja[...]
Thermistor Respiratory Monitor Using Atmega1284

Thermistor Respiratory Monitor Using Atmega1284

Our final project for ECE 4760 is a respiratory monitor that was designed for low-resource environme[...]
Glove Mouse Using Atmega1284

Glove Mouse Using Atmega1284

For our ECE 4760 final project, we designed and built a wireless computer pointing device with accel[...]
Hand-Motion Chess Using Atmega1284

Hand-Motion Chess Using Atmega1284

An Introduction "A glove embedded with accelerometers to play a hand motion-controlled chess ga[...]
Color to Sound Player Using Atmega1284

Color to Sound Player Using Atmega1284

Introduction We created a device that determines the RGB content of a surface and then speaks the c[...]

Read more:
LCD Display On Glass Interface Using AT2313
Close