Bass 0 8 июля, 2014 Опубликовано 8 июля, 2014 · Жалоба Доброго времени суток. Наткнулся на такую проблему в 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. Если кто-нибудь сталкивался с подобным поведением МК, то подскажите куда копать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 8 июля, 2014 Опубликовано 8 июля, 2014 · Жалоба Не сталкивался, но совсем глупый вопрос - а ту ли страницу вы стираете? Возможно стираете одну, а смотрите другую... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 8 июля, 2014 Опубликовано 8 июля, 2014 · Жалоба Не сталкивался, но совсем глупый вопрос - а ту ли страницу вы стираете? Возможно стираете одну, а смотрите другую... +1 иногда бывает используют стандартный пример и передают ему реальный адрес, а не ID страницы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bass 0 8 июля, 2014 Опубликовано 8 июля, 2014 (изменено) · Жалоба Не сталкивался, но совсем глупый вопрос - а ту ли страницу вы стираете? Возможно стираете одну, а смотрите другую... Адрес 0x08001000, куда записывается 0x00000000 вижу в дебаге (J-TAG). Проверяю результат по этому же адресу. Стандартную библиотеку не использую. Изменено 8 июля, 2014 пользователем Bass Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bass 0 8 июля, 2014 Опубликовано 8 июля, 2014 · Жалоба Разобрался с ситуацией. Оказывается в STM32L данные во flash после стирания имеют значение 0x00 (хотя я всегда думал, что стертая flash это 0xff). Соответственно после стирания я наблюдал нули в памяти и думал, что ничего не стерлось. По аналогии запись во flash с 0 в 1 осуществляется без стирания. В документации нигде не увидел упоминания о том, что после стирания во flash должны быть нули. Если кто-то видел, сообщите пожалуйста где об этом можно прочитать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться