[elektro] DataFlash logger

hg12345 hg12345 at freemail.hu
Sat Mar 27 12:12:58 CET 2010


Hi!

Kiváncsivá tettél.... 

Ez EEPROM vagy FLASH mert mindkettőről írsz!

A FLASH eszközöknél törölni nagyobb blokkokban kell (ERASE BLOCK 4K), írni meg tudsz kisebben is (WRITE PAGE 264byte). A header fejlécében a sztatisztikai adatok alatt mit értesz... TIMESTAMP? A validítás figyelésére nem lenne egyszerűbb egy CRC16 ellenőrző összeggel bővíteni nem csak a statisztikai adatokat, hanem a a tárolt LOG értékeket. Ennek a képzése akár kiírás közben megtörténhet, teljesítményt nem igényel, az olvashatóságot nem rontja.
Felhasználáskor a keresésben nem is kéne használni csak akkor amikor visszaolvasod ennek érvényesítésére.

Az írási laphatár átlépését a LOG-gal hogyan kezeled, több LOG-t nyitva tartasz, hogy takarékoskodjál az endurance-val, vagy egyből kiíród, mert amig FF-van a tároló területen addig írható. (ez persze csökkenti az adott PAGE endurance-t, annak arányában mekkora a LOG és PAGE méret aránya, ellenben kisebb lesz az elveszett adat mérete)

Ha ERASE BLOCK parancs közben fogy el az energia, akkor mi történik, mert elképzelhető, hogy a törlés nem teljesen sikeres. Ha marad valami szemét a BLOCK területen és már erre a blokkra írtál amikor kiderül, van valami eljárás, hogy egy adott LOG méretet inaktivvá tegyen a program. 

Még egy kérdés a LOG méret fix, vagy esetleg a fejléc erre is tartalmaz információt. 

Visszaolvasáskor hogyan biztosítod a LOG tartalom validítását?

Egy utolsó kérdés... a kapcstápok azon tulajdonságát tudja kezelni, hogy a kikapcsoláskor amikor a fogyasztókat lekapcsolják, a bufferben tárolt energiából még üzemi feszültséget tud előállítani, újra indítja akár többször is a rendszert.  

Az utolsó utáni kérdés, egy MicroSD kártya lassan olcsóbb mint egy DF :-), mérete szerintem nem okoz problémát, foglalat is fillérekért kapható. Kezelése is hasonló SPI busz és alternatívái. A program kezelése elképzelhető úgy, hogy egyből valamilyen számítógép ehető file formátumban történjen? A LOG feldolgozás nagyobb valószínűséggel valamilyen nem mikró gépen történik, esetleg Windows vagy LINUX gépeken, így egy beolvasás és átküldsét meglehet spórolni.


Bocs a sok kérdésért ezek a témák nagyon izgatnak...

  
  
On Wed, 3 Mar 2010, vfx wrote:

> Így nem kell a head és tail pointereket tárolni, elég induláskor
> végigsöpörni az extended területen és megkeresni azels? FF-byte-ot.

Kidolgoztam egy stabilnak tuno eljarast, most tesztelgetem "elesben" (uC 
+ Flash).
A PC-s szimulacio eleg jo eredmenyt adott.
A szamitasok szerint megoldhato egy 16/32/x Mbit-es DF-be mindenfele 
tapfigyeles, backup elem + RAM/FRAM nelkul egy olyan LOG-olas, ahol:

  - tap megszunesekor nem lesz hibas adat
  - maximum az utolso 1..2 masodperc adatait vesziti el (bgsync 1 vagy 2 masodpercenkent irja ki a cache-t)
  - legrosszabb esetben 26 ev alatt farad ki az egesz
  - a fenti parameterek fuggetlenek a log-rekord meretetol (2..516 byte)

A lenyeg:

  - blokkos iras (jelenleg 264/528, de elvileg barmilyen blokkmeret johet)
  - 12 byte header, ebbol 6 byte adat, 6 byte ennek inverze (check)

A fejlecben statisztikai adatok vannak arra vonatkozolag, hol tart az 
iras/olvasas.

Indulaskor az osszes (4096/8192/...) blokk feljecet kell csak beolvasni 
(illetve tobbnyire csak az elso par byte-jat), ami 100 ms-en belul 
megtortenik. Ezzel eloallt az osszes pointer RAM-ban.

Az iras korbe-korbe megy, az olvasas koveti a korforgast, amig utol nem 
eri. Tulcsordulaskor a regebbi adatok tunnek el.

A header check arra epit, hogy az EEPROM irasakor eloszor torles van 
(a bitek megindulnak 1-fele), utana pedig iras (egyes bitek 0-at vesznek 
fel).

Tehat olyan eset (elvileg) nem allhat elo, hogy mondjuk torles/iras kozben 
elmegy a tap, es az egy blokkban egyszerre irt bitek nem azonos iranyba 
serulnek be. Azaz ket egymas melletti bit kozul ez egyik 0 helyett 1, a 
masik 1 helyett 0 erteket vesz fel.



 								-Sygma

-----------------------------------------
          elektro[-flame|-etc]



More information about the Elektro mailing list