реклама на сайте
подробности

 
 
> Flash в STM32L151
Bass
сообщение Jul 8 2014, 04:13
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 66
Регистрация: 5-08-10
Из: Томск
Пользователь №: 58 761



Доброго времени суток.
Наткнулся на такую проблему в 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.
Если кто-нибудь сталкивался с подобным поведением МК, то подскажите куда копать.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
Сергей Борщ
сообщение Jul 8 2014, 05:44
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jul 8 2014, 06:13
Сообщение #3


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Сергей Борщ @ Jul 8 2014, 09:44) *
Не сталкивался, но совсем глупый вопрос - а ту ли страницу вы стираете? Возможно стираете одну, а смотрите другую...


+1
иногда бывает используют стандартный пример и передают ему реальный адрес, а не ID страницы...
Go to the top of the page
 
+Quote Post
Bass
сообщение Jul 8 2014, 06:37
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 66
Регистрация: 5-08-10
Из: Томск
Пользователь №: 58 761



Цитата(Сергей Борщ @ Jul 8 2014, 12:44) *
Не сталкивался, но совсем глупый вопрос - а ту ли страницу вы стираете? Возможно стираете одну, а смотрите другую...

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

Сообщение отредактировал Bass - Jul 8 2014, 06:37
Go to the top of the page
 
+Quote Post
Bass
сообщение Jul 8 2014, 08:27
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 66
Регистрация: 5-08-10
Из: Томск
Пользователь №: 58 761



Разобрался с ситуацией. Оказывается в STM32L данные во flash после стирания имеют значение 0x00 (хотя я всегда думал, что стертая flash это 0xff).
Соответственно после стирания я наблюдал нули в памяти и думал, что ничего не стерлось. По аналогии запись во flash с 0 в 1 осуществляется без стирания.
В документации нигде не увидел упоминания о том, что после стирания во flash должны быть нули. Если кто-то видел, сообщите пожалуйста где об этом можно прочитать.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 21:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.0137 секунд с 7
ELECTRONIX ©2004-2016