Andrey514 0 12 марта, 2012 Опубликовано 12 марта, 2012 · Жалоба Доброго времени суток всем! Вопрос, думаю понятен из темы. В качестве примера взял образец кода из библиотеки версии "STM32F10x_StdPeriph_Lib_V3.5.0". Проц STM32F103T8 тактируется от внешнего кварца. Нужно записать защиту в Option-байты. Опытным путем установил,при попытке записи в регистр OB->RDP процессор зависает. /* Restore the last read protection Option Byte value */ OB->RDP = (uint16_t)rdptmp; У кого какие мысли по этому поводу? asd.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sagittarius 0 12 марта, 2012 Опубликовано 12 марта, 2012 (изменено) · Жалоба Проц STM32F103T8 тактируется от внешнего кварца. Нужно записать защиту в Option-байты. Опытным путем установил,при попытке записи в регистр OB->RDP процессор зависает. У кого какие мысли по этому поводу? код, который производит запись расположен в ОЗУ? прерывания запрещены? запись в option key register разрешена (FLASH_OPTKEYR и т.д.) ? Изменено 12 марта, 2012 пользователем Sagittarius Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 12 марта, 2012 Опубликовано 12 марта, 2012 · Жалоба Код расположен во FLASH прерывания запрещены запись в option_key register разрешена (проверял). Единственное, что неверно указал, тактируется процессор от HSI еще до инициализации HSE и PLL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sagittarius 0 12 марта, 2012 Опубликовано 12 марта, 2012 · Жалоба Код расположен во FLASH на сколько понимаю (оптион не писал, писал только основную флеш) на время записи контроллер флеша блокируется, и проц не может читать дальнейшие команды. Функция, которая пишет во флеш должна быть в ОЗУ. Для IAR достаточно приписать __ramfunc при объявлении функции и он сам запихнет ее в ОЗУ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 12 марта, 2012 Опубликовано 12 марта, 2012 · Жалоба В этой программе присутствует и запись в основную флеш. При этом, код расположен также во флеши. Все работает прекрасно, не глючит. :laughing: Там странная команда присутствует: OB->RDP = (uint16_t)rdptmp; При выполнении этой команды вся флеш стирается... В переменной rdptmp находится число 0xA5. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sagittarius 0 12 марта, 2012 Опубликовано 12 марта, 2012 · Жалоба В этой программе присутствует и запись в основную флеш. При этом, код расположен также во флеши. Все работает прекрасно, не глючит. :laughing: Там странная команда присутствует: При выполнении этой команды вся флеш стирается... В переменной rdptmp находится число 0xA5. странно это http://www.st.com/internet/com/TECHNICAL_R.../CD00283419.pdf Flash Programming Manual на STM32F1xxx, страница 10 During a write operation to the Flash memory, any attempt to read the Flash memory will stall the bus. The read operation will proceed correctly once the write operation has completed. This means that code or data fetches cannot be made while a write/erase operation is ongoing. если посмотреть отладчиком то где будет выполняемый код по записи в основную флеш? Если все в IAR то какой это проект в примерах? интересно было бы глянуть что там и как работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 12 марта, 2012 Опубликовано 12 марта, 2012 · Жалоба Если ходить отладчиком, то отладчик "отваливается" в месте, где уже указывал. После этого флеш становится недоступной по чтению. Мне приходится снимать это сторонним программатором, т.е. разрешать ститывание флеши. Пример находится в любой библиотеке от ST, например: ...\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\FLASH\Write_Protection\main.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alfa 0 13 марта, 2012 Опубликовано 13 марта, 2012 · Жалоба to AndreyKeil Затирание всей флеши происходит при попытке снять биты защиты от чтения... Может здесь собака порылась? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 13 марта, 2012 Опубликовано 13 марта, 2012 · Жалоба to AndreyKeil Затирание всей флеши происходит при попытке снять биты защиты от чтения... Может здесь собака порылась? Совершенно верно. Затирание флеша и происходит. Но именно этот код представлен в примерах от ST. Пробовал закомментировать эту команду. Тогда подвисание происходит уже в процедуре FLASH_EnableWriteProtection(ProtectedPages) в месте: OB->WRP0 = WRP0_Data; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alfa 0 13 марта, 2012 Опубликовано 13 марта, 2012 · Жалоба Совершенно верно. Затирание флеша и происходит. Но именно этот код представлен в примерах от ST. Пробовал закомментировать эту команду. Тогда подвисание происходит уже в процедуре FLASH_EnableWriteProtection(ProtectedPages) в месте: OB->WRP0 = WRP0_Data; Про залочку-разлочку почитайте PM0075 STM32F10xxx Flash memory microcontrollers... Для разлочки там предлагается два варианта. Один со стиранием флеша, другой - без..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 13 марта, 2012 Опубликовано 13 марта, 2012 · Жалоба В №9 посте писал, что пробовал без стирания флеша. Тогда проц подвисает(или неизвестно что с ним происходит) при попытке записи в OPTION-байт. Запись, при этом, разрешена: бит OPTWRE взведен, бит OPTPG взведен, бит LOCK снят, все в регистре FLASH_CR Прошелся отладчиком ST-LINK, в результате, по записи в OPTION байт, уходит в HARD_FAULT Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться