SD kártya modul

Tartalom:

  • Az SD kártya modul felépítése és felhasználási lehetőségei
  • Összekötése az Arduino-val
  • Használat letölthető programkönyvtár függvényeinek segítségével
  • File létrehozása és bővítése adatokkal (datalogger) példaprogram használat megismeréséhez
  • Kapcsolódó cikk (többek között: SD kártya kicserélése működés közben)

———————————————————————————

Az SD kártyák SPI buszon kommunikálnak. Ha az SPI kommunikációról többet szeretnél megtudni, kattints ide! Azonban az SD kártyák használatához nem szükséges megismerni a részleteket, nyugodtan haladj tovább, ha csak használni akarod, és nem megérteni. Az SD kártyák csatlakoztatása külön megvásárolt modul nélkül is igen egyszerű, mindössze pár ellenállásra van szükség, amikkel az Arduino 5 V-os rendszerű SPI buszának vonalait a memóriakártyák által elfogadható 3,3 V-os szintűvé alakítjuk. Tulajdonképpen az általam vásárolt modul sem tesz ennél többet.

Az SD kártya az egyik legtökéletesebb eszköz adatok tárolására. Azonban vannak jelentős hátrányai is, mivel a készen elérhető Arduino könyvtárak FAT32 file rendszert valósítanak meg, azaz csak file-okat tudunk létrehozni. Legalább is én csak ilyen szoftver eszközöket találtam. Az SD kártya konkrét kommunikációjának megértésére még nem volt szükségem, így maradtam ezen eszközök felhasználásánál, ami viszont azt jelenti, hogy fájlokat kell kezelni. Ezekkel semmi baj nincs, míg csak írunk. Ha azonban ezekből az állományokból adatokat akarunk visszanyerni a mikrokontrollerben írt programunk számára, az igen nehézkesen fog működni, hiszen elég szerény szoftveres lehetőség áll rendelkezésre. Nem is találtam más függvényt, csak olyat, amivel végig olvashattam az állomány tartalmát addig amíg rá nem találtam arra, amire szükségem volt. Azonban ez nem feltétlenül hátrány. Adatgyűjtés esetén elegendő ha csak írjuk az állományt és soha nem olvasunk belőle. Időnként aztán kivesszük az SD kártyát a foglalatból, bedugjuk a számítógépünkön egy kártyaolvasóra, letöltjük az állományt és feldolgozzuk. Ez is működhet jól. Ráadásul igen sok adat fér a kártyára. A boltban már csak 8Gb-os kártyát kaptam, ha jól emlékszem 2000Ft-ért.
Mint említettem a kártyaolvasó is modul az ISP buszt használja. Nem is lepődünk meg azon, hogy ugyanazokra az Arduino kivezetésekre, illetve chip lábara kell az SD modult bekötni, mint amikor az Arduino Uno R3-at programozónak használjuk.
Így néz ki egy SD modul:

Talán egy kicsit áttekinthetőbb az alábbi kép, ami már csak a kivezetések felsorolását tartalmazza:

Miután bekötöttük, jöhet a program megírása. A kipróbáláshoz egy egyszerű programot töltöttem le. Kicsit megpróbáltam a kommenteket magyarosítani. A program a legtöbb file kezeléssel kapcsolatos parancsot bemutatja. Mielőtt a kártyát használatba vennénk egy kártya olvasóval formázzuk meg FAT32 file rendszerbe.
A keletkező file neve 8.3 formátumú lehet, amit az öregebb tanulók a DOS oprendszerből ismerhetnek. Ékezeteket elfelejteni. A file létrehozási dátuma egységesen 2000.01.01 0:00 időpontot kapott. Nyilván ez egy erősen lekorlátozott file rendszer.

Példa program:

// SD kártya lábait a következő Arduino csatlakozókhoz kell kötni:
//  MOSI - pin 11; ** MISO - pin 12; ** CLK - pin 13; CS - pin 10
#include <SD.h> // ezt az alap programcsomag tartalmazza
File myFile; //File típusú objektum definiálása

void setup()
{
  Serial.begin(9600);
  Serial.print("SD kartya inicializalas...");

  if (!SD.begin(10)) {
    Serial.println("sikertelen inicializalas!");
    return;
  }
  Serial.println("sikeres inicializalas.");

  // nézzük meg, létezik-e az example.txt fájl:
  if (SD.exists("example.txt")) {
    Serial.println("example.txt letezik.");
    } else {
    Serial.println("example.txt nem letezik.");
  }
  myFile = SD.open("example.txt", FILE_WRITE);      // megnyitás vagy létrehozás, egyszerre csak egy fájlt tudunk kezelni
  if (myFile) {                                     // ha megnyílt a fájl, írjunk bele:
    Serial.print("Írás az example.txt-be…");
    myFile.println("próba 1, 2, 3.");
    myFile.close();                                 // fájl bezárása / mentése:
    Serial.println("kesz.");
  }
 else {
    Serial.println("nem tudom megnyitni az example.txt-t!");    // ha nem nyílt meg:
  }
  myFile = SD.open("example.txt");                  // nyissuk meg újra, most olvasásra
  if (myFile) {
    Serial.println("example.txt:");
    while (myFile.available()) {                    // olvassunk belőle, amíg tart a fájl:
     Serial.write(myFile.read());
    }
    myFile.close();                                 // fájl lezárása:
    } else {
    Serial.println("nem tudom megnyitni az example.txt-t!");      // ha nem nyílik meg:
  }

  Serial.println("example.txt torlése…");           // töröljük le az example.txt-t:

  SD.remove("example.txt");
  if (SD.exists("example.txt")){
    Serial.println("torlés sikertelen.");
  } else {
    Serial.println("torlés sikeres.");
  }
}

void loop()
{
    // itt most nincs semmi
}



A neten található példa programokban az SD kártya tápfeszültségét mindig az Arduino egyik kimenetére kötik. Az SD kártya nem fogyaszt sokat, így a kimenet 40mA-es áram teljesítménye bőven sok az SD kártya tápellátásához. Ennek a megoldásnak az előnye az lenne, hogy csak akkor adunk tápfeszültséget a kártyának, amikor éppen szükség van a használatára. Nekem azonban ez nem működött. A kártyát a at SD.begin() még megnyitotta, de tényelegesen adatokat nem tudtam írni rá, és olvasni sem lehetett. Sajnos az okot máig nem tudom, direktben rákötöttem az a modult a tápfeszültségre, és így működik.

Készítettem egy hőmérséklet adatgyűjtő programot. Érdemes megnézni, hogyan működik. Kattints ide, ha érdekel! Azért is érdemes ezt is elolvasni, mert tapasztalatokat szereztem arról, hogyan lehet működés közben kivenni az SD kártyát a foglalatból.

Mennyire volt hasznos amit olvastál? Értékelés után szövegesen is leírhatod megjegyzéseidet és véleményedet!

Kattints egy csillagra az értékeléshez!

Szövegesen is leírhatod véleményedet! Ha kérdésed van, ne felejtsd el megadni az email címedet!