Работаем с микроконтроллерами STM32F7. Часть 2. Память и функции безопасности

Данная серия публикаций основана на материалах цикла STM32F7 Online Training от компании STMicroelectronics. В статьях представлено описание функциональных блоков и инструментов разработки для семейства микроконтроллеров STM32F7. Логически материал разбит на 4 главы, охватывающие тематику системной периферии, памяти, безопасности, аналоговой периферии, цифровой периферии, таймеров, экосистемы. Главы не связаны между собой, и читатель может ознакомиться с ними в произвольном порядке.

Подписаться на получение уведомлений о публикациях по микроконтроллерам ARM.

Встроенная Flash-память

Микроконтроллеры STM32F7 имеют до 2 Мбайт встроенной Flash-памяти. Интерфейс с Flash поддерживает все виды операций: чтение, запись, стирание. Он также позволяет выполнять защиту памяти от чтения/записи с помощью опциональных конфигурационных битов. Интерфейс с Flash в STM32F7 обеспечивает высокую производительность и малое потребление.

Для взаимодействия с Flash в STM32F7 используется три шины (рисунок 22):

  • 64-битная шина ITCM;
  • 64-битный шина AXI/AHB;
  • 32-битная шина AHB для работы с регистрами управления Flash.

Рис. 22. Интерфейс с Flash в STM32F7

Рис. 22. Интерфейс с Flash в STM32F7

Интерфейс ITCM используется для подключения памяти к процессорному ядру Cortex-M7. С помощью шины ITCM процессор может считывать данные и команды из Flash, однако запись во Flash через ITCM невозможна.

Полный доступ к Flash с возможностью чтения и записи осуществляется посредством 64-битной шины AXI/AHB. Эта шина используется для взаимодействия Flash с процессором и другими ведущими устройствами, в том числе DMA.

Для программирования регистров управления и опциональных байтов, а также чтения регистров состояния Flash используется 32-битная шина AHB.

Flash в STM32F7 состоит из двух функциональных частей: основной Flash-памяти и информационного блока. Основная Flash содержит данные и программы пользователя. Информационный блок состоит из трех частей:

  • системной памяти объемом 60 кбайт, в которой хранится загрузчик;
  • блока однократно программируемой памяти (OTP) объемом 1 кбайт;
  • блока опциональных битов, которые необходимы для конфигурации системы.

Основная Flash может быть организована в виде одного или двух банков памяти. Для организации одного банка необходимо установить опциональный бит nDBANK = 1. И наоборот, если nDBANK = 0, то память будет разбита на два банка. Пример логического разбиения памяти 2 Мбайт с одним банком Bank1 представлен на рисунке 23. В данном случае сектора с 0 по 3 имеют объем 32 кбайт, сектор 4 имеет объем 128 кбайт, сектора с 5 по 11 имеют объем 256 кбайт. Номера секторов используются при выполнении программных процедур, в частности – при стирании секторов или при защите их от записи.

Рис. 23. Логическая организация 2 Мбайт Flash с одним банком (nDBANK = 1)

Рис. 23. Логическая организация 2 Мбайт Flash с одним банком (nDBANK = 1)

При логическом разбиении Flash на два банка (Bank1 и Bank2) каждый получает равное количество секторов – по 12 (рисунок 24). К первому относятся сектора с номерами с 0 по 11, а ко второму сектора с номерами с 12 по 23.

Рис. 24. Логическая организация 2 Мбайт Flash с двумя банками (nDBANK = 0)

Рис. 24. Логическая организация 2 Мбайт Flash с двумя банками (nDBANK = 0)

Микроконтроллеры STM32F76x/77x с Flash объемом 1 Мбайт также могут использовать разбиение памяти на два банка (рисунок 25).

Рис. 25. Логическая организация 1 Мбайт Flash с двумя банками (nDBANK = 0)

Рис. 25. Логическая организация 1 Мбайт Flash с двумя банками (nDBANK = 0)

При использовании режима с двумя банками памяти (nDBANK = 0) открывается доступ к дополнительной функции Dual Boot mode. Управление этой функцией производится с помощью опционального бита nDBOOT. Если nDBOOT = 1 функция не активна и загрузка микроконтроллера производится в соответствии с адресом, записанным в регистре BOOT_ADDx[15:0] (раздел «Системный контролер SYSCFG» из предыдущей части). Если nDBOOT = 0, то загрузка происходит из системной памяти с дальнейшим выполнением необходимых операций по переадресации памяти. Подробнее о функции Dual Boot mode рассказывается в руководстве “AN2606 Application note STM32 microcontroller system memory boot mode”.

Еще одной полезной функцией при использовании двух банков памяти становится read-while-write. Эта функция позволяет обращаться к двум банкам одновременно. Например, при чтении инструкций или данных из Bank1 пользователь может параллельно выполнять программирование Bank2, и наоборот.

