MMC / SD Kartlar

SD Memory Card, Secure Digital Memory Card ifadesinin kısaltmasıdır ve Güvenli Sayısal Hafıza Kartı anlamına gelir. SD kartlar daha eski bir tür olan MMC (MultiMedia Card) kartların geliştirilmiş halidirler ve MMC kartlara göre daha fazla kapasite ve hıza sahiptirler (Resim 1). Günümüzde MMC kartlar pek satılmamaktadır, SD kartlara ve daha yüksek kapasiteli olan SDHC kartları hemen heryerde bulmak mümkündür.


Mikroişlemcilerin üzerindeki EEPROM alanına kısıtlı miktarda veriyi kalıcı olarak saklamak mümkündür ancak yüksek miktardaki veriyi kaydetmek istediğimiz projelerde SD kartlar yüksek kapasiteleri ve hızlarıyla mükemmel çözüm olurlar. Örneğin her saniye ölçülen sıcaklığı kaydetseniz, 34 yıllık veriyi 1GB kapasiteli bir karta kaydedebilirsiniz.

SD kartlarla SD Bus ve SPI protokolü kullanılarak iletişim kurulur, SD Bus protokolü oldukça karışıktır, SPI protokolü mikrokontrollerle iletişim için daha uygundur. Bu projede FAT sistemi kullanılmadan, doğrudan sektörlere veri yazılmakta ve okunmaktadır. SD kartlara veri kaydetmenin (log) en kestirme yolu budur. Eğer MP3 çalar gibi bir devre yapacaksanız Petit FATFS gibi kütüphaneleri kullanmanız gerekir.

SD kartın beslemesi (data bacakları dahil) 3 Voltu geçmemelidir.

SD kart için soket bulmak kolay değil ama pratik bir çözümü var: Bilgisayar malzemeleri satan dükkanlardan eski floppy disklerinin bağlantısı için kullanılan soketler bu iş için çok uygun (Resim 2, 3). Burada dikkat etmeniz gereken konu SD kartı soketin içine tamamen itmemektir, SD kartın bir parça yukarıda olduğuna ve bakır plaketlerin soketin bakır klipslerine temas ettiğine emin olun.

Devrede Atmega8 işlemci ve SD kart ayrı ayrı beslenmektedir, SD kart için 3.3V regülatör entegresi kullanabilirsiniz. SD kartın data bacaklarını da şemada görüldüğü gibi gerilim bölücü ile mikroişlemciye bağlamalısınız (Resim 4).

int main(void)
{
unsigned long sector = 0; //sektör numarası
unsigned char sectorbuffer[512];

mmc_init(); //SD kartı başlat

sectorbuffer[0] = (int)'B';
sectorbuffer[1] = (int)'E';
sectorbuffer[2] = (int)'R';
sectorbuffer[3] = (int)'I';
sectorbuffer[4] = (int)'K';
sectorbuffer[5] = (int)'.';
sectorbuffer[6] = (int)'N';
sectorbuffer[7] = (int)'E';
sectorbuffer[8] = (int)'T';

mmc_writesector(sector, sectorbuffer); //sektöre yaz

mmc_readsector(sector, sectorbuffer); //sektörü oku

dump(sectorbuffer, 512); //içeriği göster
}

Demoyu çalıştırmak için işlemcinin TX ve RX bacaklarını bir seviye çevirici devre kullanarak bilgisayarınızın seri portuna bağlamanız gerekir. Bir terminal programı kullanarak, (açık kaynak RealTerm programını öneririm) işlemciden gelen bilgileri görüntülüyebilirsiniz. Bağlantı hızı 9600 olmalıdır. Demo programında, SD kart başlatılmakta, sıfırıncı sektör içeriği okunmakta, okunan bilgiler RS232 üzerinden ekrana aktarılmakta, daha sonra buffer değişkenin ilk 9 karakteri "BERIK.NET" olarak değiştirilerek aynı sektöre geri yazılmaktadır. Programı ikinci kez çalıştırdığınızda, SD kartın sıfırıncı sektörünün değiştiğini görmelisiniz. Program başlatıldığında izlenenen adımlar (başlatma, okuma yazma) ekrana yazılmakta ve yanlarında "OK" ifadesi görülmektedir, "FAILED" ifadesinin yazılı olduğu süreçlerde hata var demektir. Program 16MB kapasiteli MMC kart ve 1GB kapasiteli SD kart ile denenmiştir. SDHC kartlarla büyük ihtimalle çalışmayacaktır. Programın büyüklüğünün 4K'ya ulaşması bolca printf() fonksiyonu kullanılmasından kaynaklanmaktadır.

Sektörlere doğrudan veri yazacağınız için boş bir SD kart kullanınız, karttaki verilerinizi kaybedebilirsiniz.

Proje Dosyaları

Proje Dosyaları