Изучаем основы защиты кода на микроконтроллерах STM32f103.

Страница на этапе разработки

В данном уроке мы рассмотрим возможности защиты нашего кода в микроконтроллере STM32F1xx.

Для активации защиты от считывания необходимо установить байт опций RDP, а после перезагрузить микроконтроллер.

После установки защитного байта мы получаем:

  1.  Основной доступ к памяти для чтения флэш-памяти не допускается, за исключением кода пользователя (при загрузке основной флэш-памяти с отключенным режимом отладки).
  2.  Все функции, связанные с загрузкой кода и выполнением кода из встроенного SRAM, по-прежнему активны (JTAG / SWD и загрузка из встроенного SRAM), и это дает нам возможность для отключения защиты чтения. Когда байт опции защиты чтения изменяется на значение защиты памяти, выполняется полное стирание памяти.
  3.  Доступ к основной флэш-памяти через код, выполняемый с SRAM или FSMC, а так же доступ к Flash через чтение данных с использованием DMA1, DMA2, JTAG, SWV, SWD, ETM и сканирование границ не допускаются.

****??

Состояние защиты от флэш-памяти:

 

Значение байта RDPЗначение дополнения RDPСостояние защиты чтения
0xFF0xFFзащищенный
RDPRTДополнение байт RDPНе защищен
Любое значениеНе значение дополнения RDPзащищенный

 

Прим.: Удаление байта опции не приведет к стиранию массы, поскольку стертое значение (0xFF) соответствует защищенному значению.

???***

Что бы отключить защиту чтения от встроенной SRAM:

  1. Удалите всю область байта опций. В результате код защиты чтения (RDP) будет равен 0xFF. 
  2. Запрограммируйте правильный код RDP 0x00A5 для снятия защиты с памяти. При этом данные памяти будут стерты.
  3. Сбросьте устройство, для того, что бы перезагрузить байты опций и отключить защиту чтения.

**********************************************

1.2 Защита от записи:

В высокой плотности и устройств подключения линии, начиная со страницы 0 до 61, защита от записи осуществляется с зернистостью двух страниц одновременно. Оставшийся блок памяти (со страницы 62 на стр. 255 в устройствах с высокой плотностью и со стр. 62 на стр. 127 в устройствах линии связи) сразу защищен от записи.

В устройствах с низкой и средней плотностью защита от записи реализуется с гранулярностью по четыре страницы за раз.

Если на защищенной странице выполняется программа или операция стирания, флэш-память возвращает флаг ошибки защиты в регистре состояния флэш-памяти (FLASH_SR).

Защита записи активируется путем настройки байтов опции WRP [3:0], а затем применяя системный сброс для перезагрузки новых байтов опций WRPx.

Снятие защиты:

Чтобы отключить защиту от записи, предусмотрены два случая применения:

● Случай 1: защита чтения отключена после защиты от записи:

– Удалите всю область байтов опций, используя бит OPTER во флэш-памяти контрольный регистр (FLASH_CR)

– Запрограммируйте правильный код RDP 0x00A5 для снятия защиты с памяти. Эта операция сначала сделает общий сброс основной флэш-памяти.

– Сбросьте устройство (сброс системы), чтобы перезагрузить байты опций (и новый WRP [3:0] байт) и отключить защиту от записи

● Случай 2: защита чтения поддерживается активной после защиты от записи, полезная для программирования приложений с помощью пользовательского загрузчика:

– Удалите всю область байтов опций, используя бит OPTER во флэш-памяти контрольный регистр (FLASH_CR)

– Сбросьте устройство (сброс системы), чтобы перезагрузить байты опций (и новый WRP [3:0] байт) и отключить защиту от записи.

 

1.3 Опция защиты от записи блока:

Байты опций всегда доступны для чтения и защищаются от записи по умолчанию. Для того, чтобы получить доступ на запись (Программа / Erase) для опционных байтов, последовательность ключей (такой же, как для блокировки) должен быть записан в OPTKEYR. Правильная последовательность ключей дает доступ на запись к байтам опций, и это указывается OPTWRE в установленном регистре FLASH_CR. Доступ к записи может быть отключен путем сброса бит через программное обеспечение.

 

2 Описание байта опций:

Существует восемь опциональных байтов. Они настраиваются конечным пользователем в зависимости от требований приложения. В качестве примера конфигурации сторожевой таймер может быть выбран в аппаратном или программном режиме.

32-битное слово разделяется следующим образом в байтах опций.

Формат байта опций:

 

31-2423-1615-87-0
дополненный байт 1байт опций 1дополненный байт 0байт опций 0

 

Организация этих байтов внутри информационного блока приведена в следующей таблице.

Байты опций могут быть считаны из мест памяти, перечисленных в следующей таблице, или из регистра байта Option (FLASH_OBR).

Прим.: Новые запрограммированные байты опций (пользователь, защита чтения / записи) загружаются после сброса системы.

Организация байт опций:

 

Address[31:24][23:16][15:8][7:0]
0x1FFF F800nUSERUSERnRDPRDP
0x1FFF F804nData1Data1nData0Data0
0x1FFF F808nWRP1WRP1nWRP0WRP0
0x1FFF F80CnWRP3WRP3nWRP2WRP2

 

 

3 Уникальный идентификатор устройства (96 бит):

Уникальный идентификатор устройства идеально подходит:

● для использования в качестве серийных номеров (например, серийные номера USB-шнуров или другие конечные приложения)

● для использования в качестве ключей безопасности для повышения безопасности кода во флэш-памяти при использовании и объединении этого уникального идентификатора с программными криптографическими примитивами и протоколами перед программированием внутренней флэш-памяти

● активировать безопасные процессы загрузки и т. д.

96-битный уникальный идентификатор устройства предоставляет ссылочный номер, который уникален для любого устройства и в любом контексте. Эти биты никогда не могут быть изменены пользователем. 96-битный уникальный идентификатор устройства также может быть прочитан в отдельных байтах / словах / словах по-разному, а затем конкатенирован с использованием пользовательского алгоритма.

Базовый адрес: 0x1FFF F7E8