Меняется ли флэш-память при исполнении?

Я должен сделать проверку кода с помощью CRC. В этом случае все, что я делаю, это пропускаю каждый найденный байт флэш-памяти через алгоритм для вычисления CRC и сравнения результата с предварительно определенным значением CRC.

Однако я зациклен на мысли, что флэш-память может измениться в какой-то момент, что приведет к сбою проверки CRC.

Предполагая, что код больше не затрагивается, возможно ли, что флэш-память изменится во время выполнения? Если так, что может заставить это измениться? И как мне избежать указанных изменений?

2 ответа

Решение

Флэш-память только означает, что она сохраняет свой контент в отсутствие питания; флэш-память определенно стирается / перепрограммируется. Отдельный термин "постоянная память" (ПЗУ) означает, что его нельзя изменить после начальной записи.

Но память не изменяется, если только инструкция процессора не коснется ее или она не ухудшается или не подвержена влиянию внешних факторов. Содержимое флэш-памяти может сохраняться в течение десяти лет без изменений. Обычно это количество циклов чтения / записи, которые ухудшают флэш-память раньше, чем возраст. Высокие статические электрические заряды могут повредить вспышку, но магнитные поля не должны иметь большого эффекта.

Если вы имеете какое-либо влияние на технические характеристики оборудования, следует рассмотреть вопрос о ПЗУ, если это является основной целью; для этого у него есть несколько преимуществ по сравнению со вспышкой.

Наконец, вы заметите, что вы будете передавать "каждый байт" памяти через ваш алгоритм CRC. Если правильная контрольная сумма должна храниться на том же носителе памяти, у вас есть рекурсивная проблема с попыткой предварительно вычислить контрольную сумму, которая содержит свою собственную контрольную сумму. В большинстве случаев действительная контрольная сумма должна находиться в некотором сегменте памяти, который сам не подвергается проверке.

В любом случае, если он должен был измениться самопроизвольно, это именно то, что предназначено для проверки вашего кода, и вы захотите и ожидаете, что CRC потерпит неудачу, поэтому нет проблем - он выполняет свою работу

В основном это не вопрос самопроизвольного изменения, а, скорее, проблема неправильного написания в первую очередь или защиты от злонамеренного или случайного вмешательства. Если часть флэш-памяти используется для переменного энергонезависимого хранения, вы, очевидно, не включили бы эту область в свой CRC. Если вы разделяете одну и ту же флэш-память на пространство кода и хранилище NV, потенциально ошибки в коде хранилища NV могут непреднамеренно изменить пространство кода, поэтому ваш CRC защищает от этого, а также от внешнего вмешательства (например, посредством JTAG).

Флэш-память подвержена циклу стирания / записи, и после ряда циклов некоторые биты могут оставаться "высокими". Выносливость варьируется между частями от 10000 до 100000 и редко является проблемой для хранения кода. Флэш-память также имеет номинальное время хранения данных; это обычно указывается в 10 лет; но это наихудший рейтинг экстремальных условий - опять ваш CRC защищает от этих эффектов.

Другие вопросы по тегам