[elektro] DataFlash logger
hg12345
hg12345 at freemail.hu
Sat Mar 27 14:44:33 CET 2010
A LOG méret 12byte ebből 2x4 a sorszám a maradékban van az információ?
On Sat, 27 Mar 2010, hg12345 wrote:
> Kiváncsivá tettél....
>
> Ez EEPROM vagy FLASH mert mindkettőről írsz!
Ez Atmel DataFlash (FLASH :)
> A FLASH eszközöknél törölni nagyobb blokkokban kell (ERASE BLOCK 4K),
> írni meg tudsz kisebben is (WRITE PAGE 264byte).
Ezeknel van blokk torles, illetve blokk iras torlessel.
Blokk: 264/528 byte.
Lehetoseg van meg page/sector torlesre is, de nem hasznalom.
> A header fejlécében a sztatisztikai adatok alatt mit értesz...
> TIMESTAMP?
Olyasmi. Konkretan egy 32 bites sequencer, ami szigoruan monoton novekszik
minden iraskor.
Ezzel tudom, hogy melyik a "legfiatalabb" (innen folytatom az irast) es
"legoregebb" blokk (innen olvasok), illetve nagyjabol kideritheto, hogy
mennyire elhasznalt az eszkoz.
Tovabba helyet kapott ott 1-1 byte, hogy a lapon belul hol tart az iras,
illetve az olvasas.
> 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.
Nagyon lelassitja az osszes folyamatot (init, read, write).
Igazabol azert, mert a DataFlash RAM buffereben tartok mindent, abban
modositom, es onnan is irom ki, CPU-ba csak par byte kerul attoltesre.
> 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
Egybol kiirom, mivel csak az adott blokk "kopik".
> 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.
A fejlec-check ezt lekezeli.
Tegyuk fel, hogy binaris 11110000 kerul a fejlecbe. Check: 00001111.
Elindul a torles. Legrosszabb esetben mi tortenik?
11111111/00001111 vagy 11110000/111111111
Mivel nem egyezik a fejlec inverze a check-el, ezert ez invalid blokk.
Iraskor pont a forditottja tortenik: legrosszabb esetben 1-2 bit 1-ben
marad. Viszont a check ezt is megfogja, mert azon a helyen eleve 1 van
benne, aminek az inverze 0.
> Még egy kérdés a LOG méret fix, vagy esetleg a fejléc erre is tartalmaz információt.
FIX, egyelore #define
> Visszaolvasáskor hogyan biztosítod a LOG tartalom validítását?
Elso korben a header adatok validitasara ugyeltem, mivel ha par LOG
invalid lesz, akkor az meg "elmegy", de ha megserul a struktura, akkor
teljesen osszeborul az egesz.
Ide be lehet tenni CRC-t, ha az adatok fontosak.
Nem is mondasz hulyeseget: 12 byte-os a LOG strukturam, de ebbol csak 11
byte-ot hasznalok (43*12 + 12 = 528 byte = blokk). Oda szepen befel egy
CRC.
> 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.
Ebbol nem lesz baja, mert Init-kor csak olvasas van.
Van egy masik LOG-olo algoritmusom, csak az FRAM-al mukodik. Ott
tranzakcios logot gyartok, initkor pedig elindul recovery, ha szukseges.
De ez sem sertodik meg ha rangatjak a tapot, mert a folyamat atomikus.
> 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.
Meg nem foglalkoztam ezekkel, de lehet mindenfele uC-n
filerendszer-kezelo kodot hasznalni.
-Sygma
-----------------------------------------
elektro[-flame|-etc]
More information about the Elektro
mailing list