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.