Що станеться, якщо ви запишете> 10000 разів до флеш-пам'яті ATmega?

Я зрозумів, що кожен раз на 5 хвилин завантажую код і займаюся досить інтенсивним розробкою спроб і помилок, і що ця звичка може призвести до проблем, особливо якщо я працюю на спеціальній платі (не Arduino), де чіп не легко замінити.

Що станеться?

Я помітив, що avrdude перевіряє записаний спалах. Так чи буде він просто починати помічати помилки і, можливо, бути не в змозі писати без збоїв?

Або іноді вона буде працювати, іноді не?

Example of heavy use: A custom PCB where easy replacement of the MCU is not possible. 10,000 writes would equal 100 days, each 8 hours of development, with flash write every 5 minutes.

У мене є кілька звичок, які призводять до частого запису флеш-пам'яті: я вкладаю тести у свій код, покращують швидкість тестування невеликих оптимізацій, оптимізацію розміру програми тощо.

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

In conclusion: Yes, it's unlikely, and arguably, if you're working full-time on a board, less intensively, for, say, a year, you can probably afford to buy another board when the first one starts failing the flash-verification.

5
Власне, це буде невизначена поведінка. В принципі все може статися, і цього слід уникати.
додано Автор dotnetengineer, джерело
Сомм програміст-плати або IDE дійсно роблять це дійсно. Але часто, ви не перепрограмуєте мікро більше 10.000 разів.
додано Автор dotnetengineer, джерело
Дані мають тенденцію бути консервативними, і цифри, які вони дають, звичайно діють для широкого діапазону температур. У умовах кімнатної температури, швидше за все, ви можете вийти за межі 10K циклів. Ви просто не можете бути на 100% впевненими, оскільки Atmel не робить жодних обіцянок понад 10K.
додано Автор Sprogz, джерело
Наскільки я знаю, avrdude перевіряє кожен записаний байт. Ви дізнаєтеся, коли це не вдалося. Деякі з них зробили тести з EEPROM, але я не знаю тесту з Flash. Старий ATmega8 має ті ж числа для flash (10k) і EEPROM (100k), але нові чіпи краще. Я вважаю, що він починає виходити з ладу після багатьох 10k письма.
додано Автор Standback, джерело
@Jot, я до сих пір не впевнений, що наслідки будуть пошкоджені спалахом, якщо avrdude поступово провалюватиметься частіше і доведеться повторити спробу, або якщо спалах буде просто неможливо записати правильно, наприклад завжди дають неправильне читання.
додано Автор jmm, джерело
Те, що я намагаюся з'ясувати, це те, як воно зазнає невдачі.
додано Автор jmm, джерело
@ Paul, Отже, в крайніх випадках було б доречно окремо відстежувати кількість записів flash? Так як режим відмови не поводився би передбачувано? Напр. повторне збою на флеш-записи
додано Автор jmm, джерело

5 Відповіді

Що станеться?

вона не може пройти перевірку паритету. тому завантаження коду неможливе.

з цим сказав, у мене ніколи не було однієї спалаху на основі MCU збій через витривалість. це незліченний mcus, наскільки я пам'ятаю.

щоб дати вам деякий сенс дизайну headroom, я написав-до та тоді read-back з eeprom на pic над декілька годин @ 10ms за читання/запис, без краху. що eeprom оцінюється 1M на витривалість.

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

2
додано

This Wikipedia article about Flash memory discusses failure mechanisms including references to relevant papers. One point that surprised me was "Read Disturbance" of adjacent cells after a large number (>100,000) of reads from one cell since last erase, causing the adjacent cell(s) to read back erroneously. There's probably more there and in the referenced articles than you ever wanted to know about Flash failure mechanisms.

Однак ...

На 5 хвилин на тест, 10000 тестів займе у вас 35 днів, працюючи цілодобово або 100 + днів @ 8 годин на добу, підтримуючи цей рівень тестування. Моя думка полягає в тому, що ви навряд чи досягнете 10K циклів. Але якщо ви занепокоєні тим, що ви ставите сильно використовувану мікросхему в цьому полі (а я, в деяких випадках, може бути і в деяких випадках), сокетна плата №1 буде вартий вашої уваги.

