logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Pytanie dot. trwałości pamięci Atmega128

pudl 09 Sie 2009 21:33 1909 13
  • #1 6874495
    pudl
    Poziom 14  
    Załóżmy że mamy Atmege128 z prostym programem który zapamiętuje pod 3 zmiennymi jakieś cyfry, z tym że pamięta je nawet po wyłączeniu zasilania. Czyli np włączam zasilanie, wklepuje na klawiaturce jakieś liczby do tych zmiennych (np a=1, b=3, c=4), wyłączam zasilanie, włączam ponownie i atmega je pamięta.
    Takie zmienne z tego co się orientuję są zapisywane w pamięci flash. I tu mam pytanie: skoro mówi się że trwałość pamięci flash w atmedze128 to ok 1000 cykli zapisu to czy takie zapisywanie zmiennych też ma to ograniczenie? Zapiszę wartości a,b,c te 1000 razy i procek będzie się nadawał do wymiany??
  • #2 6874528
    Freddie Chopin
    Specjalista - Mikrokontrolery
    pudl napisał:
    mówi się że trwałość pamięci flash w atmedze128 to ok 1000 cykli zapisu

    Mówi się też, że takie dane można znaleźć w datasheecie, ale sam nie wiem, tam ponoć nic nie ma...

    4\/3!!
  • #3 6874596
    pudl
    Poziom 14  
    Freddie Chopin napisał:
    pudl napisał:
    mówi się że trwałość pamięci flash w atmedze128 to ok 1000 cykli zapisu

    Mówi się też, że takie dane można znaleźć w datasheecie, ale sam nie wiem, tam ponoć nic nie ma...

    4\/3!!


    Ooo poważnie? :?
    Dobrze wiem że o tych 1000 cyklach zapisu pisze w datashecie ale tak jakby pytałem o coś innego. Czy te 1000 cykli tyczy się tylko zapisu programu do mikrokontrolera (przez isp, jtag itp), czy również zapisu danych podczas działania już samego programu mikrokontrolera?

    Chodzi o to że chcę napisać program który posiada 'kilka' ustawień (od 1-128) które może zapamiętać i przy każdym wyborze jednego z tych ustawień jego numer będzie wpisywany do flasha żeby przy ewentualnym zaniku zasilania procek ruszył od tego właśnie numeru.. I tu jest problem bo te ustawienia będą często zmieniane i jeśli atmega ma wytrzymać tylko 1000 razy to muszę coś innego wymyślić.
  • #5 6874649
    m.bartczak
    Poziom 16  
    W datasheecie mówi się o 10000 dla Flash i 100000 dla EEPROM.

    Proponuję użyć EEPROMa, albo jeśli wolisz - po prostu podłącz sobie jakąś pamięć zewnętrzną, na przykład MMC albo SD.
  • #6 6874684
    Freddie Chopin
    Specjalista - Mikrokontrolery
    pudl napisał:
    Ooo poważnie? :?
    Dobrze wiem że o tych 1000 cyklach zapisu pisze w datashecie ale tak jakby pytałem o coś innego.

    No ja na przykład nie wiem, gdzie w datasheecie pisze o jednym tysiącu. W moim pisze o dziesięciu, a "mówi się" o stu, więc może naprawdę poważnie przeczytaj tego datasheeta i to co "się mówi". Po tej lekturze może nawet zauważysz, że w tych układach jest EEPROM... kto wie...

    4\/3!!
  • #7 6874842
    rpal
    Poziom 27  
    Tak na moje oko to te dane raczej chowa się w eepromie niż we flash-u ? Jak słusznie ktoś zauważył zamiast łamac sobie tym głowę ile razy można ... to temat bardzo męski :) lepiej jest zachować je w zewnetrznym eepromie i mieś sprawę z głowy. Albo też trzymac je w ram-ie i dokoptować układ który tuż przed spadkiem napięcia związanym z wyłaczeniem zasilania upchnie to sobie w wewnętrznym eepromie. Jak się jeszcze uwzględni manipulację wskaźnikiem który będzie zmieniał adres tego miejsca w pamięci to starczy tych zapisów na dobre parę lat :) Można też posłużyć się bateryjnie podtrzymywanym ram-em choćby z wnętrza zegara np pcf8573 to masz do dyspozycji prawie 256B. To chyba starczy ?
  • #8 6875871
    kamyczek
    Poziom 38  
    Jeśli obawiasz się że zamęczysz atmegę ręcznie to mało realne , jeśli mowa o twoich zmiennych a , b i c to zapisuje sie je w eepromie, zatem liczba cykli jest 100000 biorąc pod uwagę że atmel zaniża znacznie wartości otrzymane podczas testów prędzej osiwiejesz niż ręcznie zajedziesz eeprom ;)
  • #9 6876749
    rpal
    Poziom 27  
    kamyczek napisał:
    Jeśli obawiasz się że zamęczysz atmegę ręcznie to mało realne , jeśli mowa o twoich zmiennych a , b i c to zapisuje sie je w eepromie, zatem liczba cykli jest 100000 biorąc pod uwagę że atmel zaniża znacznie wartości otrzymane podczas testów prędzej osiwiejesz niż ręcznie zajedziesz eeprom ;)

    no chyba że zapuści pętle for(i=0;i<100001;i++) to zarżnie ją jak się patrzy na własne życzenie :)
  • #10 6876933
    wicy
    Poziom 22  
    No właśnie... może głupie pytanie, ale proszę o poważna odpowiedź - czy operacje arytmetyczne na zmiennych (zapisy w rejestrach uP) są traktowane jak zapis pamięci flash? Inaczej - czy raz zaprogramowany (nie korzystający z eeprom) uP może działać wiecznie?
  • #11 6876990
    _Robak_
    Poziom 33  
    Przeciez zmienne sa w SRAMIE, operujac na zmiennych nie zmieniasz flasha!!
  • #12 6884835
    pudl
    Poziom 14  
    Cytat:
    A jak myślisz? Zapis to zapis, uważasz że działający program zapisuje dane mniej inwazyjnie?


    No tak właśnie myśle - że to się niczym nie różni. Się upewnić chciałem.

    Cytat:
    No ja na przykład nie wiem, gdzie w datasheecie pisze o jednym tysiącu. W moim pisze o dziesięciu, a "mówi się" o stu, więc może naprawdę poważnie przeczytaj tego datasheeta i to co "się mówi". Po tej lekturze może nawet zauważysz, że w tych układach jest EEPROM... kto wie...


    A widzisz, po necie krąży taka polska wersja datasheetu i tam (jak się teraz okazało błędnie) pisze o 1000..Nie każdy jest wszystko wiedzący, zluzuj trochę

    Ok, skorzystam z eepromu jak tu wszyscy doradzają.
    Dzięki!
  • #13 6886286
    tmf
    VIP Zasłużony dla elektroda
    Zapisy o ktorym piszesz odbywaja sie do pamieci EEPROM, a nie FLASH. FLASH mozna zapisywac tylko z sekcji bootloadera za pomoca secjalnego ciagu instrukcji, no i zapis odbywa sie po stronie. Czyli na raz w zaleznosci od kontrolera zapisujesz 16-64 bajty. EEPROM ma trwalosc 100k zapisow, potem moga sie dziac cuda (zamiast 0 bedziesz na odpowiednim bicie ciagle mial 1. Poniewaz zapisujesz tylko 3 bajty, a ATMega 128 ma 4096 bajtow EEPROM wiec mozesz nie zapisywac ciagle tych samych bajtow, tylko kolejne. Da ci to ok. 4096/3*100k zapisow. Zastosowanie zewnetrznej pamieci EEPROM nic nie zmieni, bo ma podobna trwalosc, rozwiazaniem bylby ew. FRAM, ale to koszty no i dodatkowy scalak na plytce.
  • #14 6900153
    hEx
    Poziom 13  
    Kiedyś bawiłem się trochę w zabijanie pamięci EEPROM (ludzie mają różne hobby ;) i dla Atmegi8 wyszło średnio 4,5 miliona cykli do wystąpienia pierwszego błędu (temperatura i wilgotność pokojowa, wynik uśredniony z kilkudziesięciu testów, jeden cykl trwał coś koło 8-9ms). Pierwsze przekłamanie po tych kilku milionach a później coraz częściej (pisze o jednej komórce) np. 3.944.900, 192.200, 163.000, 66.100, 8.800, 800,
    800, 10400, 4200. Jeśli przewidujemy że w czasie życia układu liczba cykli zapisu EEPROM będzie większa od gwarantowanej można zastosować algorytmy rozkładające zużycie na więcej komórek.
REKLAMA