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

 
 
 
Reply to this topicStart new topic
> Защита Flash из программы, Как защитить Flash прямо в коде программы?
AndreyKeil
сообщение Mar 12 2012, 12:59
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



Доброго времени суток всем!
Вопрос, думаю понятен из темы. В качестве примера взял образец кода из библиотеки версии "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 ( 1.8 килобайт ) Кол-во скачиваний: 22
 
Go to the top of the page
 
+Quote Post
Sagittarius
сообщение Mar 12 2012, 17:48
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659



Цитата(AndreyKeil @ Mar 12 2012, 15:59) *
Проц STM32F103T8 тактируется от внешнего кварца. Нужно записать защиту в Option-байты. Опытным путем установил,при попытке записи в регистр OB->RDP процессор зависает. У кого какие мысли по этому поводу?

код, который производит запись расположен в ОЗУ?
прерывания запрещены?
запись в option key register разрешена (FLASH_OPTKEYR и т.д.) ?


Сообщение отредактировал Sagittarius - Mar 12 2012, 17:51
Go to the top of the page
 
+Quote Post
AndreyKeil
сообщение Mar 12 2012, 18:29
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



Код расположен во FLASH
прерывания запрещены
запись в option_key register разрешена (проверял).
Единственное, что неверно указал, тактируется процессор от HSI еще до инициализации HSE и PLL.
Go to the top of the page
 
+Quote Post
Sagittarius
сообщение Mar 12 2012, 18:58
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659



Цитата(AndreyKeil @ Mar 12 2012, 21:29) *
Код расположен во FLASH

на сколько понимаю (оптион не писал, писал только основную флеш) на время записи контроллер флеша блокируется, и проц не может читать дальнейшие команды. Функция, которая пишет во флеш должна быть в ОЗУ. Для IAR достаточно приписать __ramfunc при объявлении функции и он сам запихнет ее в ОЗУ.
Go to the top of the page
 
+Quote Post
AndreyKeil
сообщение Mar 12 2012, 19:08
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



В этой программе присутствует и запись в основную флеш. При этом, код расположен также во флеши. Все работает прекрасно, не глючит. laughing.gif
Там странная команда присутствует:
Цитата
OB->RDP = (uint16_t)rdptmp;

При выполнении этой команды вся флеш стирается... wacko.gif
В переменной rdptmp находится число 0xA5.
Go to the top of the page
 
+Quote Post
Sagittarius
сообщение Mar 12 2012, 19:43
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659



Цитата(AndreyKeil @ Mar 12 2012, 22:08) *
В этой программе присутствует и запись в основную флеш. При этом, код расположен также во флеши. Все работает прекрасно, не глючит. laughing.gif
Там странная команда присутствует:

При выполнении этой команды вся флеш стирается... wacko.gif
В переменной 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 то какой это проект в примерах? интересно было бы глянуть что там и как работает.

Go to the top of the page
 
+Quote Post
AndreyKeil
сообщение Mar 12 2012, 20:01
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



Если ходить отладчиком, то отладчик "отваливается" в месте, где уже указывал. После этого флеш становится недоступной по чтению. Мне приходится снимать это сторонним программатором, т.е. разрешать ститывание флеши.

Пример находится в любой библиотеке от ST, например: ...\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\FLASH\Write_Protection\main.c
Go to the top of the page
 
+Quote Post
Alfa
сообщение Mar 13 2012, 02:46
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 9-02-06
Из: Челябинск
Пользователь №: 14 160



to AndreyKeil

Затирание всей флеши происходит при попытке снять биты защиты от чтения... Может здесь собака порылась?

Go to the top of the page
 
+Quote Post
AndreyKeil
сообщение Mar 13 2012, 03:22
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



Цитата(Alfa @ Mar 13 2012, 07:46) *
to AndreyKeil

Затирание всей флеши происходит при попытке снять биты защиты от чтения... Может здесь собака порылась?

Совершенно верно. Затирание флеша и происходит. Но именно этот код представлен в примерах от ST.
Пробовал закомментировать эту команду. Тогда подвисание происходит уже в процедуре
Код
FLASH_EnableWriteProtection(ProtectedPages)

в месте:
Код
OB->WRP0 = WRP0_Data;
Go to the top of the page
 
+Quote Post
Alfa
сообщение Mar 13 2012, 03:53
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 9-02-06
Из: Челябинск
Пользователь №: 14 160



Цитата(AndreyKeil @ Mar 13 2012, 09:22) *
Совершенно верно. Затирание флеша и происходит. Но именно этот код представлен в примерах от ST.
Пробовал закомментировать эту команду. Тогда подвисание происходит уже в процедуре
Код
FLASH_EnableWriteProtection(ProtectedPages)

в месте:
Код
OB->WRP0 = WRP0_Data;


Про залочку-разлочку почитайте PM0075 STM32F10xxx Flash memory microcontrollers...

Для разлочки там предлагается два варианта. Один со стиранием флеша, другой - без.....
Go to the top of the page
 
+Quote Post
AndreyKeil
сообщение Mar 13 2012, 04:39
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



В №9 посте писал, что пробовал без стирания флеша. Тогда проц подвисает(или неизвестно что с ним происходит) при попытке записи в OPTION-байт. Запись, при этом, разрешена: бит OPTWRE взведен, бит OPTPG взведен, бит LOCK снят, все в регистре FLASH_CR
Прошелся отладчиком ST-LINK, в результате, по записи в OPTION байт, уходит в HARD_FAULT
Go to the top of the page
 
+Quote Post

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

 


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


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