Robert írta:Minta kapható belőle? A programból/flash kezelésből....
A 25xxx sorozatú chipek kissé gyakoribbak....
Amennyit eddig megírtam, az a beírás/kiolvasás, ill. a teljes memória törlése.
Mezei SPIIN és SPIOUT parancsokkal megy.
A teljes memória törlésénél vigyázni kell, mert a memória kapacitásától függően akár több mp-ig tarthat. Erre azonban a status bit figyelése a megoldás.
Én a beírást úgy oldottam meg, hogy az adatokat egy tömbbe helyeztem, és a tömböt utána kiírtam. Előtte természetesen meg kell adni, hogy melyik címtől kezdjen írni. Van azonban egy hátránya (?) az írásnak: minimum 2 bájtot lehet írni, vagy egyszerre akár egy egész lapot (page write), de a lényeg, hogy egy bájtot nem lehet írni.
Mivel nekem egyszerre 8 bájtot kell tárolnom, így ezzel nincs probléma. Egy 8 elemből álló tömböt feltöltök adatokkal. Meghívom a Write_enable szubrutint, küldöm SPIOUT-tal a "write" parancsot (adatlap!!!!! - a kezdő regiszter értékét előtte meg kell adni, és el kell azt is küldeni), majd egyetlen SPIOT-tal az egész tömböt kiírom ( SPIOUT tömb(1), 8 ).
Amit nem igazán szeretek, hogy a kezdő szabad regiszter címét nekem kell kezelni. Azaz, valahol tárolni kell az íráshoz a kezdő szabad regiszter címét. Erre viszont ott a memóriában a "Parameter Page", egy különálló memóriabank. A W25X16-nál ehhez három byte-ra van szükség.
Néhány példa:
A teljes flash törlése:
Kód: Egész kijelölése
Sub Clear_mem
Write_en
Mem_p = &HC7 'parancs
Reset Chip
Spiout Mem_p , 1
Set Chip
Stbit 'status bit ellenőrzése
End Sub
Az előbbi szubrutinból ezeket hívom:
Kód: Egész kijelölése
Sub Write_en
Mem_p = &H06 'parancs
Reset Chip
Spiout Mem_p , 1
Set Chip
End Sub
Sub Stbit
Kezd:
Mem_p = &H05
Reset Chip
Spiout Mem_p , 1
Spiin Dummy , 1
Set Chip
St_bit = Dummy.0
Locate 1 , 20
Lcd St_bit
If St_bit = 0 Then Exit Sub
Goto Kezd
St_bit = 0
Locate 1 , 20 'ellenőrzésként kiíratom a bit
Lcd St_bit 'értékét a kijelzőre
End Sub
Utóbbi Sub kiolvassa a status bit-et mindaddig, amíg a RAM be nem fejezi az adott műveletet, mert addig foglalt. Ha az St_bit visszaáll 0-ra, akkor kilép a szubrutinból.
(A Chip tulajdonképpen a /CS-láb alias-a, ami egy 10k-s ellenállással van felhúzva. A ram /WP (írásvédelem), és /HOLD lábán ugyanígy van egy-egy felhúzó ellenállás.
Értelemszerűen a változók, tömbök, szubrutinok deklarálását előtte el kell végezni.
A parameter page-nél vigyázni kell arra - és ez érvényes a flash ram területére is, hogy ha egy regiszterbe már írtunk adatot, azt nem lehet felülírni, csak ha előzőleg töröltük. A parameter page törlésére is van külön parancs, és gyorsan lefut.
Ja, a kütyü 3,3V-os (sajnos), így az 5V-os procihoz a jól bevált ellenállásosztós illesztés tökéletesen megteszi.
Hirtelen ennyi. Érdemes alaposan átnézni az adatlapot, elég jól el lehet rajta igazodni!