Це питання пов'язане з самою депрограмуванням AVR .
Інформація про проект:
У нас є акумулятор, що використовує ATMEGA644P. Додаток постійно працює в режимі сну і прокидається лише раз на секунду (RTC) або коли спрацьовує одна з двох зовнішніх ліній переривання.
Пристрій оснащений досить простим завантажувачем, який спілкується через UART (використовуючи інтерфейс RS232 IC). Він просто служить зручним методом для оновлення мікропрограмного забезпечення, щоб не вимагати програмного забезпечення апаратного провайдера. (Завантажувач очікує захищених контрольною сумою телеграм)
Пристрої були розроблені з внутрішньо-коричневим відключенням, оскільки він вдвічі збільшує енергоспоживання, а довгий час роботи акумулятора є обов'язковим (я думаю, що слід було використовувати зовнішнє виявлення коричневого кольору - переробляється робота).
Проблема:
кожні кілька місяців пристрій просто припиняє роботу, на цих пристроях не було оновлених програмних засобів. Однак після подальшого огляду вміст спалаху цих пристроїв здається пошкодженим. Більше того, батареї деяких із цих пристроїв були все-таки хорошими, але я не хочу виключати якусь ситуацію з перенапругою.
Це порівняння вихідного вмісту спалаху (зліва) зі зіпсованим вмістом (праворуч):
Деякі зауваження:
- Пошкоджений блок завжди складається щонайменше з однієї флеш-сторінки (256 байт) і вирівнюється на сторінці. Іншими словами: Зачіпаються лише цілі сторінки, а не один байт.
- Пошкоджений вміст читає 0xFF більшу частину часу, але може містити деякі інші значення або бути повністю "випадковим".
- Невелика смужка на лівій стороні зображення показує всі уражені ділянки. Для цього пристрою його приблизно одна десята частина загального вмісту спалаху.
- У нас був один пристрій, на якому впливала лише одна сторінка.
Цілком правдоподібно, що умова перенапруги під час запису флеш-пам'яті може пошкодити вміст флеш-пам'яті. Однак це означає, що деякі інструкції, чутливі до спалаху, повинні бути виконані.
Можливо, контролер випадково перезапускається через низьку напругу, і код завантажувача працює протягом цього часу зовсім непередбачувано. Процитуйте хлопця з іншого форуму, що стосується перенапруги:
"Виконуються не лише випадкові вказівки із спалаху, але й період випадкових інструкцій (немає гарантії, що код з флеш буде прочитаний та інтерпретований правильно). Поряд з цим інші частини mcu можуть не вести себе як розроблено, включаючи захист механізми ».
Питання:
Чи вважаєте ви, що "випадкова поведінка під час перенапруги та виконання деяких інструкцій щодо зміни даних на флеш-сторінках" - пояснення звучить? Якщо це так, то чому б ми не бачили цей тип помилок весь час лише як причину деяких програмних проблем (переповнення стека, недійсні покажчики).
Чи є у вас інші ідеї, що може спричинити такий вид корупції? Чи може це бути викликано EMI / ESD?