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

Flash в STM32L151

Доброго времени суток.

Наткнулся на такую проблему в STM32L151: при попытке стирания страницы Flash операция проходит без ошибок, но память не стирается.

Операция выполняется согласно алгоритму, описанному в Reference Manual'е "Flash program memory and data EEPROM (FLASH)" (стр.63)

1. Разблокировка регистра PECR

2. Разблокировка записи во флэш

3. Установка бита ERASE в регистре PECR

4. Установка бита PROG в регистре PECR

5. Ожидание сброса бита BSY в регистре SR

6. Запись 0x00000000 в первые 4 байта страницы (0x08001000)

7. Ожидание сброса бита BSY в регистре SR

8. Сброс бита PROG в регистре PECR

9. Сброс бита ERASE в регистре PECR

10. Блокировка регистра PECR

Данная процедура проходит без ошибок (флаги ошибок сброшены, EOP = 1), но страница не стирается. Код функции стирания расположен в RAM.

Если кто-нибудь сталкивался с подобным поведением МК, то подскажите куда копать.

 

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


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

Не сталкивался, но совсем глупый вопрос - а ту ли страницу вы стираете? Возможно стираете одну, а смотрите другую...

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


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

Не сталкивался, но совсем глупый вопрос - а ту ли страницу вы стираете? Возможно стираете одну, а смотрите другую...

 

+1

иногда бывает используют стандартный пример и передают ему реальный адрес, а не ID страницы...

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


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

Не сталкивался, но совсем глупый вопрос - а ту ли страницу вы стираете? Возможно стираете одну, а смотрите другую...

Адрес 0x08001000, куда записывается 0x00000000 вижу в дебаге (J-TAG). Проверяю результат по этому же адресу.

Стандартную библиотеку не использую.

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

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


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

Разобрался с ситуацией. Оказывается в STM32L данные во flash после стирания имеют значение 0x00 (хотя я всегда думал, что стертая flash это 0xff).

Соответственно после стирания я наблюдал нули в памяти и думал, что ничего не стерлось. По аналогии запись во flash с 0 в 1 осуществляется без стирания.

В документации нигде не увидел упоминания о том, что после стирания во flash должны быть нули. Если кто-то видел, сообщите пожалуйста где об этом можно прочитать.

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


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

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

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

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

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

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

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

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

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

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