1
додано
Моя перша думка полягає в тому, чи може будь-яка з цих функцій бути налаштована поза системою? А якщо ні, то яка вартість провалу в полі проти кроків, необхідних для запобігання такому? Чи буде відмова коштувати деякий час простою? Виклик глобальної служби? Відносини з клієнтами? Вбивство пацієнта? Деякі сценарії просто виправдовують навіть величезні авансові інвестиції, щоб уникнути їх. Ouch - говорити про рок проти твердого місця ...
додано Автор caryden, джерело
Дійсно. Моє занепокоєння в основному стосується активно розвивається на звичай PCB, з ATmega2560, який не буде занадто весело, щоб замінити вручну, хоча здійсненно (100 контактів + ​​ризик важко побачити коротке замикання контактів). Або ж, купуючи кілька дощок.
додано Автор jmm, джерело
Причина високого числа записів полягає в тому, що я налаштовую різні функції для автоматизації, зондування і т.д. ніж просто відновлення/перепрошивання;)
додано Автор jmm, джерело

AFAIK виробник говорить, що кількість циклів запису гарантовано. Зазвичай чіп здатний витримати трохи більше (для виробника безпечно зберігати гарантію), індивідуальні чіпи можуть, випадково, пережити багато, набагато більше.

Також збій може призвести до двох видів проблем - перший краще в певному сенсі - запис просто не працює, після читання повертається "щось" (зазвичай частина написаного значення, але деякі біти завжди встановлюються на ті ж 0/1). Другий, що носіння робить написання ненадійним - ви його пишете, читаєте, це нормально, але через деякий час (наприклад, дні/місяці) зміст змінюється, і якщо ви читаєте його знову, ви отримаєте "щось "як і в попередньому випадку.

Було б краще, щоб переконатися, що ви можете обміняти чіп, перед тим як йти в "нормальне використання" і покласти туди свіжу - скористайтеся сокетом/створіть нову плату/відпаять старий чіп і припаяйте новий. Використовуйте зшиті чіп для додаткового тестування/розробки, але для виробництва використовуйте свіжий з лише декількома циклами перепрошивання. Крім того, програмні емулятори можуть значно прискорити розробку та зменшити необхідність перезавантаження чіпа на платі.

0
додано

Хоча це не є прямою відповіддю на ваше запитання, це може бути відповіддю на вашу проблему (необхідність інтенсивної спроби та помилки

Ймовірно, ви тестуєте в основному вашу програму (зміни), а не апаратне (зміни). Оскільки я не припускаю, що ви змінюєте своє обладнання (макет) кожні 5 хвилин.

Якщо програма досить складна, то, напевно, краще буде написати спеціальну програму тестування off-line і запустити її на комп'ютері замість Arduino. Ймовірно, вам доведеться заблокувати деякі класи/бібліотеки, які ви використовуєте, але це може заощадити багато часу. Крім того, ви маєте вигоду від кращого IDE та багатьох інших можливостей налагодження. Після проходження тестової програми тестування в автономному режимі, ви спробуєте її на Arduino.

Таким чином, ви, ймовірно, повинні завантажити програму лише кілька разів на день на Arduino.

0
додано
Це гарна відповідь, тому що 10k випробувань занадто багато, і краще виправити основну проблему. Можливо, використовуються затримки, які потрібно налаштувати (замість використання millis). Можливо, може використовуватися більше однієї плати Arduino, або Arduino Due з декількома завданнями. Думаю, що для створення робочого коду лише генератор випадкових випадків вимагав би багато випробувань.
додано Автор Standback, джерело
З мого досвіду, це краще підходить як коментар, ніж відповідь.
додано Автор jmm, джерело
Я думаю, що це залежить від того, що важливіше: відповідь самого питання або вирішення його проблеми.
додано Автор Pat, джерело

Припускаючи, що вам не доведеться налаштовувати кожну плату індивідуально, не надсилайте плату, що ви проводите тестування/налаштування на "поле" ... використання поля.

0
додано
Цикли 10k запису багато, хоча.
додано Автор dotnetengineer, джерело