Яке реальне життя EEPROM?


21

ATMEL каже, що час роботи комірки EEPROM становить близько 100 000 циклу запису / комірки. Це насправді, як працює EEPROM в дикій природі?

Якщо я не змінюю значення комірки, чи це підкреслює все життя? Наприклад, якщо я записую значення 0xFFв одну і ту ж клітинку знову і знову, чи це різниця від написання 0x00, 0xFFі 0x00т.д.

Відповіді:


19

Як ви заявляєте, внутрішній 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, але їх використання залежить від вашого застосування.


3
Вирівнювання зносу для EEPROM: electronics.stackexchange.com/questions/60342/…
jippie

9

Одного разу я провів експеримент на зовнішньому EEPROM з 1 мільйоном макс. Номінальних циклів. Потрібно було близько 6 мільйонів циклів, щоб значною мірою розбестись, і до цього він прогресував, маючи спорадичні кількості корупції.

Коли ви говорите, що не змінюєте значення, я припускаю, що ви записуєте одні й ті самі дані на адресу кілька разів. Це майже напевно підкреслило б життя, хоча, мабуть, не наголосило б на навколишніх клітинах.


2

http://hackaday.com/2011/05/16/destroying-an-arduinos-eeprom/

Ардуїно був підключений до настінної бородавки і сів, "за диваном на пару місяців". EEPROM побачив, що вона вперше помилка запису через 47 днів і 1230 163 циклів. Це на порядок краще, ніж специфікація на аркуші даних atmel, але схожа на результати аналогічних експериментів.


Це здається занадто високим. Раніше я чув від 150k до 200k, але ніколи цього: o
asheeshr

5
Проблема полягає в тому, що це не виявляє всіх режимів відмов. Коли EEPROM пошкоджується, те, що трапляється, триває час, коли він буде зберігати дані, поступово зменшується. На 100 000 циклів Atmel гарантує 20 років збереження даних. Крім цього, зберігання даних зменшується. Коли досягається 1,2м циклів, і ви бачите помилку, це негайна помилка. на 1,230,160 циклів, можливо, не було негайної помилки, але дані можуть зберігатися лише днями.
Кібергібсони

0

Магічне рішення - якщо ви не хочете кодувати те, що говорили Cybergibbons перед читанням перед написанням, - це функція EEPROM.update (). Це робиться саме так:

Оновлення EEPROM (адреса, значення);

буде записувати і підкреслювати пам'ять лише у тому випадку, якщо значення відрізняється від вже збереженого.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.