SD kártya kezelés

Bármilyen projekt adatgyűjtéséhez elengedhetetlen egy cserélhető adattároló, itt hasznosíthatjuk az Arduinohoz csatlakoztatható SD micro kártya fogadó panelokat.
Az SD kártyák szigorúan 3.3V-os eszközök, kártya íráskor akár 100mA áramfelvétellel, éppen ezért egy stabil jó teherbírású tápot igényel.
Az adat átvitel is úgyan így 3.3V-os logikai szinteken történik, a hosszú vezetékek ill. elválasztó ellenállások csökkentik az átmenet sebességét, ezért ajánlott szint váltók használata mint a HEF4050, 74LVX245 vagy 74AHC125 ic.
Az SD kártyák kétféle kódolással dolgozhatnak az egyik az SPI a másik a SDIO, mivel az SDIO titkosított kódolás ezért a legtöbbször az SPI-t használják SD kártyák esetében. Az SPI csak négy átviteli lábat használ és aránylag egyszerű a kezelése, bővebben majd később.


Az SD kártyák általában nyers kártyák, fájlrendszer nélkül, használat előtt ezért el kell
látni FAT16 vagy FAT32 fájlrendszerrel, ezt szinte a legtöbb eszköz jól kezeli.
A legegyszerűbb letölteni a hivatalos SD szövetség honlapjáról az sd kártya formázó programot:  https://www.sdcard.org/downloads/formatter_3/
Segítségével  megfelelő  felületet kapunk a további fájl használathoz.

Kapcsolás:

Mivel a kártya nagy jelátvitelt igényel ezért érdemes mindig a mikrovezérlő SPI csapjait
használni a működtetésére. Ezek minden típuson más kivezetések:
SD modul    Arduino Uno    Mega

  CLK                 13              52

DO(MISO)          12              50

DI(MOSI)            11              51

CS(SS)               10             53

   5V                   5V             5V

  GND               GND           GND

   CD                   –                 –

CD kimenet azt érzékeli, hogy be van e helyezve a kártya, mi ebben a projektben nem használjuk.


Az SD könyvtárat tartalmazza az Arduio IDE, de ha szeretnéd a legújabb verzióját letölteni
akkor ezt a https://github.com/adafruit/SD oldalról megteheted.

Csomagold ki, nevezd át SD -re majd másold be az Arduino/libraries könyvtárába.
Válaszd ki a fájl/Minták/SD/CardInfo sketchet, töltsd fel.
Ez a progi nem ír semmit az sd kártyára csak információt szolgáltat róla főleg arról hogy
támogatja-e azt.


A következő sketchel adatokat fogunk írni egy fájlba:
#include <SD.h>
File myFile;
void setup()
{
Serial.begin(9600);
Serial.print("Initializing SD card...");
// CS pin 10 kimenet
pinMode(10, OUTPUT);

if (!SD.begin(10)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");

// fájl megnyitása
myFile = SD.open("test.txt", FILE_WRITE);

// ha a fájl megnyílt akkor a következő adatott írjuk bele
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.println("testing 1, 2, 3.");
// bezárjuk a fájlt
myFile.close();
Serial.println("done.");
} else {
// ha nem tudjuk megnyitni a fájlt akkor hibaüzenetet küldünk
Serial.println("error opening test.txt");
}
}

void loop()
{
// nothing happens after setup
}

Minden egyes futáskor kiírja az adatokat a soros monitorra. Ha utána megnyitjuk a fájlt
akkor azt láthatjuk, hogy minden egyes futáskor hozzá fűzi az új adatokat és nem a régieket
írja felül.


Néhány fontos megjegyzés:


Olvasás fájlból:

#include <SD.h>
File myFile;
void setup()
{
Serial.begin(9600);
Serial.print("Initializing SD card...");
//az SS pin beállítása nélkül nem olvasható a kártya könyvtára
pinMode(10, OUTPUT);

if (!SD.begin(10)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");

// fájl megnyítása olvasásra
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("test.txt:");

//a fájl olvasása amíg nem változik a tartalma
while (myFile.available()) {
Serial.write(myFile.read());
}
// fájl bezárása
myFile.close();
} else {
//ha a fájlt nem lehet megnyítni kiír egy hibaüzenetet
Serial.println("error opening test.txt");
}
}

void loop()
{
// nincs folyamatosan végrehajtandó utasítás
}

Néhány megjegyzés:

Egyszerre több fájlt képes megnyitni és olvasni.
Read() csak byte-ot olvas, nem teljes sort vagy számot.
Be kell zárni a fájlt ha kész az olvasás, hogy csökkentsük a RAM használatot.

Enthernet shild sd foglalattal
Ezek itt csak a kezdetek, az SD kártya kezelésben sokkal több lehetőség rejlik, de erre majd egy következő cikkben térünk ki. Jó munkát!