Бит SWP_FB регистра SYSCFG_MEMRMP позволяет изменить адресацию Flash и поменять местами Bank1 и Bank2. Если SWP_FB = 0, то адресация Bank1 начинается с 0x0800 0000, а адресация Bank2 с 0x0810 0000 (рисунок 26). Если же SWP_FB = 1, то банки меняются местами: адресация Bank1 начинается с 0x0810 0000, а адресация Bank2 – с 0x0800 0000.

Рис. 26. Назначение адресации Flash с помощью бита SWP_FB

Рис. 26. Назначение адресации Flash с помощью бита SWP_FB

Программирование Flash в STM32F7 может производиться байтами (8 бит), полусловами (16 бит), словами (32 бита) и удвоенными словами (64 бита). Однако при выборе разрядности следует учитывать ограничения, накладываемые на диапазон питающего напряжения VDD (таблица 2).

Таблица 2. Требования к питанию при программировании Flash

Питание Разрядность
64 бита 32 бита 16 бит 8 бит
VDD 2,7…3,6 В 2,7…3,6 В 2,1…2,7 В 1,8…2,1 В
VPP 8…9 В, 10 мА Не требуется Не требуется Не требуется

Если применяется побайтовое программирование Flash, то может использоваться полный диапазон рабочих напряжений 1,8…3,6 В. Если же требуется программирование Flash с разрядностью данных 32 бита (слово), то напряжение питания должно быть не менее 2,7 В. Для обеспечения максимальной скорости записи возможно использование разрядности 64 бит, однако это потребует дополнительного внешнего источника питания, подключаемого к выводу VPP. Напряжение VPP должно быть в диапазоне 8…9 В, а выходной ток – не менее 10 мА. Важно подчеркнуть, что ST советует не злоупотреблять использованием VPP. Более того, время приложения этого напряжения ни при каких условиях не должно превышать часа, в противном случае высока вероятность повреждения Flash.

Стирание Flash производится либо секторами, либо целиком. Для STM32F76x/77x возможно отдельное стирание банков (Bank1 и Bank2), но при условии активации соответствующего режима разделения Flash.

Чтение из Flash оказывается относительно медленной операцией. Чтобы согласовать процесс чтения и выполнение кода, требуется введение циклов ожидания (wait state, WS). Количество циклов ожидания зависит от тактовой частоты и рабочего напряжения (таблица 3).

Таблица 3. Соотношение таковой частоты и числа циклов ожидания при чтении из Flash

Количество циклов ожидания, WS HCLK, МГц
VDD = 2,7…3,6 В VDD = 2,4…2,7 В VDD = 2,1…2,4 В VDD = 1,8…2,1 В
0 WS (1 такт) 0 < HCLK ≤ 30 0 < HCLK ≤ 24 0 < HCLK ≤ 22 0 < HCLK ≤ 20
1 WS (2 такта) 30 < HCLK ≤ 60 24 < HCLK ≤ 48 22 < HCLK ≤ 44 20 < HCLK ≤ 40
2 WS (3 такта) 60 < HCLK ≤ 90 48 < HCLK ≤ 72 44 < HCLK ≤ 66 40 < HCLK ≤ 60
3 WS (4 такта) 90 < HCLK ≤ 120 72 < HCLK ≤ 96 66 < HCLK ≤ 88 60 < HCLK ≤ 80
4 WS (5 тактов) 120 < HCLK ≤ 150 96 < HCLK ≤ 120 88 < HCLK ≤ 110 80 < HCLK ≤ 100
5 WS (6 тактов) 150 < HCLK ≤ 180 120 < HCLK ≤ 144 110 < HCLK ≤ 132 100 < HCLK ≤ 120
6 WS (7 тактов) 180 < HCLK ≤ 210 144 <HCLK ≤ 168 132 < HCLK ≤ 154 120 < HCLK ≤ 140
7 WS (8 тактов) 210 < HCLK ≤ 216 168 < HCLK ≤ 192 154 < HCLK ≤ 176 140 < HCLK ≤ 160
8 WS (9 тактов) 192 < HCLK ≤ 216 176 < HCLK ≤ 198 160 < HCLK ≤ 180
9 WS (10 тактов) 198 < HCLK ≤ 216

Как видно из таблицы 3, работа без циклов ожидания во всем диапазоне рабочих напряжений, начиная от 1,8 В, возможна только при тактовой частоте менее 20 МГц. При работе на частоте 216 МГц требуются как минимум семь циклов ожидания. Вместе с тем, благодаря ART-ускорителю и кэш-памяти L1, микроконтроллеры STM32F7 способны работать на максимальной частоте без задержек, связанных с циклами ожидания.
ART-ускоритель подключен напрямую к Flash и процессорному ядру. Он содержит 64 слота размером 128 или 256 байт в зависимости от настройки интерфейса памяти. Каждый раз при выполнении выборки процессорное ядро выполняет поиск необходимых данных во встроенных буферах (раздел «Процессорное ядро ARM Cortex-M7» из предыдущей части) и в ART-акселераторе. Если требуемые данные найдены, они сразу же поступают в процессор. Если необходимой информации не найдено, процессор считывает их напрямую из Flash. Параллельно с этим происходит заполнение ART-акселератора, если он ранее был активирован.
Благодаря ART-ускорителю и кэш-памяти производительность Flash практически линейно зависит от тактовой частоты. При тактовой частоте 216 МГц производительность микроконтроллеров STM32F7 достигает 1082 CoreMark.
Для настройки специальных функций микроконтроллера используются опциональные биты (таблица 4). Часть из них активируется сразу после записи, а часть начинает действовать только после выполнения сброса.

