Як ви заявляєте, внутрішній EEPROM має 100 000 циклів запису. Це не здогадка - дуже значна частка ATmega328 досягне цього числа без проблем. Раніше я протестував три процесори, і всі досягли 150 000 циклів без проблем.
Важливо відзначити режим відмови EEPROM. Більшість проектів "EEPROM руйнівець" неодноразово читають / записують, поки дані взагалі не записуються. До цього моменту EEPROM все ще буде пошкоджений. Це виражатиметься тим, що дані не зберігаються протягом розумного періоду. З цієї причини нерозумно покладатися на що-небудь більше 100 000 циклів запису.
EEPROM відрізняється від ОЗУ на ATmega. Написання до нього не просте чи швидке, але воно загорнуте у дружню бібліотеку Arduino , приховуючи цю складність від користувача.
Перший рівень опосередкованості - це бібліотека EEPROM , яка тривіально проста], просто викликає дві інші функції для читання та запису. Це викликає eeprom_write_byte, знайдений тут .
Ця функція використовує вбудовану збірку, тому її можна легко зрозуміти. Є коментар, який легко зрозуміти, хоча:
Встановити режим програмування: стирати та записувати
Це натякає на одну зі складнощів поводження з EEPROM - щоб писати до нього, спочатку потрібно стерти його. Це означає, що якщо ви викликаєте EEPROM.write (), він виконає цикл запису незалежно від значення, яке ви пишете.
Це означає, що повторне записування 0xFF, ймовірно, матиме такий же ефект, як і запис 0xFF, 0x00,0xFF, 0x00 тощо.
Існують способи подолати це - ви можете спробувати зателефонувати на EEPROM.read () перед EEPROM.write (), щоб побачити, чи значення вже таке, але це потребує додаткового часу.
Існують і інші методи, щоб уникнути надмірного зносу EEPROM, але їх використання залежить від вашого застосування.