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

Ile cykli zapisu wytrzymuje pamięć EPROM 24C64 (EEPROM, I2C)?

JORGEN1970 27 Paź 2025 22:00 1014 42
Najlepsze odpowiedzi

Ile cykli zapisu wytrzymuje pamięć EEPROM 24C64 i czy można wielokrotnie zapisywać ten sam bajt bez jej uszkodzenia?

Dla 24C64 typowo podaje się co najmniej 1 milion cykli zapisu/kasowania na bajt, ale jest to wartość gwarantowana przez producenta, a nie twardy moment uszkodzenia [#21733656][#21734762][#21733968] W praktyce układ może wytrzymać więcej — w wątku opisano ponad 6,48 miliona zapisów tej samej komórki, zanim pojawiły się błędy odczytu i problemy także na sąsiednich adresach [#21733836][#21736802][#21739623] Zapis w takim EEPROM-ie jest bajtowy, więc można zmieniać pojedynczy bajt bez kasowania całej pamięci, ale warto po każdym zapisie zrobić odczyt i porównanie, bo układ sam nie sygnalizuje błędu zapisu [#21734762][#21734585][#21741003] Po przekroczeniu specyfikacji mogą zacząć się zmieniać parametry pracy, a niekiedy najpierw psują się pojedyncze bity lub komórki [#21733968][#21734555]
REKLAMA
  • #1 21733652
    JORGEN1970
    Poziom 9  
    Posty: 345
    Pomógł: 2
    Ocena: 18
    Ile razy można zapisać do EPROM 24C64?

    Dodano po 2 [minuty]:

    Witam.
    Chciałem zapytać, ile razy można zapisać do EPROM 24C64?
    Dla przykładu zapisuję do jednej komórki pamięci np.:

    EI2C_write_buf( EPROM_2, 512, 1, dane);

    Ile razy mogę to zrobić dla danej pamięci, aby nie uległa uszkodzeniu?
  • REKLAMA
  • #2 21733656
    gregor124
    Poziom 29  
    Posty: 1573
    Pomógł: 99
    Ocena: 842
    Zależy od producenta, np. ST definiuje to tak:
    "More than 1 Million Erase/Write Cycles".
    Pomogłem? Kup mi kawę.
  • #3 21733659
    JORGEN1970
    Poziom 9  
    Posty: 345
    Pomógł: 2
    Ocena: 18
    Milion cykli ? Dobrze zrozumiałem?
    Ale na jedną komórkę pamięci?
  • REKLAMA
  • #4 21733672
    gregor124
    Poziom 29  
    Posty: 1573
    Pomógł: 99
    Ocena: 842
    Co znaczy na jedną komórkę pamięci?
    Bit?
    Najmniejsza możliwa porcja informacji do zapisu jest bajt.
    1 milion Erase/Write dotyczy ilości operacji, czy będzie to cały układ, czy 1 bajt liczy się jako 1.
    Ale projektując układ, nie powinieneś na to liczyć, raczej radziłbym ci ograniczyć liczbę cykli zapisu/odczytu do niezbędnego minimum, albo zmienić typ pamięci ;)
    Pomogłem? Kup mi kawę.
  • #5 21733836
    JORGEN1970
    Poziom 9  
    Posty: 345
    Pomógł: 2
    Ocena: 18
    Niewiem o co tu chodzi zrobiłem takich zapisów : EI2C_write_buf( EPROM_2, 512, 1, dane); już wiecej niż 3 miliony i pamięć działa poprawnie. Oczywiście chodzi o Bajt pamięci.
  • #6 21733968
    gregor124
    Poziom 29  
    Posty: 1573
    Pomógł: 99
    Ocena: 842
    Tego parametru nie należy brać za pewnik. Raczej należałoby go odczytać tak, że producent nie bierze odpowiedzialności powyżej 1 mln cykli lub po ich przekroczeniu zmieniają się parametry, zwłaszcza czasowe lub prądowe, poza zakres podany w datasheet. Zresztą te wieloletnie – każda firma może definiować na swój sposób i najlepiej byłoby się dowiedzieć od nich.
    Jeśli to eksperyment lub urządzenie jednostkowe, w dodatku jego uszkodzenie nie spowoduje katastrofy, to dobrze, ale jeśli miałoby być np. masowo produkowane, to znaczyłoby, że za jakiś czas, mniej więcej po przekroczeniu 1 mln zapisów, mógłbyś się spodziewać wzrostu reklamacji z powodu pamięci.
    Pamiętajmy, że producenci wciąż udoskonalają swoje technologie, a te parametry były ustalane kilka lat wcześniej.
    Może być jeszcze tak, że procedura programowania najpierw sprawdza zawartość docelowego bajtu i jeśli jest taka sama jak tego do zapisu, to w rzeczywistości kasowanie i zapis są pomijane.
    Pomogłem? Kup mi kawę.
  • #7 21734471
    JORGEN1970
    Poziom 9  
    Posty: 345
    Pomógł: 2
    Ocena: 18
    gregor124 napisał:
    Jeśli to eksperyment lub urządzenie jednostkowe, w dodatku jego uszkodzenie nie spowoduje katastrofy,

    I o to chodzi jak upalę jedną pamięć i stracę pare złotych nic się nie stanie, ja próbuję sprawdzić ile razy faktycznie mogę wykonać zapis.
    I teraz jest tak co 10 sekund zapisuję w pętli około 1000 zapisów , czyli w czasie jednej sekundy wykonuje 100 zapisów.
    Puszczam program na około 9 godzin czyli 9x3600x100=3 240 000 a robiłem takie próby 2 razy czyli mam 6 480 000 a pamięć działa .
    Pytanie czy o takim zapisie mowa , czy jednak pamięc więcej wytrzyma?
  • #8 21734555
    gregor124
    Poziom 29  
    Posty: 1573
    Pomógł: 99
    Ocena: 842
    Nie wiem, czym je programujesz i jakiego są producenta, ale znalazłem informację, że SIEMENS podaje, że cała procedura zapisu 1 bajtu trwa maksymalnie 8 ms.
    Może się okazać, że ten 1 milion to nie czas, kiedy układ faktycznie się uszkodzi, a ile wytrzyma takich cykli, że wszystkie gwarantowane parametry czasowe nie ulegną zmianie i będą zachowane w normach.
    Pamiętam, że tak było z pamięciami FRAM, gdzie była zdefiniowana liczba cykli odczytu i zapisu, po jej przekroczeniu układ nadal działał, ale np. mógł wydłużyć się czas zapisu.
    Z drugiej strony te pamięci FLASH są na rynku już dość długo, a te normy powstały już dawno, więc i technologie produkcji mogą być udoskonalone.
    A czy zapisujesz na przemian 0 i 1?
    Co do tych pamięci to pamiętam, że były z nimi problemy w urządzeniach eksploatowanych przez wiele lat (ponad 25),
    w których podtrzymywały konfigurację (która z zasady nie była zmieniana) i nagle zaczynały się psuć pojedyncze bity właśnie w tych pamięciach.
    Pomogłem? Kup mi kawę.
  • #9 21734569
    JORGEN1970
    Poziom 9  
    Posty: 345
    Pomógł: 2
    Ocena: 18
    EI2C_write_buf( EPROM_2, 512, 1, dane); taką funkcją wysyłam dane uint8_t .
    Funkcja wygląda tak:
    void EI2C_write_buf(u08 device, u16 subAddr, u16 len, u08 *buf) {

    while (len--) {
    TWI_start();

    TWI_write(device); // TWI_write( device | ((subAddr>>8)<<1) );
    TWI_write(subAddr >> 8);
    TWI_write(subAddr++);

    TWI_write(*buf++);

    TWI_stop();
    _delay_ms(5); // oczekiwanie na zapis
    subAddr++;
    }
    }
  • REKLAMA
  • #10 21734585
    gregor124
    Poziom 29  
    Posty: 1573
    Pomógł: 99
    Ocena: 842
    >>21734569
    Nie widzę tu kontroli poprawności zapisu.
    Po każdym zapisie powinien być odczyt i porównanie danych odczytanych z zapisanymi.
    Te układy raczej nie sygnalizują błędu zapisu i to ty powinieneś go wykryć właśnie przez weryfikację.
    Co to za kompilator, bo każdy może wyprodukować inny kod ?
    Pomogłem? Kup mi kawę.
  • #11 21734589
    jajacek44
    Poziom 26  
    Posty: 714
    Pomógł: 76
    Ocena: 169
    EEPROM, tak jak EPROM, jest kasowany całościowo.
    Czyli maksymalnie dotyczy to tak samo minimalnej jednostki alokacji, jak i całej kości.
    Destrukcyjne są cykle kasowania.
  • #12 21734670
    gregor124
    Poziom 29  
    Posty: 1573
    Pomógł: 99
    Ocena: 842
    jajacek44 napisał:
    EEPROM tak jak EPROM jest kasowany całości .

    A to ciekawe, możesz to rozwinąć, bo w dokumentacji producentów układów, o których to rozmawiamy, a więc 24C64, jest mowa tylko, że można zapisać pojedynczy bajt lub stronę (32 bajty).
    Oczywiście można też zapisać całą pamięć, powtarzając powyższe operacje, ale to inna bajka ;)
    Załączniki:
    • M24C64-1.PDF (399.86 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    Pomogłem? Kup mi kawę.
  • #13 21734708
    jajacek44
    Poziom 26  
    Posty: 714
    Pomógł: 76
    Ocena: 169
    Tak można zapisać jednostkę alokacji, ale kasuje się całą pamięć.
    Degradują się te komórki, które zmieniają stan.
    (Mogą to być pojedyncze bity).
  • #14 21734721
    ostrytomasz
    Poziom 25  
    Posty: 494
    Pomógł: 82
    Ocena: 218
    Nie wiem czy EEPROM zachowuje się podobnie, ale dla pamięci NAND SLC wraz z ilością cykli P/E maleje czas retencji. W takim wypadku nawet sprawdzenie zawartości pamięci od razu po zapisie nie gwarantuje że pamięć będzie spełniać dalej swoją rolę.

    Patrząc się na metal-nitride-oxide-silicon EEPROM: https://nepp.nasa.gov/files/16152/05_001%20Chen%20%20EEPROM%20Final%20Report.pdf (10x degradacja po 10k cykli zapisu) mogę przypuszczać że dla pamięci CMOS EEPROM również może istnieć taka zależność.
  • #15 21734727
    jajacek44
    Poziom 26  
    Posty: 714
    Pomógł: 76
    Ocena: 169
    EEPROM to nie FLASH.
    We flash można skasować sektor (klaster), a EEPROM kasuje się cały.
  • #16 21734762
    Sam Sung
    Poziom 33  
    Posty: 2014
    Pomógł: 227
    Ocena: 583
    jajacek44 napisał:
    EEPROM to nie FLASH .
    W flash można skasować sektor (klaster) a eeprom kasuje się cały .

    Czy możesz podać źródło tej rewelacji, bo to jest sprzeczne z tym, co wiem/znalazłem.
    https://onlinedocs.microchip.com/oxy/GUID-D5A...UID-AF5B464B-9431-4C1F-B885-BC155D05968D.html
    Microchip podaje Write Endurance >= 1000000 Write Cycles i to jest liczone per bajt, bo właśnie inaczej niż w flashu kasowalny/zapisywalny jest pojedynczy bajt - lub równolegle do 8/16 bajtów naraz w ramach jednej strony/wiersza.
    Czyli ja to rozumiem tak, że każdy bajt można zapisać co najmniej milion razy, czy to pojedynczo, czy w ramach zapisu strony.
    Interfejs I²C nie przewiduje rozkazu kasowania całego chipu.
    jajacek44 napisał:
    Tak można zapisać jednostkę alokacji ale kasuje się całą pamięć .
    Kto i gdzie przechowuje zatem zawartość pozostałych bajtów pamięci (N-1), gdy I²C master każe zmienić jeden bajt?
  • #17 21735117
    jajacek44
    Poziom 26  
    Posty: 714
    Pomógł: 76
    Ocena: 169
    Tak owszem można zapisać pustą jednostkę alokacji ale....
    Nadpisanie już zapisanej jednostki to jest kasowanie całości .
    To jest EEPROM a nie flash .
    Różnica pomiędzy eeprom a eprom jest taka że kasuje się elektrycznie a nie ultrafioletem .
    A co przechowuje ? , to tylko inwencja autorów projektu.
    W zamierzchłych czasach używano dwóch eeprom roboczy i kopia (bufor) .
    Plus oczywiście odpowiednie algorytmy synchronizacji .
  • #18 21735170
    stachu_l
    Poziom 38  
    Posty: 2970
    Pomógł: 477
    Ocena: 1115
    jajacek44 napisał:
    Nadpisanie już zapisanej jednostki to jest kasowanie całości .

    A pokażesz Datasheet to opisujący bo np Atmel EEPROM 28C64 opisuje zapis bajtu - wartość jest zatrzaskiwana, bajt kasowany i zapisywany. Nic nic ma o całkowitym kasowaniu pamięci.
    https://ww1.microchip.com/downloads/en/devicedoc/doc0001h.pdf
  • #19 21735191
    jajacek44
    Poziom 26  
    Posty: 714
    Pomógł: 76
    Ocena: 169
    Kolego @stachuI czytać całość i ze zrozumieniem .
    CHIP CLEAR: The contents of the entire memory of the
    AT28C64 may be set to the high state by the CHIP CLEAR
    operation. By setting CE low and OE to 12 volts, the chip is
    cleared when a 10 msec low pulse is applied to WE.
    Magistrala I2C czy ISP nie zapewniają tego , tylko hardware + reszta mikromózgu .
  • #20 21735220
    stachu_l
    Poziom 38  
    Posty: 2970
    Pomógł: 477
    Ocena: 1115
    jajacek44 napisał:
    Kolego @stachuI czytać całość i ze zrozumieniem .
    CHIP CLEAR: The contents of the entire memory of the
    AT28C64 may be set to the high state by the CHIP CLEAR
    operation. By setting CE low and OE to 12 volts, the chip is
    cleared when a 10 msec low pulse is applied to WE.

    Ale to możesz zrobić a nie musisz aby zapisać bajt. To jest tylko przyspieszenie kasowania całości.
  • #21 21735237
    jajacek44
    Poziom 26  
    Posty: 714
    Pomógł: 76
    Ocena: 169
    To pisałem dopisywać można ale zmieniać to inna para kaloszy .
    Np. zapisałeś pierwszy bajt i chcesz go zmienić reszta idzie się bzibziać 11111111 ....
    Pisałem już dopisywać można , ale zmiana to kasacja całości .
    Na 1111.... zmienia się całość a nie jednostkę akacji z 0 na1 zmienia się całość kości albo nic !
  • #22 21735245
    stachu_l
    Poziom 38  
    Posty: 2970
    Pomógł: 477
    Ocena: 1115
    jajacek44 napisał:
    dopisywać można ale zmieniać to inna para kaloszy .

    To zobacz opis WRITE BYTE na stronie 3 - Robisz operacje write, wartość bajtu jest zatrzaskiwana w rejestrze wewnątrz pamięci i startuje cykl kasowanie bajtu i ponowny zapis który dla cytowanej pamięci trwa do 200us z tego wychodzi zapis całości bajt po bajcie ok 1.6s.
    Można więc zmienić wartość dowolnego bajtu tej pamięci bez naruszania reszty.
  • #23 21735259
    jajacek44
    Poziom 26  
    Posty: 714
    Pomógł: 76
    Ocena: 169
    Tyle że to niCHIP CLEAR: The contents of the entire memory of the
    AT28C64 may be set to the high state by the CHIP CLEAR
    operation. By setting CE low and OE to 12 volts, the chip is
    cleared when a 10 msec low pulse is applied to WE.
    Tylko jest eeprom tylko flash .
  • #24 21735280
    stachu_l
    Poziom 38  
    Posty: 2970
    Pomógł: 477
    Ocena: 1115
    jajacek44 napisał:
    Tyle że to niCHIP CLEAR:

    Ale nigdzie nie jest napisane, ze przed zapisem trzeba robić CHIP CLEAR a tylko można go wykonać aby wyczyścić pamięć.
    Gdyby zapisywać bajt po bajcie same 0xFF to zajmie owe 1.6s ale można całą pamięć skasować w 10ms przy pomocy CHIP CLEAR i to jest jego zastosowanie.
  • #25 21735287
    jajacek44
    Poziom 26  
    Posty: 714
    Pomógł: 76
    Ocena: 169
    Żeby EEPROM nadpisać, a nie dopisać, to trzeba zrobić 1111... a to się robi po całości, to nie flash.
    EEPROM-y bywały ośmiobitowe, szesnastobitowe i o większej jednostce alokacji.
    Czy do Kolegów nie dociera, że żeby zmienić zawartość z 0 na 1, trzeba skasować całość?
    Przynajmniej w EPROM i EEPROM?
  • REKLAMA
  • #26 21735311
    stachu_l
    Poziom 38  
    Posty: 2970
    Pomógł: 477
    Ocena: 1115
    Kolego @jajacek44 w EEPROM możesz skasować całość przy pomocy CHIP CLEAR ale możesz zmienić zawartość dowolnego bajtu bo zgodnie z opisem przed zapisaniem wartości bajtu układ robi: Internally, the device performs a self-clear before write. To jest opisane na stronie 3 dla AT28C64.
  • #27 21735313
    jajacek44
    Poziom 26  
    Posty: 714
    Pomógł: 76
    Ocena: 169
    -+FLASH ?
    BYTE WRITE: Writing data into the AT28C64 is similar to
    writing into a Static RAM. A low pulse on the WE or CE
    input with OE high and CE or WE low (respectively) ini-
    tiates a byte write. The address location is latched .
    To jest jakiś komputerek czyli Art Nuweo a nie pamięć.
    Raczej zaawansowany cosik a nie flash .
  • #28 21735322
    stachu_l
    Poziom 38  
    Posty: 2970
    Pomógł: 477
    Ocena: 1115
    jajacek44 napisał:
    FLASH ?

    FLASH wymaga skasowania całego bloku/strony pamięci przed zapisem ale może mieć także funkcje kasowania całości.
  • #29 21735331
    jajacek44
    Poziom 26  
    Posty: 714
    Pomógł: 76
    Ocena: 169
    Skasowanie bloku to flash a nie eeprom .
    Mongolskie powieki mogą pisać co chcą nie na to norm (przynajmniej u nich) .
  • #30 21735352
    stachu_l
    Poziom 38  
    Posty: 2970
    Pomógł: 477
    Ocena: 1115
    jajacek44 napisał:
    Skasowanie bloku to flash a nie eeprom .

    Tak właśnie napisałem bo początkowo było tylko FLASH? bez reszty tekstu.
    Każdy taki scalak pamięci czy EEPROM czy FLASH ma wbudowaną pewna maszynkę stanów generującą cykle kasowania i zapisu.
    jajacek44 napisał:
    Mongolskie powieki mogą pisać co chcą nie na to norm (przynajmniej u nich) .

    To pokaż inne opisy scalaków np od TI czy Intela gdzie jest opisane inaczej i dodatkowo jest wymaganie na kasowanie całego EEPROM przed zapisem (wymaganie a nie możliwość) pojedynczego bajtu bo o to toczy się spór.
    Dla mnie w EEPROM możesz zapisywać nowe wartości do bajtów bez niszczenia zawartości innych bajtów a w FLASH musisz wpisywać całe bloki/strony bo takimi porcjami są kasowane dane.

Podsumowanie tematu

✨ Pamięć EEPROM 24C64 (I2C) ma deklarowaną przez producentów wytrzymałość na około 1 milion cykli zapisu na pojedynczy bajt, jednak w praktyce może wytrzymać znacznie więcej, co potwierdzają eksperymenty z ponad 6 milionami zapisów bez natychmiastowej awarii. Cykl zapisu trwa około 8 ms, a zapis odbywa się bajt po bajcie bez konieczności kasowania całej pamięci, w przeciwieństwie do pamięci FLASH, gdzie kasowanie odbywa się blokami lub stronami. W EEPROM przed zapisem bajtu następuje wewnętrzne kasowanie tego bajtu, co umożliwia nadpisanie bez uszkodzenia pozostałych komórek. Jednak intensywne zapisy do jednej komórki mogą powodować uszkodzenia sąsiednich komórek z powodu efektów takich jak zużycie tlenku bramki, half-select disturb, program/read disturb, starzenie tranzystorów selekcyjnych i lokalne nagrzewanie. Nie ma możliwości odczytania liczby wykonanych cykli zapisu z pamięci. Niektóre technologie, np. stosowane przez ROHM, wykorzystują podwójne komórki dla zwiększenia niezawodności. W praktyce zaleca się ograniczenie liczby cykli zapisu do niezbędnego minimum lub zastosowanie innego typu pamięci, jeśli wymagana jest bardzo wysoka trwałość. Warto również stosować weryfikację zapisu przez odczyt i porównanie danych.
REKLAMA