Таблица 4. Назначение опциональных битов в STM32F7

Название Разрядность, бит Назначение
RDP 8 Уровень защиты: Level0, Level1, Level2
nRST_STDBY 1 Разрешение сброса при выходе из режима Standby
nRST_STOP 1 Разрешение сброса при выходе из режима Stop
IWDG_SW 1 Выбор типа независимого сторожевого таймера: аппаратно независимый или программно независимый
WWDG_SW 1 Выбор типа оконного сторожевого таймера: аппаратный или программный
BOR_LEV 2 Задание пороговых значений BOR
IWDG_STOP 1 Разрешение работы IWDG в режиме Stop
IWDG_STDBY 1 Разрешение работы IWDG в режиме Standby
nDBANK 1 Активация разделения Flash на банки
nDBOOT 1 Активация функции Dual Boot Mode
nWRPi 12 Биты разрешения защиты секторов от записи
BOOT_ADD0 16 Адрес загрузчика при состоянии входа Boot = 0
BOOT_ADD1 16 Адрес загрузчика при состоянии входа Boot = 1

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

Биты RDP определяют три уровня защиты Flash от чтения: Level0, Level1, Level2. Level0 не подразумевает никаких ограничений при работе с памятью. Level1 обеспечивает защиту от чтения, что может создавать проблемы при отладке приложений. Level2 подразумевает активацию необратимой защиты чипа. После активации Level2 чип нельзя разблокировать даже в заводских условиях.

Биты nWRPi предназначены для индивидуальной защиты секторов от записи.

Flash может генерировать три вида прерываний:

  • End of Operation формируется после успешного выполнения программирования или очистки Flash;
  • Programming Error формируется при неудачной попытке программирования или очистки Flash;
  • Write Protection Error формируется при попытке записи в защищенную область или в область однократно программируемой памяти OTP.

Состояние Flash зависит от режима работы микроконтроллера:

  • Run – активное состояние Flash;
  • Sleep – активное состояние Flash, возможен переход в режим сна;
  • Stop – тактирование Flash отключено, состояние периферийных регистров сохраняется;
  • Standby – Flash находится в состоянии ожидания, после выполнения сброса необходимо заново инициализировать интерфейс Flash.

Для получения подробной информации о работе Flash следует обратиться к следующим источникам:

Контроллер внешней памяти FMC

Благодаря контроллеру внешней памяти FMC собственная встроенная память микроконтроллеров STM32F7 может быть расширена за счет микросхем внешней памяти NOR или NAND Flash, PSRAM, SDRAM или SRAM. Кроме того, FMC позволяет работать с большинством графических ЖК-контроллеров, использующих параллельные интерфейсы Intel 8080 или Motorola 6800. Таким образом, с помощью STM32F7 можно создавать бюджетные графические приложения.

Контроллер внешней памяти FMC объединяет три устройства:

  • контроллер NOR Flash/ PSRAM;
  • контроллер SDRAM;
  • контроллер памяти

В каждый момент времени FMC может обмениваться данными только с одной внешней микросхемой. Это выполняется с помощью сигналов выбора CS (Chip Select). Назначение линий управления зависит от типа памяти, а линии адреса и данных оказываются общими (рисунок 27).

Рис. 27. Линии управления, адреса и данных в FMC

Рис. 27. Линии управления, адреса и данных в FMC

При использовании FMC внешняя память разделяется на четыре банка, которые имеют общее адресное пространство. Под каждый банк выделено по 256 Мбайт (рисунок 28):

  • Bank 1 – NOR/PSRAM (4×64 Мбайт);
  • Bank 2 – SDRAM (после переадресации) (256 Мбайт);
  • Bank 3 – NAND Flash (256 Мбайт);
  • Bank 4 – резерв;
  • Bank 5 – SDRAM (256 Мбайт);
  • Bank 6 – SDRAM. (256 Мбайт);

Рис. 28. Адресация внешней памяти при использовании FMC

Рис. 28. Адресация внешней памяти при использовании FMC

У каждого банка есть свой собственный сигнал выбора CS. Параметры интерфейса с каждым из банков могут быть настроены индивидуально: тайминги, разрядность шины данных 8/16/32 бита, тип обмена (синхронный или асинхронный) и так далее. При работе с синхронной памятью рабочая частота достигает HCLK/2.

Bank1 используется для подключения памяти NOR/PSRAM и разделен на 4 подбанка, каждый из которых имеет объем 64 Мбайт и индивидуальный сигнал CS. Это сделано для подключения четырех независимых внешних микросхем памяти. Bank1 поддерживает работу со следующими типами памяти:

  • 8/16-битной синхронной или асинхронной NOR Flash в мультиплексном и не мультиплексном режиме;
  • 8/16-битной асинхронной SRAM/ROM;
  • 8/16-битной синхронной или асинхронной PSRAM.

