Trwałość pamięci EEPROM

Witam

Ostatnio sporo bawię się uC, i odkryłem jak zachowywać dane po wyłączeniu zasilania. Kluczem do zagadni jest słówko eeprom. Wyczytałem ostatnio w Bardzo Mądrej Księdze, że tego typu pamięci mają ograniczoną żywotność (coś z kilkoma zerami liczby zapisów). Teraz pytanie zasadnicze: czy technika eepromów się już udoskonaliła, a jeśli nie to jak sobie poradzić jeśli uC ma przeżyć parę lat kiedy np co sekunda zapisuje wartość do eepromu?

Reply to
scx
Loading thread data ...

scx napisał(a):

Ta trwałość sie tyczy zapisu do pojedynczej komórki ( albo czasem strony ) pamięci. Jeśli zapisujesz jakieś dane co sek. do kolejnych adresów to trwałośc pamięci nie będzie ograniczeniem.

Reply to
"Miłosz K."

Trudno powiedzieć, bo nie napisałeś ile tam było zer. W każdym razie wciąż jest to ilość skończona. Jeśli to Ci przeszkadza to musisz poznać nowe słowo kluczowe FRAM.

formatting link

Reply to
mokule

"Miłosz K." się wziął i wyklepał:

Zapisuję właśnie do pojedyńczej komórki - powiedzmy że jest to licznik "ostatniej pozycji" Po prostu cyklicznie zapisuję sobie wartość do komórki, także w momencie kiedy zasilanie padnie na pewno mam zapisaną właściwą liczbę. Wtedy podczas rozruchu i pierwszego odczytu kontynuujemy od miejsca w którym skończyliśmy

Reply to
scx

mokule się wziął i wyklepał:

Coś mi się kojarzy że 3, ale może 4

Reply to
scx

Hmmm, no fajnie, wszystko super, ale: Zamiast prostej definicji zmiennej jako eeprom mam teraz troszkę roboty z

2wire, no i 4k pamięci kosztuje 10zł Mi się nie da dogodzić :P
Reply to
scx

To przemyśl algorytm zapisywania tak aby rozłożyć zużycie pamięci równomiernie po całym dostępnym obszarze. Czyli jeżeli potrzebujesz zapamiętać tylko jeden bajt a pamięć ma 1 kilobajt, zapisuj swoją daną najpierw w komórce o adresie 0, potem pod adresem 1, potem pod adresem 2 itd. Skomplikuje się conajwyżej algorytm wyszukiwania ostatnio używanej komórki - ale to nie problem jeżeli zapisujesz licznik, który rośnie monotonicznie. W innym przypadku też da się zrobić zapisując oprócz właściwej danej również np. licznik kolejnych zapisów (1,2,3 itd).

Tak że jeżeli masz np. pamięć, którą można programować wg producenta 10 tys razy - to zapisując bajt w kolejnych komórkach zamiast ciągle w tej samej, dostajesz 10 mln dopuszczalnych zapisów.

Reply to
Adam Dybkowski

Dobry przykład tej metody podaje w nocie aplikacyjnej Atmel: "AVR101: High Endurance EEPROM Storage"

formatting link

Reply to
Adam Dybkowski

Adam Dybkowski się wziął i wyklepał:

Co daje mi 4 miesiące pracy... Zresztą EOT, urządzenie pozostaje w sferze "byćmożekiedyś" a pytanie było w sumie teoretyczne :) W każdym razie dzięki za oświetlenie tematu

Reply to
scx

W takim razie musisz zastosować inny rodzaj pamięci nieulotnej. NVRAM albo FRAM. Niestety zewnętrznej, zatem dodatkowy scalak i troszkę kodu do obsługi, ale problem rozwiązany na długi czas (życie bateryjki w NVRAM albo 10^10 zapisów we FRAM)

TP.

Reply to
Tomasz Piasecki

Tomasz Piasecki napisał(a):

Albo najzwyklejszy ram i jakiś MAX695 + bateria. Tak się to robiło jak nie było NVRAM'ów z bateryjkami w środku albo FRAM'ów.

