AT45DBxxx

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Hooligan01

AT45DBxxx

Hozzászólás Szerző: Hooligan01 »

Hello!

Foglalkozott már valaki AT45DBxxx soros flash kezeléssel ?

Kicsit elakadtam vele, pedig mindent az adatlap szerint követek el...
AT45DB041D
Egyszerű címről olvasással van gondom. Continuous Array Read (Low Frequency Mode: 03H) üzemben rendesen olvas, de csak a 0-ás cimtől.
Hiába címzek másik lapot, azon belül byte-ot, mindig 0-tól olvas... :(

Ha jól értelmeztem az adatlapot, akkor a címzés metódusa a következő:
Alapértelmezett 264 byte lapméret
Az opcode(03H) után 3 byte amivel a lapot, és azon belül a kezdő byte-ot címzem. Az első 11 bit a lap címe, a köv. 9 bit pedig a lapon belü a byte kezdőcím.

Kód: Egész kijelölése

SPDR = &H03     'opcode

SPDR = &H00    'lap címe msb (a felső 4bit fenntartott)
SPDR = &H02    'lap címe lsb + a 0. bit a byte cím 8. bitje (3. lap)
SPDR = &H00    'byte címe (0. byte)
Valakinek ötlet esetleg?
Avatar
meszarosk
Újonc
Újonc
Hozzászólások: 3
Csatlakozott: 2008. július 31. csütörtök, 6:00

Érdeklődés

Hozzászólás Szerző: meszarosk »

Sziasztok !

AT45DB161D-t használnék. Nem tud valaki egy olyan helyet, ahol komplett BASCOM függvényeket találok a kezelésére ?

Segíytségeteket előre is köszönöm.[/b]
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Avatar
meszarosk
Újonc
Újonc
Hozzászólások: 3
Csatlakozott: 2008. július 31. csütörtök, 6:00

Hozzászólás Szerző: meszarosk »

Köszönöma segítségedet, bár BASCOM lenne az igazi, de ezen már el lehet indulni.
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

Hozzászólás Szerző: dummy »

Ha nem ragaszkodsz az Atmel memóriákhoz, nyugodtan próbáld ki a Winbond W25X.. sorozatot! A Chipcad forgalmazza, olcsó, SPI buszos, és könnyen kezelhető. Sokkal könnyebben, mint az AT45DB..-k.

A W25X16-ot nyúzom (azaz, mostanában nem, mert "házfelújítok"), de eddig mindent összehoztam vele, amit akartam. 290Ft a mostani ára SO8 tokozású. Van nagyobb, van kisebb tárolókapacitású is.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Minta kapható belőle? A programból/flash kezelésből....
A 25xxx sorozatú chipek kissé gyakoribbak....
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

Hozzászólás Szerző: dummy »

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!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Nagyon szépen köszönöm!
Többünknek szerintem nagy segítséget adtál....
Válasz küldése