Контроллер NOR/PSRAM позволяет настраивать различные временные параметры: длительность фазы установки адреса, время удержания адреса, длительность фазы установки данных, коэффициент деления тактового сигнала HCLK и прочее.

Bank 3 необходим для подключения NAND Flash и делится на две части: Common memory и Attribute memory. Оба этих сегмента одинаковы и включают: секцию данных (64 кбайт), секцию команд (64 кбайт), секцию адреса (128 кбайт). Тайминги при работе с секциями Common memory и Attribute memory настраиваются индивидуально. Common memory используется для выполнения всех операций записи и чтения, за исключением записи последнего адреса, в этом случае используется Attribute memory. За счет этого в некоторых случаях удается использовать различные тайминги и уйти от необходимости контроля вывода Ready/Busy.

Контроллер NAND Flash делит часть линий управления с контроллером NOR/PSRAM. При этом сигналы защелкивания команд (CLE) и адреса (ALE) управляются линиями адреса контроллера FMC (FMC_A[16:17]). ALE используется при записи в секцию адреса, а CLE – при записи в секцию команд.

Контроллер NAND Flash имеет несколько особенностей. Во-первых, он позволяет выполнять коррекцию ошибок (Error, Code Correction, ECC), благодаря специальному алгоритму, использующему код Хемминга. С помощью ECC можно исправлять 1-битные ошибки и обнаруживать 2-битные при записи/чтении блоков данных размером 256…8192 байт. Во-вторых, контроллер формирует три типа прерывания по сигналу Ready/Busy (от микросхемы памяти):

  • по фронту;
  • по срезу;
  • по заданному состоянию.

В-третьих, контроллер позволяет автоматически формировать интервалы ожидания готовности NAND Flash перед началом следующего цикла обмена.

Область памяти NAND Flash может быть защищена от записи с помощью блока MPU.

Bank 5 и Bank 6 используются для подключения двух внешних микросхем SDRAM объемом до 256 Мбайт каждая. Контроллер SDRAM имеет общие линии данных и адреса с контроллером NOR/PSRAM (рисунок 28). Для работы с SDRAM используются следующие сигналы:

  • SDCLK – тактовый сигнал;
  • SDCKE0 – разрешение тактирования первого банка SDRAM;
  • SDCKE1 – разрешение тактирования второго банка SDRAM ;
  • SDNE0 – сигнал выбора первого банка SDRAM;
  • SDNE1 – сигнал выбора второго банка SDRAM ;
  • NRAS – строб строки адреса;
  • NCAS – строб столбца адреса;
  • SDNWEN – разрешение записи.

Таким образом, FMC позволяет работать с двумя микросхемами памяти SDRAM, каждая из которых имеет по четыре внутренних банка, а размер памяти имеет программируемое значение: до 13 бит для адресации строк, до 11 бит для адресации столбцов.

Максимальная частота тактирования SDRAM составляет HCLK/2.

Контроллер SDRAM имеет встроенный 6-уровневый буфер с размером ячеек 32 бита, который позволяет ускорять обмен в режиме быстрого чтения Read Burst.

Для минимизации потребления SDRAM-контроллер может быть переведен в один из двух режимов пониженного потребления: Self-refresh mode или Power-down mode. В режиме Self-refresh память хранит данные без участия микроконтроллера. Выход из режима Self-refresh происходит при первом обращении к памяти либо по желанию пользователя при установке битов управления MODE = 000 в регистре FMC_SDCMR. В режиме Power-down SDRAM-контроллер сам выполняет обновление памяти. Выход из этого режима также происходит при установке битов управления MODE = 000 в регистре FMC_SDCMR.

Контроллер внешней памяти FMC может оставаться активным в режимах Run и Sleep. При переходе микроконтроллера в режим Stop деятельность FMC прекращается, но состояния регистров конфигурации сохраняются. Чтобы не потерять содержимое внешней SDRAM при нахождении микроконтроллера в режимах Stanby или Stop, следует использовать режим Self-refresh.

Контроллер внешней памяти FMC позволяет без особых проблем работать с TFT-панелями со встроенным графическим контроллером (рисунок 29). При этом внешняя Flash может использоваться для хранения изображений, а внешняя SDRAM выступать в качестве экранной памяти.

Рис. 29. Подключение TFT-панелей с помощью FMC

Рис. 29. Подключение TFT-панелей с помощью FMC

Контроллер Quad-SPI

Контролер Quad-SPI позволяет расширять память STM32F7 за счет микросхем Flash, использующих интерфейс SPI/Dual-SPI/Quad-SPI.

С помощью Quad-SPI пользователи могут работать с различными микросхемами памяти:

  • с микросхемами Single-SPI или Dual- SPI;
  • с одиночными микросхемами Quad-SPI (режим Single Flash Mode);
  • с двумя микросхемами Quad-SPI, включенными параллельно (режим DualFlashMode) (рисунок 30).