Reply to
"Miłosz K."

Dokladnie. Np. drukarki Epsona FX1050 i DFX8000 mialy w srodku 6264LP i baterie litowa rozmiaru ciut wiekszego, niz AA.

Reply to
Lukasz Spychalski

Adam Dybkowski napisał(a):

no nie da rady tak, nie można robić licznika bo ta komórka się zużyje. jedynie powiedzmy zapis po kolei i sprawdzanie np. ostatniej zajętej pozycji oczywiście przyjmując jakiś stan za zerowy. Po przekroczeniu tablicy zerowanie komórek i zapis w pierwszej

jedna komórka eeprom o wytrzymałości 10mln zapis/kasowanie da możliwość zapisu co sekundę przez 115 dni mniej więcej.

Reply to
szlovak

Witam.. A nie lepiej dorobic uklad z wiekszym kondensatorem na zasilaniu procesora i dioda wykrywajaca zanik napiecia na jakies przerwanie,a na przerwaniu zrobic zapis do pamieci - energii w kondensatorze wystarczy procesorowi na zapis do eeproma i wtedy masz po klopocie. Ewentualnie w drugiej komorce robisz jakis zapis kontrolny co 100/1000 przekrecen licznika - napisz czego to ma byc licznik - tzn. jaki jest czas impulsu itp. bo jak to bedzie licznik otwarc drzwi albo impulsow w KHz to beda to roznice - chodzi mi o to czy faktycznie apis co sekunde jest potrzebny i bardzo krytyczna jest zapisana tam wartosc Pozdr ART

Reply to
Art

No to doczep dowolny RTC z pamięcią RAM (taki jak np. DS1306). Dostaniesz 96 bajtów pamięci RAM podtrzymywanej baterią (np. CR2032) a do tego gratis RTC ;-) który też się może przydać. Czas podtrzymania: kilka lat. Dłużej przy zastosowaniu większej baterii litowej, np. SAFT rozmiaru R12 (kilkanaście Ah).

Reply to
Adam Dybkowski

Użytkownik "scx" snipped-for-privacy@wp.pl napisał w wiadomości news:dirrtv$nhh$ snipped-for-privacy@news.onet.pl...

Jesteś tak całkiem pewien, że wszystkie bity zdążyły się zapisać gdy zanikało zasilanie (proces zapisu EEPROMu trochę jednak trwa i mogło w niego trafić). Jeśli licznik jest więcej niż jednobajtowy to: jesteś całkiem pewien, że zapis nie został przerwany między bajtami. Miałeś stan hi=1, lo=255, zapisujesz hi=2, lo=0. Zależnie od kolejności zapisu przy zaniku zasilania może się okazać, że zapisane zostało 1,0, albo

2,255 P.G.
Reply to
Piotr Gałka

BTW: co sie dzieje ze zuzytym flashem? Jest tu jakas regula?

hej

Reply to
mw158979

Ja kiedyś spotkałem taki, w którym kasowanie działało nie do końca. Czyli po skasowaniu prawie wszystkie bajty miały wartość 0xff ale kilkanaście bitów pozostawało zerowych.

Reply to
Adam Dybkowski

Użytkownik "Lukasz Spychalski":

Czy moze ktos podac kawalek przykladowego (sprawdzonego!) schematu z pamiecia RAM podtrzymywana bateryjnie, ale w taki sposob, ze nie wystepuja losowe zapisy w momencie wlaczania\wylaczania (stany nieustalone na magistralach danych, adresowych i sterujacych) ?

Pozd Albatros

Reply to
Albatros

Użytkownik "Albatros" snipped-for-privacy@wolny.ptak.w.pl> napisał w wiadomości news:dj3oae$bf8$ snipped-for-privacy@atlantis.news.tpi.pl

Własnie MAX691 itp.

formatting link
Oprócz tego, że nadzorują napięcie zasilania i generują RESEST to jeszcze, wstawione między uP a RAM, odcinają sygnał CE\.

Reply to
Marek Dzwonnik

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.