Перейти к содержанию
    

Доступ к flash памяти STM32 из программы

Встроенный flash 105-го не корректируется (DocID13902 Rev 16).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Встроенный flash 105-го не корректируется (DocID13902 Rev 16).

Вообще-то это следует из той цитаты, которую привёл Сергей Борщ.

Там сказано, что значение 0x0000 можно записать поверх любого другого. Это сразу исключает ECC.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это сразу исключает ECC.
Я думал, что как раз наоборот. FFFF - стертая память, 0000 - полностью записанная, исправляющий код к этому числу тоже равен нулю и может быть записан поверх любого предыдущего, как и само число 0000 может быть записано поверх любого другого. Т.е. это допустимая комбинация, не приводящая к ошибке ECC. Все остальные "дозаписи" приводят к ошибке ECC и поэтому аппаратно запрещены.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если мне не изменяет память, то (да, не F105) у L162 очищеная Flash - 00H. Навряд ли будет отличаться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

исправляющий код к этому числу тоже равен нулю и может быть записан поверх любого предыдущего

Код ECC должен защищать блок размером побольше, чем 2 байта, иначе смысла нет. Не существует такой код ECC, у которого при обнулении любого 16-битного слова в коде биты только сбрасываются и не устанавливаются. Так что не получится.

Если же имеется в виду контрольная сумма, то это другое. ECC - error correcting code - код, исправляющий ошибки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот что написано в datasheet Reference manual на упомянутый выше STM32L0x1

ECC (Error Correction Code): 6 bits stored for every word to recognize and correct just one error

Круто, исправляет одиночную ошибку в слове!

Похоже, ECC есть в МК с EEPROM памятью. Флэш тоже корректируется, а то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Код ECC должен защищать блок размером побольше, чем 2 байта, иначе смысла нет.
Почему смысла нет?

Не существует такой код ECC, у которого при обнулении любого 16-битного слова в коде биты только сбрасываются и не устанавливаются. Так что не получится.
Недопонял. У БЧХ нулевое слово дает нулевые проверочные биты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему смысла нет?

С точки зрения расхода памяти эффективнее защищать более крупные блоки.

Хотя, как отметил ViKo, у STM32L0x1 ECC защищает 32-битные слова, так что я был неправ.

 

Недопонял. У БЧХ нулевое слово дает нулевые проверочные биты.

Имелся в виду случай, когда размер защищённого блока больше, чем гранулярность операции записи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а нельзя писать в 2 разных слова ? [CENSORED], или 2 байт жалко ?

Изменено пользователем IgorKossak

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а нельзя писать в 2 разных слова ? [CENSORED], или 2 байт жалко ?

Прочитайте, пожалуйста, вторую строку самого первого сообщения.

Оттуда вполне очевидно следует: НЕТ, НЕЛЬЗЯ, censored.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...