Jak twierdzisz, wewnętrzna pamięć EEPROM ma żywotność 100 000 cykli zapisu. To nie jest przypuszczenie - bardzo znaczna część ATmega328 osiągnie tę liczbę bez żadnych problemów. Testowałem już trzy procesory i wszystkie osiągnęły 150 000 cykli bez problemów.
Ważne jest, aby zwrócić uwagę na tryb awarii EEPROM. Większość projektów „niszczycieli EEPROM” wielokrotnie odczytuje / zapisuje, aż dane w ogóle nie zostaną zapisane. Przed tym punktem pamięć EEPROM nadal będzie uszkodzona. Przejawem tego byłby brak zatrzymywania danych przez rozsądny okres. Z tego powodu nierozsądne jest poleganie na czymkolwiek więcej niż 100 000 cykli zapisu.
EEPROM różni się od pamięci RAM w ATmega. Pisanie do niego nie jest proste ani szybkie, ale jest zapakowane w przyjazną bibliotekę Arduino , ukrywając tę złożoność przed użytkownikiem.
Pierwszym poziomem pośrednictwa jest biblioteka EEPROM , która jest banalnie prosta], po prostu wywołując dwie inne funkcje do odczytu i zapisu. To wywołuje eeprom_write_byte, znalezione tutaj .
Ta funkcja używa wbudowanego zestawu, więc może nie być łatwo zrozumiała. Istnieje jednak komentarz, który można łatwo zrozumieć:
Ustaw tryb programowania: kasowanie i zapis
Wskazuje to na jedną ze złożoności radzenia sobie z EEPROM - aby do niego napisać, najpierw musisz go usunąć. Oznacza to, że jeśli wywołasz EEPROM.write (), wykona cykl zapisu niezależnie od zapisywanej wartości.
Oznacza to, że wielokrotne zapisywanie 0xFF prawdopodobnie będzie miało taki sam efekt jak zapisywanie 0xFF, 0x00,0xFF, 0x00 itp.
Istnieją sposoby obejścia tego problemu - możesz spróbować wywołać EEPROM.read () przed EEPROM.write (), aby sprawdzić, czy wartość jest już taka sama, ale zajmuje to więcej czasu.
Istnieją inne techniki pozwalające uniknąć nadmiernego zużycia pamięci EEPROM, ale ich użycie zależy od zastosowania.
Raz przeprowadziłem eksperyment na zewnętrznej pamięci EEPROM z maks. 1 milionem cykli znamionowych. Poważna korupcja zajęła około 6 milionów cykli, a wcześniej postępowała sporadycznie.
Kiedy mówisz, że nie zmieniasz wartości, zakładam, że wielokrotnie zapisujesz te same dane na adres. To prawie na pewno podkreśliłoby życie, chociaż prawdopodobnie nie obciążyłoby otaczających komórek.
źródło
http://hackaday.com/2011/05/16/destroying-an-arduinos-eeprom/
źródło
Magiczne rozwiązanie - jeśli nie chcesz kodować tego, co Cybergibbons powiedział o czytaniu przed napisaniem, jest funkcja EEPROM.update (). Robi to dokładnie tak:
EEPROM.update (adres, wartość);
zapisze i zaakcentuje pamięć tylko wtedy, gdy wartość jest inna niż wartość już zapisana.
źródło