Memória típusok

Mielőtt külső memória használatába kezdünk, érdemes kicsit feleleveníteni a memóriákkal kapcsolatos tudásunkat. Lássuk sorban a jellegzetes memóriák működését és tulajdonságaikat. A DRAM memóriával nem foglalkozok, mert az Arduino környezetben nem feltétlenül praktikus, inkább a számítógépek világában elterjedt típus.

SRAM: (pl. PCF8570). A memóriában az egyes bitek tárolását minimum 6 tranzisztorral megvalósított logikai (flip-flop) áramkör tárolja. A memória élettartama gyakorlatilag végtelen, azonban tápfeszültség kikapcsoláskor elveszti a tartalmát. Az adatlap akkumulátoros táplálást javasol a következő áramköri megoldással:

Az SRAM sebességével sem lehet kifogás. Az áramkörök átbillenéséhez néhány nanosec szükséges, így ez a ram típus nagy sebességű felhasználásokra is alkalmas. Pl. az ATmega chip-be épített ram is ilyen elven működik. Ebben a ram-ban tárolja a program változókat futás közben. Mivel egyetlen bit tárolásához elég sok tranzisztor kell, nagy a chip-ben elfoglalt alapterület, így ez a ram nem gyártható gazdaságosan nagy kapacitásban. Persze felmerül a kérdés, hogy mi a „nagy” kapacitás. A mai világban azt hiszem a gigabyte már nagynak számít!

EEPROM: (pl. 24LC04B): Egyetlen bit tárolásához két tranzisztor szükséges. A tároló cella egy CMOS tranzisztor, aminek a vezérlő gate elektródája felett egy szigetelő rétegben kialakított térrészbe kerül programozáskor elektron többlet. Ha van elektron a térrészben az 1, ha nincs az 0. Törléskor az elektronokat fordított feszültséggel eltávolítják ebből a szigetelőanyaggal körülvett „eltemetett” rétegből. Sajnos a töltések beinnyektálása és kiszivattyúzása közben egyre több elektron esik csapdába a szigetelő anyagban is, és ezek egy idő után olyan mértékben halmozódnak fel, hogy már nem lehet a 0 és 1 állapotot megkülönböztetni. Ekkor az EEPROM cella már nem használható tovább. Ez általában 100 ezer és 1 millió írás környékén következik be attól függően, milyen vékony a szigetelő anyag. Nyilván a vékonyabb szigetelő rétegű EEPROM jobb minőségű és többször írható. Mondanom sem kell, hogy az EEPROM tápfeszültség kikapcsolásakor is megtartja a tárolt információt, hiszen az eltemetett rétegben tárolt elektronok maguktól nem tudnak kijönni, Illetve idővel mégis megszöknek, de ez kb. 10 év után eredményezi a tárolt információ megváltozását. Tehát egy EEPROM-ban nem célszerű fiatalkori fényképeinket archiválni, mert unokáink már nem tudják majd kiolvasni és megnézni, milyen szépek is voltunk valaha. AZ USB pendrive-ok is EEPROM cellákban tárolnak, így javasolt néhány évente újra írni bennük a tárolt információt. Nagy előnye az EEPROM típusú ramnak, hogy 3,3V-os és 5V-os rendszerekhez is közvetlenül illeszthető. Az ATmega chipekben is találunk EEPROM memóriát. Ez gyengébb minőségű, kb. 100ezer újraírást visel el. Meg kell még említeni a sebességét is. Sajnos az EEPROM nem egy gyors memória néhány milisec egy cella megírása. Nyilván egy byte-ot párhuzamosan írnak, de már néhány kbyte adat tárolása is tetemes időt vesz igénybe. Minél több cellát írunk egyszerre, annál gyorsabb lesz a EEPROM működése, így érdemes kompromisszumot kialakítani. Egy ilyen kompromisszum eredménye a flash memória.  

FLASH MEMÓRIA: Ez tulajdonképpen az EEPROM speciális változata. A tároló cellákat blokkokba szervezik, és egy-egy blokkot egyszerre lehet írni és törlni. Ettől az írás sebessége nagyon nagy lehet. Azonban a blokkban található tároló elemek esetlegesen akkor is törlésre és írásra kerülnek, ha az adott cellát éppen nem akarjuk írni. Így aztán a flash memóriát inkább nagyobb állományok tárolására célszerű használni. Nem is véletlen, hogy pl. az USB pendrive-ok és SD kártyák flash memóriát tartalmaznak.