Рис. 30. Варианты подключения внешней памяти Quad-SPI

Рис. 30. Варианты подключения внешней памяти Quad-SPI

В режиме Single Flash Mode для подключения памяти используется шесть линий: CLK, BK_IO[3…0], BK_CS. В таком случае возможна одновременная передача четырех бит, если данные защелкиваются только по фронту или по срезу (Single Data Rate Mode). Если производить считывание данных по фронту и по срезу, то за один такт можно вычитывать до 8 бит (Double Data Rate Mode).

В режиме Dual Flash Mode используются две микросхемы Flash. При этом они имеют общие линии тактирования CLK и выбора кристалла BK_CS, а линии данных разделены. В таком случае скорость обмена составляет 8 бит (Single Data Rate Mode) или 16 бит за такт (Double Data Rate Mode).

Разнообразие вариантов подключения обеспечивает гибкость с точки зрения числа используемых выводов (6…10) и разрядности шины данных (4…8 бит).

Протокол взаимодействия с внешней памятью имеет пять фаз:

  • передача команды;
  • передача данных;
  • передача байтов конфигурации;
  • циклы ожидания;
  • передача/прием данных.

Встроенный контроллер Quad-SPI позволяет настраивать число используемых фаз, длительность каждой из фаз, число активных линий в каждой из фаз.

Quad-SPI может работать в трех режимах:

  • в режиме непрямого обмена с использованием регистров Quad-SPI;
  • обмена по прерыванию с постоянным опросом статусного регистра внешней Flash;
  • в режиме отображения внешней Flashна адресное пространство контроллера.

При использовании первого режима передача данных идет не напрямую, а через FIFO-буфер, то есть так же, как и при работе с обычным SPI. Управление осуществляется либо вручную, либо с помощью DMA и флагов прерываний.

При обмене по прерыванию контроллер Quad-SPI автоматически опрашивает регистр статуса внешней Flash. Далее полученное значение сравнивается с маской (регистр PSMKR) и в случае совпадения происходит генерация прерывания. Результат сравнения также может дополнительно обрабатываться с помощью функций AND или OR.

При отображении внешней Flash на адресное пространство контроллера она начинает рассматриваться как собственная память контроллера. В данном случае максимальный объем Flash ограничен значением 256 Мбайт.

Контролер Quad-SPI способен формировать пять прерываний:

  • Timeout формируется по завершению таймаута;
  • Status match формируется при наличии совпадения при использовании обмена по прерыванию с постоянным опросом статусного регистра внешней Flash;
  • FIFO threshold формируется в режиме непрямого обмена, когда FIFO-буфер заполняется до порогового уровня;
  • TransferComplete формируется в режиме непрямого обмена при завершении передачи данных. Также формируется в других режимах при отмене передачи данных;
  • TransferError формируется в режиме непрямого обмена при использовании некорректного адреса.

Контроллер внешней памяти Quad-SPI может оставаться активным в режимах Run и Sleep. При переходе микроконтроллера в режим Stop деятельность Quad-SPI прекращается, но содержимое регистров конфигурации сохраняется.

Блок вычисления контрольной суммы CRC

Блок CRC (Cyclic Redundancy Check calculation unit) необходим для вычисления контрольной суммы CRC для 8-/16-/32-битных данных без участия процессорного ядра. В связке с DMA блок CRC может обрабатывать значительные объемы данных, в то время как процессор занимается другими задачами.

По умолчанию CRC использует полином CRC-32 (Ethernet), который имеет вид X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2+ X +1. В качестве альтернативы может использоваться полином программируемого размера 7/8/16/32-бит. Параметры CRC задаются пользователем: размер и коэффициенты полинома, начальное значение, реверсирование входных и выходных данных, а также выравнивание конечных данных.

Для обеспечения максимального быстродействия блок CRC подключен к шине AHB (рисунок 31). Обмен между шиной и блоком CRC происходит с помощью 32-битного буферизированного регистра, используемого как для записи, так и для чтения (процессором или DMA). Буфер необходим, чтобы избежать ожидания перед загрузкой новых данных. После выполнения расчета блок CRC сохраняет результат и использует его в качестве начального значения для последующего расчета.

Рис. 31. Блок-схема модуля CRC

Рис. 31. Блок-схема модуля CRC

Формат входных и выходных данных имеет возможность гибкой настройки. В частности, с помощью битов REV_IN[1:0] регистра CRC_CR можно осуществить реверс входных данных. В качестве примера рассмотрим реверсирование числа 0x1A2B3C4D:

  • результат побайтовой инверсии: 0x58D43CB2;
  • результат инверсии по 16 бит (полуслово): 0xD458B23C;
  • результат инверсии по 32 бита (слово): 0xB23CD

Аналогичным образом можно выполнить 32-битный реверс выходных данных с помощью бита REV_OUT регистра CRC_CR.

