21.05.2013, 11:02
|
|
Прописка
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Защита Flash STM32 от копирования
Здравствуйте.
Как реализовать защиту от копирования флеш на STM32 ?
|
|
|
|
21.05.2013, 12:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Защита Flash STM32 от копирования
Запускаешь STM32 ST-LINK Utility и в Option Bytes активируешь Read Out Protection
Чтобы потом перепрошить залоченный чип, вначале здесь же снимаешь эту защиту, и чип автоматом очистится
|
|
|
Эти 3 пользователя(ей) сказали Спасибо niXto за это сообщение:
|
|
|
28.07.2014, 10:20
|
|
Прописка
Регистрация: 29.06.2010
Сообщений: 104
Сказал спасибо: 14
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Защита Flash STM32 от копирования
Сохранял нужные данные в последней странице! после установки защиты утилитой STM32 ST-LINK Utility сохранение работать перестало! Я считал что внутри программы это возможно! После того как убрал галки с моей страницы все заработало! Так и должно быть? растолкуйте!
|
|
|
|
28.07.2014, 11:41
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Защита Flash STM32 от копирования
Как программно защитить я так и не разобрался.
|
|
|
|
28.07.2014, 12:18
|
|
Прописка
Регистрация: 29.06.2010
Сообщений: 104
Сказал спасибо: 14
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Защита Flash STM32 от копирования
И еще такой затык на F103C6 при попытке сохранения нужных параметров во флеш!
код такой:
void mainFL(void)//стирание и запись 1 страницы флеш
{
// Разблокировка FLASH
FLASH-›KEYR = FLASH_KEY1;
FLASH-›KEYR = FLASH_KEY2;
//Стирание одной страницы во FLASH
while((FLASH-›SR&FLASH_SR_BSY));//ждем когда можно стирать или писать память.
FLASH-›CR |= FLASH_CR_PER; //Устанавливаем бит стирания одной страницы
FLASH-›AR = Page_31_0; // Задаем адрес страницы
FLASH-›CR |= FLASH_CR_STRT; // Запускаем стирание
while((FLASH-›SR&FLASH_SR_BSY)); //Ждем пока страница сотрется.
FLASH-›CR &= ~FLASH_CR_PER; //Сбрасываем бит стирания одной страницы обратно
FLASH-›CR |= FLASH_CR_PG; //Разрешаем программирование FLASH
while((FLASH-›SR&FLASH_SR_BSY));
*(__IO uint16_t*)(Page_31_0 ) = nomer_avto_sot_tmp;
while((FLASH-›SR&FLASH_SR_BSY));
*(__IO uint16_t*)(Page_31_1 ) = nomer_avto_des_tmp;
while((FLASH-›SR&FLASH_SR_BSY));
*(__IO uint16_t*)(Page_31_2 ) = nomer_avto_ede_tmp;
while((FLASH-›SR&FLASH_SR_BSY));
FLASH-›CR &= ~FLASH_CR_PG;//Запрещаем программирование FLASH
FLASH-›CR |= FLASH_CR_LOCK;//Блокировка FLASH
}
При чем при отладке все работает ОК! Без отладки балалайка, проходит только стирание записи нет!
перемещая точку останова определил что FLASH-›CR &= ~FLASH_CR_PER; не сбрасывает или не успевает сбрасывать бит
попытался поставить небольшую паузу не помогло! тогда прописал эту строчку дважды! и о чудо все заработало!
С чем это может быть связано? растолкуйте кто в курсе! А сперва ведь работало, даже не успел заметить когда перестало!
|
|
|
|
28.07.2014, 15:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Защита Flash STM32 от копирования
Записывай в регистр константу и всё будет работать без чудес
У меня всё сразу заработало
Программно тоже всё элементарно работает... Без СПЛ естественно
|
|
|
|
28.07.2014, 16:10
|
|
Прописка
Регистрация: 29.06.2010
Сообщений: 104
Сказал спасибо: 14
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Защита Flash STM32 от копирования
В регистр FLASH-›CR ?
|
|
|
|
28.07.2014, 16:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Защита Flash STM32 от копирования
Да
Я вообще во все регистры пишу константы а у ф1 и старше некоторые биты изменяю битбандингом... Потому что многие регистры по своей сути - volatile, и за время чтения-модификации-записи некоторые другие биты регистра успевают аппаратно измениться... Не сразу конечно - раз в сутки или неделю, и от этого ловля глюка становится вообще увлекательной
|
|
|
|
28.07.2014, 16:29
|
|
Прописка
Регистрация: 29.06.2010
Сообщений: 104
Сказал спасибо: 14
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Защита Flash STM32 от копирования
Cделал так FLASH-›CR = 0x00;
В отладчике работает, без не работает
прописал дважды FLASH-›CR = 0x00;
FLASH-›CR = 0x00;
не работает!
вернул двойную запись
FLASH-›CR &= ~FLASH_CR_PER;
FLASH-›CR &= ~FLASH_CR_PER;
Все начинает работать! полтергейст какой то!
|
|
|
|
28.07.2014, 18:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Защита Flash STM32 от копирования
A page of the Flash memory can be erased using the Page Erase feature of the FPEC. To
erase a page, the procedure below should be followed:
● Check that no Flash memory operation is ongoing by checking the BSY bit in the
FLASH_CR register
● Set the PER bit in the FLASH_CR register
● Program the FLASH_AR register to select a page to erase
● Set the STRT bit in the FLASH_CR register
● Wait for the BSY bit to be reset
● Read the erased page and verify
И попробуй писать 0x0000
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:00.
|
|