[elektro] DataFlash logger

Szima Gábor sygma at tesla.hu
Sat Mar 27 09:32:01 CET 2010


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



More information about the Elektro mailing list