Скорость вычисления контрольной суммы зависит от разрядности данных:

  • четыре такта AHB для 32-битных данных;
  • два такта AHB для 16-битных данных;
  • один такт AHB для 8-битных данных;

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

Блок CRC может оставаться активным в режимах Run и Sleep. При переходе микроконтроллера в режим Stop деятельность CRC прекращается, но содержимое регистров конфигурации сохраняется.

Генератор случайных чисел RNG

Как следует из названия, встроенный блок RNG (Random Number Generator) необходим для генерации 32-битных случайных чисел. Скорость генерации определяется частотой RNG_CLK/40, где RNG_CLK – частота тактирования блока RNG.

На рисунке 32 представлена упрощенная блок-схема генератора случайных чисел RNG. Исходным источником данных для RNG становится пара генераторов, чьи выходы объединены по схеме XOR. На выходе XOR формируется битовый поток, который поступает в сдвиговый регистр, а из него в 32-битный регистр выходных данных. Тактирование производится с помощью сигнала RNG_CLK, который не зависит от HCLK. Блок контроля ошибок контролирует появление аномальных данных и неадекватное поведение RNG_CLK.

Рис. 32. Блок-схема генератора случайных чисел RNG

Рис. 32. Блок-схема генератора случайных чисел RNG

Для информирования пользователя о состоянии генератора случайных чисел используются три флага, по каждому из которых есть возможность генерации прерываний:

  • флаг готовности новых данных;
  • флаг получения аномального результата, который выставляется, когда получена последовательность одинаковых значений (0 или 1) длиной более 64 битов или если получена последовательность чередующихся 0 и 1 длиной более 32 бит;
  • флаг ошибки тактирования, который появляется, когда частота RNG оказывается меньше частоты HCLK.

Генератор случайных чисел оказывается полезен для широкого спектра приложений: криптография, игры, статистические расчеты. В частности большинство криптографических алгоритмов не может работать без RNG.

Для получения подробной информации по генератору случайных чисел следует обратиться к руководству “AN4230. Application note. STM32 microcontrollers random number generation validation using NIST statistical test suite”.

Хеш-процессор HASH

Хеш-функции необходимы для получения строки цифровых данных определенной длины из исходного массива данных. Получаемая строка называется дайджестом сообщения, хеш-кодом или хеш-суммой. Любое, даже малейшее изменение исходного массива данных приведет к полному изменению хеш-кода. Таким образом, совпадение дайджестов (коллизия) оказываются виртуально невозможным. Это используется для контроля целостности сообщений и защиты их от взлома.

Встроенный хеш-процессор (Hash) микроконтроллеров STM32F7 позволяет получать дайджест сообщений (хеш-код, хеш-сумму) без участия процессорного ядра. Кроме того, он может работать совместно с DMA, что еще больше разгружает процессор.

Хеш-процессор поддерживает следующие хеш-функции: MD5 (message-digest algorithm 5), SHA-1 и SHA-2 (SHA-224/SHA-256) (SHA – secure hash algorithm). Все перечисленные функции работают с блоками данных по 512 бит. При необходимости исходный массив делится на части.

Среди всех функций MD5 является менее защищенной и генерирует 128-битный хеш-код (таблица 5).

Таблица 5. Хеш-функции, используемые в STM32F7

Хеш-функция Регистры выходных данных Старший бит Размер хеш-кода, бит
MD5 HASH_H0…HASH_H3 HASH_H0[31] 128
SHA-1 HASH_H0…HASH_H4 HASH_H0[31] 160
SHA-224 HASH_H0…HASH_H6 HASH_H0[31] 224
SHA-256 HASH_H0…HASH_H7 HASH_H0[31] 256

Микроконтроллеры STM32F7 поддерживают функцию HMAC (keyed-hash message authentication code), которая используется для аутентификации и контроля целостности сообщений. Для расшифровки сообщений необходим секретный ключ, известный только отправителю и получателю (рисунок 33). HMAC позволяет получателю данных проверять целостность информации и идентифицировать отправителя. Если отправитель не имеет секретного ключа, то хеш-код будет сформирован неверно, что легко обнаружит получатель.

Рис. 33. Использование HMAC

Рис. 33. Использование HMAC

Хеш-процессоры микроконтроллеров STM32F7 соответствуют основным стандартам:

  • Federal Information Processing Standards Publication FIPS PUB 180-4, Secure Hash Standard (касается SHA-1 и SHA-2);
  • Internet Engineering Task Force (IETF) Request For Comments RFC 1321 (касается MD5 Message-Digest Algorithm);
  • Internet Engineering Task Force (IETF) Request For Comments RFC 2104 HMAC: Keyed-Hashing for Message Authentication, and Federal Information Processing Standards Publication FIPS PUB 198-1, The Keyed-Hash Message Authentication Code (HMAC).

Хеш-процессор может генерировать два типа прерывания: по готовности хеш-кода и по готовности к приему данных.

Производительность хеш-процессора определяется используемой хеш-функцией:

  • 66 тактов HCLK для SHA-1;
  • 50 тактов HCLK для SHA-224;
  • 50 тактов HCLK для SHA-256;
  • 50 тактов HCLK для MD5.

