90′ lı yıllarda dijital kamera gibi yüksek kapasite bellek gereksinimi olan mobil cihazların yaygınlaşması, fiziksel olarak küçük ancak bellek kapasitesi yüksek tak-çalıştır bellek modüllerinin geliştirilmesine öncülük etti. SanDisk, Matsushita ve Toshiba; 1999′ da Sony’ nin Memory Stick kartları ile rekabet edebilmek için MMC kartların daha gelişmiş modeli olan Secure Digital (SD) Bellek Kartını geliştirmek ve pazarlamak için el sıkıştı. 2000 yılının ilk çeyreğinde 16 MB’ dan küçük ilk SD kartlar piyasaya sürüldü.

SD kart
2003 yılında Sandisk; SD kartların daha küçük modeli olan mikro SD kartları tanıttı. 2006 yılında 32GB, 2009 yılında 2TB bellek büyüklüğüne taşıyacak standartlar tanıtıldı.

mikro SD kart
2020 yılına gelindiğinde ise SD kartlar 512GB gibi yüksek bellek kapasitelerine ulaştı. Bu alanda oluşan geniş pazar ile günümüzde SD kart üreten firma sayısı 1000′ i geçmiş durumdadır.
SD kartların bellek kapasitesine göre sınıflandırılması için 4 farklı standart bulunmaktadır;
- SD Standard-Capacity (SDSC): Standart kapasite SD kart. 128MB ile 2GB arasında bellek kapasitesine sahiptir.
- SD High-Capacity (SDHC): Yüksek kapasite SD kart. 2GB ile 32GB arasında bellek kapasitesine sahiptir.
- SD eXtended-Capacity (SDXC): Genişletilmiş kapasite SD kart. 32GB ile 2TB arasında bellek kapasitesine sahiptir.
- SD Ultra-Capacity (SDUC): Ultra kapasite SD kart. 2TB ile 128TB arasında bellek kapasitesine sahiptir.
SD kartların veri transferi için farklı iletişim modları tanımlanmıştır. SPI ve tek-bit SD veri yolu modları tüm SD kart türleri için kullanılır. Arduino SPI kart kütüphanesi kullanılarak, SD kart ile SPI modunda haberleşmek mümkündür.
Malzemeler
- 1 adet Arduino
- 1 adet SD veya MicroSD kart okuyucu modül
Bağlantı şeması
SD kartlar 2V ile 3,6V arasında gerilim ile çalışırlar. Burada kullanılan SD kart okuyucu üzerinde voltaj regülatörü bulunduğu için +5V ile beslenmesinde sakınca yoktur. Ancak regülatörsüz bir SD kart okuyucu kullanılacaksa Arduino’ nun 3,3V çıkışından beslenmelidir, aksi takdirde SD kart zarar görebilir.
Kaynak kod
SD kart kullanmak için gerekli olan kütüphaneyi aşağıdaki linke tıklayarak indirebilirsiniz. Sıkıştırılmış dosyayı Belgelerim>Arduino>Libraries klasörüne açarak ekleyebilirsiniz.
#include <SD.h>. // SD kartı kullanmak için gerekli kütüphaneyi çağır #include <SPI.h> int CS_PIN = 10; // SD kart modülünün CS pin numarasını değişkene ata File Dosya; // Dosya adında bir dosya nesnesi oluştur. void setup() { Serial.begin(9600); // Seri port haberleşmesini başlat HazirlaSD(); // SD kartı hazırlayan fonksiyonu çağır DosyaOlustur("test.txt"); // test.txt adında yeni bir dosya oluştur DosyayaYaz("Bu bir deneme yazısıdır!"); //Dosyaya bir satır ekle DosyayiKapat(); // Dosyayı kapat // SD karttaki bir dosyadan veri okuma DosyaAc("text.txt"); // text.txt adlı dosyayı aç Serial.println(DosyaOku()); // Dosya içeriğini seri port ekranına yaz DosyayiKapat(); // Dosyayı kapat } void loop() { //Döngü ekranında işlem yok } void HazirlaSD() { Serial.println("SD kart başlatılıyor..."); pinMode(CS_PIN, OUTPUT); if (SD.begin()) { Serial.println("SD kart hazır."); } else { Serial.println("SD kart hazır değil."); return; } } // Yeni dosya oluşturma fonksiyonu int DosyaOlustur(char filename[]) { Dosya = SD.open(filename, FILE_WRITE); if (Dosya) { Serial.println("Dosya başarıyla oluşturuldu."); return 1; } else { Serial.println("Dosya oluştulurken hata meydana geldi."); return 0; } } int DosyayaYaz(char text[]) { if (Dosya) { Dosya.println(text); Serial.println("Dosyaya yazılıyor. "); Serial.println(text); return 1; } else { Serial.println("Dosyaya yazılmamadı."); return 0; } } void DosyayiKapat() { if (Dosya) { Dosya.close(); Serial.println("Dosya kapatıldı."); } } int DosyaAc(char filename[]) { Dosya = SD.open(filename); if (Dosya) { Serial.println("Dosya başarıyla açıldı."); return 1; } else { Serial.println("Dosya açılamadı."); return 0; } } String DosyaOku() { String Okunan = ""; char ch; while (Dosya.available()) { ch = Dosya.read(); if (ch == '\n') { return String(Okunan); } else { Okunan += ch; } } return ""; }
SD kartın hazır olup olmadığını kontrol etmek için HazirlaSD()
fonksiyonu kullanılmıştır. SD kart algılanmadıysa, dosya sisteminde sorun varsa veya kart arızalı ise bu fonksiyon hata döndürecektir. SD kart hazırsa ve karta yeni bir dosya açılarak içine bilgi eklenmek isteniyorsa aşağıdaki örnek kod satırlar programın istenen yerinde kullanılabilir:
DosyaOlustur("test.txt"); DosyayaYaz("Bu bir deneme yazısıdır!"); DosyayiKapat();
SD karta daha önceden eklenmiş bir dosyaya yeni satırlar eklenmek isteniyorsa aşağıdaki kod satırları kullanılabilir:
DosyaAc("text.txt"); DosyayaYaz("Bu bir deneme yazısıdır!"); DosyayiKapat();
SD kartta kayıtlı bir dosyayı okumak için aşağıdaki kod satırları kullanılabilir:
DosyaAc("text.txt"); Serial.println(DosyaOku()); DosyayiKapat();
SD kartta aynı anda iki dosya ile çalışılamaz. İki dosya üzerinde çalışmak isteniyorsa önce ilk dosya DosyaAc()
fonksiyonu ile açılır, okuma/yazma işlemleri bittikten sonra DosyayiKapat()
fonksiyonu ile kapatılır. İlk dosya kapandıktan sonra ikinci dosya açılarak üzerinde işlem yapılabilir. Birinci dosya kapatılmadan ikinci dosyayı açmanın dosyaların birinde veya ikisinde veri kaybına neden olacağı unutulmamalıdır.