In many microcontroller projects you run in to limited memory problems. Usually you get enough Flash for storing program code, but when talking about storing data – it runs out quickly. Think of data loggers or music players. Fastest and most accessible way of increasing memory is using SD (MMC, SDHC) cards. They are popular, cheap and can be connected to computer.
Roland Riegel has been working library that allows interfacing memory cards to AVR microcontrollers. So far it supports MMC, SD, SDHC cards with partition table and can read/write FAT16/32 formatted cards. It is easy to connect cards to AVR. If it’s powered using 3.3V then connect lines directly to SPI, when voltage is 5V then simple voltage dividers lowers signals to required 3.3V. Depending on how card is formatted you may need different flash size microcontrollers like in order to support FAT32 you will need at least Atmega328. Roland performed several benchmark tests on reading and writing so you could judge the efficiency of code.
Embedds highly recommends EasyEDA for circuit and PCB design