Кроме того, требуется как минимум 16 тактов для загрузки блока данных объемом 512 бит.

Хеш-процессор может оставаться активным в режимах Run и Sleep. При переходе микроконтроллера в режим Stop деятельность хеш-процессора прекращается, но содержимое регистров конфигурации сохраняется.

Аппаратный ускоритель AES

AES – симметричный алгоритм, который выполняет шифрование блочных данных длиной 128 бит с помощью ключа длиной 128/256 бит. Принцип его действия представлен на рисунке 34.

Рис. 34. AES – симметричный алгоритм шифрования блочных данных с использованием ключа

Рис. 34. AES – симметричный алгоритм шифрования блочных данных с использованием ключа

В микроконтроллерах STM32F7 реализован аппаратный ускоритель AES (Advanced Encryption Standard HW Accelerator, AES), который необходим для выполнения алгоритма AES без привлечения процессорного ядра. При работе с ускорителем AES есть возможность использования двух выделенных каналов DMA: одного для загрузки входных данных, другого — для пересылки выходных данных.

Ускоритель AES может работать в четырех режимах:

  • Mode 1 – шифрование с использованием ключа, хранящегося в регистрах CRYP_KxxR;
  • Mode 2 – формирование нового ключа на основе главного ключа, хранящегося в регистрах CRYP_KxxR;
  • Mode 3 – дешифрование с использованием ключа, хранящегося в регистрах CRYP_KxxR;
  • Mode 4 – формирование нового ключа + дешифрование.

Существует шесть сценариев кодирования с помощью ускорителя AES:

  • Electronic Code Book (ECB) – режим по умолчанию. Данные разбиваются на блоки, которые кодируются независимо друг от друга;
  • Cipher Block Chaining (CBC) – режим шифрования, при котором для каждого нового блока производится операция «исключающее ИЛИ» (XOR) с результатом шифрования предыдущего блока;
  • Counter Mode (CTR). В этом режиме для каждого нового блока производится операция «исключающее ИЛИ» (XOR) со значением 32-битного счетчика;
  • Galois/Counter Mode (GCM) – шифрование данных и параллельное формирование MAC (кода аутентификации). Данный режим основан на режиме CTR;
  • Galois Message Authentication Code mode (GMAC) – режим аналогичен GCM, но производится кодирование только значений 32-битного счетчика;
  • Counter with CBC-MAC (CCM) – шифрование данных как и в режиме CBC, и параллельное формирование MAC.

В таблицах 6 и 7 представлены данные о времени выполнения различных операций.

Таблица 6. Время обработки одного блока данных (128 бит) в различных режимах работы ускорителя AES

Ключ, бит Алгоритм
ECB CBC CTR
128 14 14 14
192 16 16 16
256 18 18 18

Таблица 7. Время обработки одного блока данных (128 бит) в различных режимах работы ускорителя AES

Ключ, бит Алгоритм
GCM CCM
Init Header Payload Tag Total Init Header Payload Tag Total
128 24 10 14 14 62 12 14 25 14 65
192 28 10 16 16 70 14 16 29 16 75
256 32 10 18 18 78 16 18 33 18 85

Ускоритель AES информирует пользователя об ошибках с помощью флагов:

  • RDERR – флаг ошибки, возникающий при попытке чтения в процессе вычислений;
  • WRERR – флаг ошибки, возникающий при попытке записи в процессе выполнения вычислений.

При появлении этих флагов может быть сгенерировано прерывание. Для этого следует установить бит ERRIE в регистре управления.

Кроме флагов ошибок для контроля состояния ускорителя AES используется флаг завершения вычислений CCF (по нему возможна генерация прерывания) и флаг ожидания (только в режиме GCM).

Ускоритель AES остается активным в режимах Run и Sleep. При переходе микроконтроллера в режим Stop деятельность ускорителя прекращается, но содержимое регистров конфигурации сохраняется.

Защита памяти

Микроконтроллеры STM32F7 предоставляют различные функции защиты памяти. Защита памяти может потребоваться в различных случаях. Например, защита от чтения помешает злоумышленникам считать программу, записанную во Flash микроконтроллера, что значительно усложнит реверс инжиниринг для конкурентов. Защита от записи позволяет обезопасить Flash от случайного стирания в процессе работы программы.

В STM32F7 реализованы три основных механизма защиты: защита от чтения с помощью опциональных битов RDP, защита от чтения PcROP, защита от записи с помощью опциональных битов nWRPi.