SD kártya: Ez valójában egy flash memória, így nem meglepő, hogy átlagosan 100.000 újraírást garantálnak a gyártók. Nem is kell több, hiszen fényképezőgépekkel, mp3 lejátszókkal ennek töredékét sem tudjuk elhasználni. Óriási tároló kapacitásúak, ezért adatgyűjtésre, adatrögzítésre ideálisak. Arduino amatőrök számára nagy hátrány (vagy épp előny), hogy a rendelkezésre álló SD kártya kezelő program könyvtárak fileok kezelésére lettek kialakítva. Egy SD kártyára nem lehet csak egyszerűen adatokat írni, állományokat (pl. txt vagy csv) kell létrehozni, és azok tartalmába lehet adatokat beleírni. Visszaolvasáskor meg kell nyitni az állományt és meg kell keresni az adatot. Sok esetben ez a cél, de a program meglehetősen bonyolult tud lenni. Ráadásul az SD kártya kezelő függvények rengeteg program memóriát esznek meg (kb. 10Kbyte), tehát egy-egy mérési adat vagy program paraméter tárolására ez nem igazán jó. Ha sok-sok mérési eredményt akarunk valahol rögzíteni, akkor megtaláltuk az igazi eszközt.

F-RAM: (pl. FM24C04A). Az írások száma (100.000.000.000.000)  10 a tizennegyediken. Működési elve szerint a tároló elem egy feroelektromos hatással megspékelt kondenzátor (nem mágneses elvű, mágneses térre nem érzékeny!!). Ennek a kondenzátornak a fegyverzetei között egy ólom-cirkonát-titanát réteget alakítanak ki (nyugi, én is olvastam, nem magamtól tudok ilyen okos dolgokat). Ebben a rétegben a molekulák képesek az elektromos tér irányába befordulni, tehát az anyag emlékezik. Amikor feszültséget kapcsolunk egy emlékező kondenzátorra, és a molekulák „befordult” állapotban vannak (1-et tárol a tároló elem), a molekulák visszafordulásához plusz energia kell. Ilyenkor a kondenzátorba befolyó áram egy extra áram impulzust tartalmaz. Ha a molekula éppen fordítva állt (0-át tárol), akkor nincs áram impulzus. Természetesen a kiolvasással azonnal el is veszítettük a tárolt információt, tehát minden egyes kiolvasás után vissza kell írni a z információt a kondenzátorba, ami egy megfelelő feszültség rákapcsolásával történik meg. Ha 0 volt a kondenzátorban tárolt érték, akkor természetesen nem kell csinálni semmit, csak akkor kell vissza írni, ha a 1 volt a tartalom. Ennek a RAM típusnak hátránya lehet, hogy 4V és 5,5V közötti feszültség tartományban működik, így 3,3V-os rendszerekben nem lehet használni, vagy szintillesztőre lesz szükség, és külön 5V-os tápegységre. Olvastam valahol, hogy már kifejlesztették a 3V-on is működő FRAM típust, de még nem találkoztam vele. Az FRAM nagyon gyors. Közel az SRAM sebességével képes működni, így nagyon ígéretes típus, de még nehézségekbe ütközik a nagy méret gyártása. Ennek oka, hogy a kondenzátornak a térfogatát nem lehet tetszőlegesen kicsire készíteni, mert ha csökkentjük a befordulásra képes molekulák számát, csökken az áramimpulzus nagysága is, amit viszont érzékelni kell.
Érdekes történelmi analógia, hogy a távoli múltban a számítógépek hőskorában egy hasonló elven működő memória típussal kezdődött a ram-ok története. Ferritgyűrűs memóriának hívták. 1-2mm átmérőjű ferrit gyűrűkön vezettek át vezetékeket, és áram impulzusokkal felmágnesezték az a gyűrűt. Kiolvasáskor érzékelték, hogy mágneses volt, vagy sem. 1Kbyte memória kapacitás egy utazó bőrönd méret. Minden bizonnyal azért lett a Pentagon a világ legnagyobb épülete, mert kellett az atomrakéták irányításához 10Mbyte memória!
F-RAM-ot már használtam. Készítettem is hozzá egy univerzális függvényt, amit különféle tároló cella típusok létrehozására lehet használni. Lehetséges “beledobálni” az F-RAM-ba értékeket, és kiolvasáskor a függvény visszaadja az értékek maximumát, minimumát átlagát. Talán másoknak is felmerülnek hasonló feladatai mint nekem.