Биты RDP определяют защиту от чтения:

  • уровень Level0 (RDP = 0xAA) не подразумевает никаких ограничений при чтении/записи/стирании памяти. Опциональные биты могут быть изменены;
  • уровень Level1 (RDP = любое значение, кроме 0xAA и 0xСС) – защита памяти от чтения. В данном случае чтение из Flash или Backup ОЗУ запрещено, в том числе и в режиме отладки. Исключением становится выполнение пользовательского загрузочного кода из Flash. Опциональные биты могут быть изменены. Стоит отметить, что при обратном переходе от Level1 к Level0 происходит стирание Flash, регистров и Backup ОЗУ во избежание дальнейшего считывания.
  • Уровень Level2 (RDP = 0xСС) – самый строгий уровень защиты памяти от чтения. В отличие от Level1, активация Level2 является необратимой, то есть в дальнейшем опциональные биты не могут быть изменены и даже стирание микросхемы оказывается невозможным. Защита Level2 не может быть «вскрыта» даже на заводе-изготовителе.

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

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

Память Уровень защиты Отладка, загрузка из ОЗУ или из системного загрузчика Выполнение пользовательского загрузчика из Flash
Чтение Запись Стирание Чтение Запись Стирание
Flash и Backup ОЗУ Level 1 Запрещено Запрещено Разрешено
Level 2 Запрещено Разрешено
Опциональные биты Level 1 Разрешено Разрешено
Level 2 Запрещено Запрещено
OTP Level 1 Запрещено Разрешено
Level 2 Запрещено Разрешено

Еще одним механизмом защиты памяти, реализованным в STM32F7, является PcROP (Proprietary code Read Out Protection). Он позволяет защитить отдельные участки Flash от чтения без использования описанного выше механизма RDP. Для этого в программе необходимо указать, что выделенный участок кода предназначен только для исполнения, например, в Keil следует использовать директиву execute_only. После этого исполнение кода из этой области оказывается возможным, а вот простое чтение будет запрещено для всех (включая DMA и CPU). PcROP оказывается очень полезным механизмом для защиты от троянского ПО. Он работает с сегментами памяти 16/64/128 кбайт.

Как уже говорилось ранее в разделе, посвященном Flash, биты nWRPi предназначены для индивидуальной защиты секторов памяти от записи. Здесь стоит только добавить, что если хотя бы один из секторов защищен от записи, то выполнение команды полного стирания оказывается невозможным.

Функции и механизмы безопасности

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

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

  • Class B и Class C, в соответствии со стандартами IEC60335 и IEC60730;
  • до SIL3, в соответствии с промышленным стандартом IEC

В соответствии с IEC60335, бытовые устройства делятся на три класса: Class A, Class B, Class C. Устройства Class C отвечают самым жестким требованиям безопасности, в них должен быть реализован сложный комплекс программно-аппаратных решений, таких, например, как зеркальное дублирование процессорных ядер или использование памяти с контролем данных. В устройствах Class B функции безопасности в большей степени ложатся на программное обеспечение.

При работе с STM32F7 пользователю предлагается широкий выбор ПО для достижения требований Class B. Кроме того, в этих микроконтроллерах есть и некоторые аппаратные блоки и функции безопасности:

  • аварийные прерывания, например, Hard Fault, MemManage, BusFault, NMI и другие;
  • сторожевые таймеры: независимый и оконный, которые позволяют контролировать время выполнения операций, в том числе защищают от зависаний;
  • блок вычисления контрольной суммы CRC, позволяющий обнаруживать ошибки данных и кода;
  • контроль источника внешнего тактирования, который позволяет автоматически переключиться на встроенный RC-генератор при возникновении проблем с HSE;
  • перекрестный контроль частоты тактирования, позволяющий сравнивать частоту разных источников тактирования (с помощью встроенных таймеров) и обнаруживать недопустимые отклонения;
  • контроль напряжения питания с помощью функций POR/PDR, PVD и BOR;
  • механизмы защиты памяти от чтения/записи;
  • контроль целостности данных при работе с коммуникационными интерфейсами, в том числе с помощью CRC и другое.

Для получения подробной информации следует обратиться к руководствам:

Список ранее опубликованных глав

  1. Системная периферия
•••

Наши информационные каналы

О компании ST Microelectronics

Компания STMicroelectronics является №1 производителем электроники в Европе. Компоненты ST широко представлены в окружающих нас потребительских товарах – от iPhone до автомобилей разных марок. Лидеры индустриального рынка выбирают компоненты ST за их надежность и выдающиеся технические параметры. В компании ST работает 48 000 сотрудников в 35 странах. Производственные мощности расположены в 12 странах мира. Более 11 тысяч сотрудников заняты исследованиями и разработками – инновационное лидерство ...читать далее

Товары
Наименование
STM32F745ZGT6 (ST)
STM32F746BGT6 (ST)
STM32F746NGH6 (ST)
STM32F746ZGT6 (ST)
STM32F765VGT6 (ST)
STM32F746IGT6 (ST)
STM32F765ZIT6 (ST)
STM32F746VGT6 (ST)
STM32F769BIT6 (ST)
STM32F745VET6 (ST)
STM32F746IGK6 (ST)
STM32F767IIT6 (ST)
STM32F767VIT6 (ST)
STM32F765VIT6 (ST)
STM32F745IGT6 (ST)
STM32F746G-DISCO (ST)
STM32F723E-DISCO (ST)
STM32F769I-DISCO (ST)
STM32F722IEK6 (ST)
STM32F779I-EVAL (ST)