Микроконтроллеры STM32G0: Память и безопасность

14 октября

учёт ресурсовуправление двигателемавтоматизацияинтернет вещейуниверсальное применениеST Microelectronicsстатьяинтегральные микросхемы

Вячеслав Гавриков (г. Смоленск)

Серия публикаций основана на материалах цикла STM32G0 Online Training от компании STMicroelectronics. Во второй статье мы рассмотрим вопросы, касающиеся встроенной памяти, надежности и безопасности.

Flash

В настоящий момент представители семейства STM32G0 имеют до 128 кбайт встроенной Flash-памяти. Контроллер Flash обеспечивает различные типы доступа к памяти (чтение, программирование, стирание), программирование конфигурационных байтов (option bytes), а также реализует функции защиты памяти.

В микроконтроллерах STM32G0 Flash-память состоит из двух областей: основной памяти (Main memory block) и информационного блока (Information block). Основная память используется для хранения пользовательской программы. Она организована в виде одного банка с разбиением на страницы по 2 кбайта (всего 64 страницы). Программирование основной памяти осуществляется по 8 байт (стандартный режим) или по 256 байт (Fast programming). Стирание памяти возможно либо постранично (по 2 кбайта), либо полностью (Mass erase).

Информационный блок состоит из нескольких областей (таблица 11):

  • системная память (System memory) объемом 28 кбайт содержит загрузчик и используется для перепрограммирования Flash с помощью одного из следующих интерфейсов: USART1, USART2, I2C1, I2 Кроме того, в случае с STM32G071xx и STM32G081xx программирование может осуществляться посредством USART3, SPI1, и SPI2;
  • однократно программируемая память OTP (One-Time Programmable) объемом 1 кбайт используется для хранения пользовательских данных. Как следует из названия, OTP программируется только один раз, и в дальнейшем содержимое этой памяти не может быть стерто или изменено;
  • область опциональных байтов (Option bytes) объемом 128 байт содержит различные конфигурационные параметры, которые могут быть изменены пользователем.

Таблица 11. Организация Flash-памяти на примере STM32G071 и STM32G081 [1]

Область Адрес Объем, байт Название
Основная память 0x0800 0000 — 0x0800 07FF 2K Page 0
0x0800 0800 — 0x0800 0FFF 2K Page 1
0x0800 1000 — 0x0800 17FF 2K Page 2
0x0800 1800 — 0x0800 1FFF 2K Page 3
0x0800 F800 — 0x0800 FFFF 2K Page 31
0x0801 0000 — 0x0801 FFFF 2K Page 32
0x0801 F000 — 0x0801 7FFF 2K Page 62
0x0801 F800 — 0x0801 FFFF 2K Page 63
Информационный блок 0x1FFF 0000 — 0x1FFF 6FFF 28K Системная память
0x1FFF 7000 — 0x1FFF 73FF 1K OTP
0x1FFF 7500 — 0x1FFF 77FF 768 Инженерные байты
0x1FFF 7800 — 0x1FFF 787F 128 Опциональные байты

Одной из важнейших особенностей Flash в STM32G0 является блок коррекции памяти ECC (Error Code Correction). ECC предполагает добавление кода коррекции длиной 8 бит к каждому двойному слову данных (64 бита). Таким образом, данные хранятся во Flash блоками по 72 бита. Формирование кода коррекции происходит автоматически при записи во Flash. Аналогичным образом при считывании из Flash происходит автоматическая проверка считанных данных. ECC позволяет обнаруживать и исправлять один поврежденный бит в каждом двойном слове, кроме того, если в двойном слове будут сразу две ошибки, то код ECC также позволит их обнаружить. Если ошибка обнаружена и исправлена, то в регистре FLASH_ECCR устанавливается флаг ECCC. При необходимости система может сгенерировать прерывание. Если же в двойном слове были обнаружены сразу две ошибки, то блок ECC исправить их не может, и устанавливается флаг ECCD в регистре FLASH_ECCR, после чего генерируется немаскируемое прерывание NMI.

Как отмечено выше, программирование Flash осуществляется блоками по 64 бита (72 бита с учетом ECC). При этом микроконтроллеры поддерживают два режима программирования: стандартный (основная память и OTP) и быстрый (только основная память). Режим быстрого программирования Fast Programming позволяет записывать сразу по 256 байт, что увеличивает скорость записи на 37% (таблица 12). Однако при этом необходимо учитывать ряд ограничений:

  • записываемые данные (256 байт) в памяти располагаются последовательно;
  • в течение записи блока данных (256 байт) система вынуждена дольше поддерживать высокое напряжение питания Flash;
  • запись производится последовательно двойными словами (по 64 бита), при этом задержка следования между ними не должна превышать 20 мкс, в противном случае режим быстрого программирования аннулируется;
  • длительность записи каждого двойного слова составляет 2 мкс. В течение этого времени система питания должна гарантированно обеспечивать ток 7 мА;
  • для режима Fast programming необходимо, чтобы тактовая частота Flash была не менее 8 МГц.

Таблица 12. Временные параметры записи и стирания Flash

Параметр Типовое значение
Standard Fast
Программирование двойного слова (64 бита), мкс 85
Программирование одной линии (256 байт), мс 2,7 1,7
Программирование одной страницы (2 кбайт), мс 21,8 13,7
Программирование всей Flash (128 кбайт), с 1,4 0,9
Стирание страницы (2 кбайт), мс 22
Полное стирание Flash, мс 22,1

Из таблицы 12 также видно, что полное стирание Flash занимает примерно столько же времени, сколько и стирание одной страницы.

Хорошо известно, что Flash отличается невысоким быстродействием. По этой причине для согласования фиксированной тактовой частоты Flash и высокой частоты системной шины AHB (HCLK) может потребоваться некоторая задержка (Latnency), выражаемая в циклах ожидания (Wait States). В таблице 13 представлено соответствие между тактовой частотой системы и числом необходимых циклов ожидания. Стоит отметить, что при работе на частотах свыше 16 МГц встроенный стабилизатор должен использовать режим Range 1 с напряжением питания Vcore 1,2 В. Подробнее об этом рассказывается в первой части данной серии публикаций.

Таблица 13. Необходимое число циклов ожидания при работе на различных тактовых частотах

Число циклов ожидания (WS) HCLK, МГц
Vcore Range 1 Vcore Range 2
0 WS (1 такт HCLK) ≤ 24 ≤ 8
1 WS (2 такта HCLK) ≤ 48 ≤ 16
2 WS (3 такта HCLK) ≤ 64

Циклы ожидания становятся большой проблемой, если процессору приходится выполнять сложный код с многочисленными ветвлениями. К счастью, благодаря буферу предвыборки (8 байт) и встроенной кэш-памяти (16 байт) эту проблему можно решить. Подробнее об этом также рассказывается в первой части. Преимущества от использования буфера предвыборки и встроенной кэш-памяти представлены на рисунке 19 и в таблице 14. На тактовых частотах до 24 МГц буфер предвыборки и кэш никак не влияют на производительность. При увеличении числа циклов ожидания (в точках 24 МГц и 48 МГц) активация этих блоков позволяет практически полностью компенсировать просадку производительности.

Рис. 19. При использовании буфера предвыборки и встроенной кэш-памяти производительность линейно увеличивается даже при наличии циклов ожидания

Рис. 19. При использовании буфера предвыборки и встроенной кэш-памяти производительность линейно увеличивается даже при наличии циклов ожидания

Таблица 14. Повышение производительности за счет использования буфера предвыборки и встроенной кэш-памяти

Число циклов ожидания (WS) Производительность, Coremark/МГц
Предвыборка + кэш Предвыборка Кэш Без ускорения
0 WS (1 такт HCLK) 2,5064
1 WS (2 такта HCLK) 2,3755 2,3629 2,048 2,0331
2 WS (3 такта HCLK) 2,2325 2,1882 1,7314 1,71024

Микроконтроллеры STM32G0 обладают широкими возможностями по защите встроенной памяти. Для этого используются следующие механизмы:

  • RDP (Readout Protection) – инструмент, позволяющий защитить Flash, OTP, ОЗУ и дежурные регистры от чтения в процессе выполнения программы. Защита от чтения распространяется на всю память;
  • PCROP (Proprietary Code Protection) – инструмент, позволяющий определять два выбранных участка Flash как области «только для исполнения». Этот инструмент особенно удобен, если требуется защитить от чтения не всю Flash, а только ее часть;
  • WRP (Write protection) – защита памяти от записи и стирания. Защита от записи назначается постранично (2 кбайт).

Подробнее о механизмах защиты будет рассказано далее.

Микроконтроллеры STM32G0 позволяют выполнять загрузку из различных областей памяти. Для выбора загрузчика используются опциональные биты и вывод микроконтроллера BOOT0 (таблица 15).

Таблица 15. Выбор загрузчика

Конфигурация Область загрузчика
Бит BOOT_
LOCK
Бит nBOOT1 Вывод BOOT0 Бит nBOOT_SEL Бит nBOOT0
0 x 0 0 x Основная Flash-память (Main Flash Memory)
0 1 1 0 x Системная память (System Memory)
0 0 1 0 x Встроенное ОЗУ (Embedded SRAM)
0 x x 1 1 Основная Flash-память (Main Flash Memory)
0 1 x 1 0 Системная память (System Memory)
0 0 x 1 0 Встроенное ОЗУ (Embedded SRAM)
1 x x x x Основная Flash-память

Рассмотрим прерывания, которые могут возникать при работе с Flash:

  • End of Operation – генерируется системой после удачного окончания текущей операций с Flash (программирование или стирание);
  • Operation Error – генерируется системой при возникновении ошибок во время выполнения текущей операций с Flash (программирование или стирание);
  • Read Protection Error – генерируется системой при попытке считать данные из защищенной области Flash (RCROP);
  • Write Protection Error – генерируется системой при попытке стереть/записать данные защищенной области Flash (WRP, RCROP или RDP Level 1);
  • Size Error – генерируется системой при использовании неверной разрядности данных в процессе записи;
  • Programming sequential Error – генерируется системой при попытке записи в предварительно не стертую область памяти;
  • Programming alignment error – генерируется системой, если к моменту начала программирования не были обеспечены данные, а также в случае, если до окончания процесса программирования было начато быстрое программирование;
  • Data miss programming error – генерируется системой, если в процессе быстрого программирования новая партия данных не была подана до окончания заданного интервала 20 мкс;
  • Fast programming error – генерируется системой, если процесс быстрого программирования был прерван вследствие ошибки;
  • ECC Correction – генерируется системой, если в процессе чтения двойного слова из Flash была обнаружена и исправлена одиночная ошибка;
  • ECC detection – генерируется системой, если в процессе чтения двойного слова из Flash была обнаружена ошибка в двух битах.

По умолчанию тактирование Flash включено. Для снижения потребления тактирование Flash можно отключить в режимах Run/Low power run и Sleep/Low power Sleep. Кроме того, в режимах Sleep, Run и Stop может быть отключено и питание Flash.

В процессе записи или стирания Flash-память неизбежно деградирует. После выполнения определенного числа циклов перезаписи ячейка Flash выходит из строя, что приводит к ошибкам памяти. В документации, как правило, указывают, сколько циклов записи/стирания может выдержать Flash без повреждения (параметр Endurance). Этот параметр зависит от рабочей температуры. Для микроконтроллеров STM32G0 срок жизни Flash составляет не менее 10 тысяч циклов перезаписи при работе в рамках диапазона температур -40…105°С. Еще одним важным параметром, с точки зрения надежности, является срок сохранения данных (Data retention). Этот параметр характеризует период, в течение которого память может сохранять целостность данных. Длительность сохранения данных во Flash зависит от температуры и числа выполненных ранее циклов записи/чтения. Приведем некоторые конкретные значения:

  • 30 лет при 55°С после 10 тысяч циклов записи/чтения;
  • 15 лет при 85°С после 10 тысяч циклов записи/чтения;
  • 10 лет при 105°С после 10 тысяч циклов записи/чтения;
  • 30 лет при 85°С после 1 тысячи циклов записи/чтения;
  • 15 лет при 105°С после 1 тысячи циклов записи/чтения;
  • 7 лет при 125°С после 1 тысячи циклов записи/чтения.

Безопасность

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

Компания STMicroelectronics серьезно относится к вопросам безопасности. В частности, микроконтроллеры семейства STM32 позволяют обеспечивать требования следующих стандартов:

  • IEC60335 и IEC60730: до Class B и Class C;
  • IEC61508: до SIL

Для обеспечения высокого уровня безопасности компания ST предлагает в процессе разработки следовать рекомендациям, изложенным в руководствах, в частности, в «AN3307 Application note Guidelines for obtaining IEC 60335 Class B certification for any STM32 application» и «AN4435 Application note Guidelines for obtaining UL/CSA/IEC 60730-1/60335-1 Class B certification in any STM32 application».

Давайте рассмотрим аппаратные инструменты STM32G0, позволяющие обеспечивать высокий уровень безопасности приложений.

Стандартные прерывания ядра Arm CortexM0+. Процессор Arm Cortex-M0+ поддерживает целый ряд прерываний, которые позволяют бороться со случайными отказами: Hard Fault, Mem Manage, Bus Fault, Usage Fault, NMI. Эти прерывания на аппаратном уровне (без участия пользовательской программы) сигнализируют об аппаратных сбоях и странном поведении системы.

Модуль защиты памяти MPU (Memory Protection Unit) обеспечивает защиту памяти не только от взломов, но и от банальных программных ошибок (например, случайного стирания памяти). Подробнее о работе MPU рассказывалось в предыдущей части цикла.

Сторожевые таймеры. В составе STM32G0 присутствуют сразу два сторожевых таймера: независимый (IWDG) и сторожевой (WWDG). Эти таймеры надежно защищают систему от зависаний и зацикливаний. Подробнее об их работе будет рассказано в третьей части данного цикла.

ECC. Ранее в статье уже говорилось о возможности контроля ценности данных, находящихся во Flash. При обнаружении ошибок система генерирует прерывания, которые позволяют защититься от непредсказуемого поведения микроконтроллера.

Контроль четности SRAM. Система контроля четности позволяет обнаруживать повреждения данных, находящихся в ОЗУ.

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

Контроль тактовых сигналов. Микроконтроллеры STM32G0 способны обнаруживать проблемы в работе внешних кварцевых генераторов (HSE и LSE), генерировать соответствующие прерывания и вовремя переключаться на встроенные RC-резонаторы.

Калибровка и контроль тактовых сигналов. С помощью встроенных таймеров и опорного сигнала внешнего генератора/резонатора HSE микроконтроллеры STM32G0 могут измерять и контролировать частоту остальных генераторов.

Схемы контроля напряжения питания POR/PDR и PVD. Схемы контроля напряжения питания с программируемыми пороговыми напряжениями позволяют защититься от просадок напряжения, которые могут приводить к непредсказуемым последствиям.

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

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

Кроме аппаратных решений, компания ST предлагает и специализированные программные библиотеки, например:

  • X-CUBE-STL – программные решения, обеспечивающие уровень безопасности SIL2, согласно IEC61508;
  • X-CUBE-CLASSB/STM32-CLASSB-SPL – программные решения, обеспечивающие уровень безопасности Class B, согласно IEC60335 / IEC60730.

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

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

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

  • разрядность данных 8/16/32 бит;
  • начальное значение;
  • выравнивание данных;
  • реверсирование данных.

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

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

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

При необходимости входные данные могут быть реверсированы по нескольким сценариям. Для этого используются биты REV_IN[1:0] регистра CRC_CR. Рассмотрим небольшой пример с реверсированием числа 0x1A2B3C4D:

  • при побайтовом реверсировании получаем 0x58D43CB2;
  • при реверсировании по 16 бит получаем 0xD458B23C;
  • при реверсировании по 32 бита получаем 0xB23CD

Выходные данные можно реверсировать аналогичным образом. Для этого используются биты REV_OUT[1:0] из регистра CRC_CR.

Время, затрачиваемое на вычисление CRC, зависит от разрядности данных. Для 32-битных данных потребуется 4 такта AHB, для 16-битных данных потребуется 2 такта AHB, при работе с 8-битными данными расчет займет всего один системный такт.

При использовании DMA блок CRC способен работать в режимах Run/Low power run и Sleep/Low power Sleep. В режиме Stop CRC неактивен, но содержимое его регистров сохраняется. После выхода из режимов Standby и Shutdown необходимо заново инициализировать блок CRC.

AES: аппаратный блок шифрования

В составе микроконтроллеров STM32G08x присутствует аппаратный блок шифрования AES, который позволяет выполнять кодирование и декодирование данных с помощью 256/128-битного криптографического ключа без участия процессора. В STM32G081 реализована версия AES, совместимая с NIST FIPS 197.

Шифрование данных AES используется в двух основных случаях. В первом случае речь идет о простом шифровании данных (рисунок 21). Передатчик шифрует данные с помощью ключа, а приемник при получении выполняет расшифровку с помощью того же ключа. Шифрование данных используется в широком спектре приложений, таких как беспроводная связь, кодирование сетевого трафика, хранение секретных данных, организация зашифрованных видеоканалов и так далее.

Рис. 21. Простое шифрование данных AES

Рис. 21. Простое шифрование данных AES

В более ответственных случаях требуется не только зашифровать сообщение, но и выполнить аутентификацию, то есть подтвердить, что сообщение послано проверенным отправителем и не подверглось изменению при передаче. Для этих целей кроме шифрования используется дополнительный аутентификационный код MAC (Message Authentication Code). MAC рассчитывается как на стороне передатчика, так и на стороне приемника (рисунок 22).

Рис. 22. Шифрование данных и аутентификация

Рис. 22. Шифрование данных и аутентификация

Несложно догадаться, что шифрование данных является крайне ресурсозатратным мероприятием, если реализовывать его программными методами. Для ускорения вычислений в микроконтроллерах STM32G08x используется специализированный аппаратный блок AES.

Блок-схема AES представлена на рисунке 23. AES напрямую подключен к шине AHB (ведомое устройство). Перед началом работы необходимо, чтобы процессор настроил AES, однако дальнейшая работа AES может выполняться автономно с привлечением DMA: один канал DMA используется для транспортировки исходных незашифрованных данных из памяти, а второй – для перемещения зашифрованных данных обратно в память.

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

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

AES имеет три режима работы:

  • Mode 1 – обычное шифрование данных;
  • Mode 2 – генерация нового ключа на базе исходного ключа, хранящегося в регистре AES_KEYRx;
  • Mode 3 – дешифрование данных.

Кроме того, AES поддерживает несколько различных алгоритмов работы.

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

В таблицах 16 и 17 представлены данные о времени, которое занимают разные алгоритмы шифрования при различной разрядности ключа.

Таблица 16. Длительность шифрования алгоритмов ECB, CBC и CTR

Ключ Режим Алгоритм Входная фаза, тактов Фаза вычислений, тактов Выходная фаза, тактов Всего, тактов
128 бит Mode 1 ECB, CBC, CTR 9 38 4 51
Mode 2 59 59
Mode 3 ECB, CBC, CTR 38 4 51
256 бит Mode 1 ECB, CBC, CTR 13 58 4 75
Mode 2 82 82
Mode 3 ECB, CBC, CTR 13 58 4 75

Таблица 17. Длительность шифрования алгоритмов GCM, CCM и GMAC

Ключ Режим Алгоритм Входная фаза, тактов Фаза вычислений, тактов Выходная фаза, тактов Всего, тактов
128 бит Mode 1 GCM 64 35 51 209
Mode 3 CCM 63 55 114 290
GMAC 64 35 258
256 бит Mode 1 GCM 88 35 75 273
Mode 3 CCM 87 79 162 410
GMAC 88 35 198

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

  • CCF выставляется при успешном завершении вычислений. Может сопровождаться соответствующим прерыванием;
  • Busy выставляется только в режиме GCM и сообщает о возможности прихода сообщения с более высоким приоритетом;
  • RDERR выставляется при попытке чтения в процессе вычислений;
  • WRERR выставляется при попытке записи в процессе выполнения вычислений.

При возникновении ошибок (RDERR и WRERR) могут быть сгенерированы прерывания. Чтобы их разрешить, необходимо установить бит ERRIE в регистре управления.

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

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

В микроконтроллерах STM32G08x присутствует аппаратный генератор RNG, способный формировать 32-битные случайные числа. Структура блока RNG показана на рисунке 24. Из схемы видно, что RNG состоит из двух доменов. Домен AHB работает на системной тактовой частоте (HCLK) и включает интерфейсную часть, регистры и блок обработки выходных данных. Домен RNG использует собственную частоту и имеет в своем составе схему выборки и нормирования, сдвиговый регистр и схему контроля ошибок. Основным источником случайных данных являются аналоговые генераторы шума, сигналы с которых выбираются с частотой rng_clk. Хорошо известно, что чем ниже частота выборки, тем выше будет энтропия («случайность») выходных данных. В данном случае максимальная длительность генерации одного 32-битного случайного числа занимает 213 циклов HCLK. После генерации «сырых» данных они проходят дополнительную обработку и проверку на случайность. Если в полученном случайном числе будут подряд следовать 64 одинаковых бита (0 или 1) или если будет обнаружена последовательность из чередующихся 0 и 1 длиной более 32 бит, система выдаст ошибку (Seed Error Count). Система также проверяет, чтобы тактовая частота rng_clk не была ниже HCLK/32, но эту проверку можно отключить.

Рис. 24. Упрощенная блок-схема генератора случайных чисел RNG

Рис. 24. Упрощенная блок-схема генератора случайных чисел RNG

Для получения подробной информации о соответствии RNG требованиям NIST следует обратиться к руководству «AN4230».

MEMPROTECT: защита памяти

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

В STM32G0 реализованы три основных механизма защиты памяти: RDP (Readout Protection), PCROP (Proprietary Code Readout Protection), WRP (Write Protection), кроме того, у пользователей появилась возможность дополнительно защищать выбранную область памяти (Secure User Memory protection). Настройка каждого из защитных механизмов производится с помощью опциональных байтов.

Рассмотрим перечисленные механизмы подробнее.

Защита от чтения RDP. Данный механизм является глобальным и используется для защиты Flash, опциональных байтов и дежурных регистров. RDP обеспечивает три уровня защиты: Level 0, Level 1 и Level 2. Установка того или иного уровня выполняется с помощью двух комплементарных опциональных байтов RDP (таблица 18).

Таблица 18. Установка уровня защиты RDP

Значение байта RDP Значение комплементарного байта RDP Уровень
0xAA 0x55 Level 0
Любое значение, кроме комбинаций [0xAA, 0x55] и [0xCC, 0x33] Level 1
0xCC 0x33 Level 2

Level 0: защита отключена. В данном случае разрешены все операции при работе с Flash, опциональными байтами и дежурными регистрами вне зависимости от типа загрузки (из Flash или из ОЗУ).

Level 1: защита от чтения. В данном режиме устанавливается глобальный запрет на считывание Flash и дежурных регистров. Доступ к памяти возможен только при загрузке из Flash. Если же загрузка данных выполнялась из ОЗУ или микроконтроллер находится в режиме отладки, то попытка чтения памяти приведет к генерации прерывания Hard Fault Interrupt, которое заблокирует работу микроконтроллера до выполнения сброса по питанию.

Стоит отметить, при RDP Level 1 доступ к опциональным байтам остается открытым, то есть у пользователя есть возможность снять защиту и перейти к RDP Level 0. Однако при этом потребуется полностью стереть память (Mass Erase).

Level 2: без отладки. Аналогичен уровню Level 1, но запрещается загрузка из ОЗУ (boot RAM mode) и из системной памяти (boot loader mode). Кроме того, содержимое опциональных байтов блокируется, то есть возврат к уровням Level 1 или Level 0 оказывается невозможен. Снять блокировку нельзя даже на фабрике ST, поэтому данный уровень защиты следует устанавливать только для финальных версий прошивки.

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

Таблица 19. Доступ к областям памяти при использовании RDP

Область Уровень RDP Загрузка из Flash (BootFromFlash) Debug/BootFromRam/BootFromLoader
Чтение Запись Стирание Чтение Запись Стирание
Пользовательская Flash (Main Flash memory) 1 + + + (3)
2 + + + н/о н/о н/о
Системная память (System memory)(1) 1 + +
2 + н/о н/о н/о
Опциональные байты (Option bytes) 1 + +(2) + + +(2) +
2 + н/о н/о н/о
Дежурные регистры (Backup registers) 1 + + н/о (3)
2 + + н/о н/о н/о н/о
OTP 1 + + н/о + + н/о
2 + + н/о н/о н/о н/о
Примечания:
1. Системная память во всех режимах доступна только для чтения
2. Содержимое опциональных байтов стирается при отключении защиты RDP (переход от Level 1 к Level 0)
3. Содержимое памяти необходимо стереть при переходе от Level1 к Level 0

Защита выбранных участков PCROP. Данный механизм защищает выбранные участки кода от считывания и записи, например, со стороны сторонних программ (троянов). При этом сам код может выполняться процессором. Другими словами эти участки работают в режиме «только для исполнения».

Защита памяти PCROP позволяет определить сразу две защищаемые области объемом от 512 байт до 128 кбайт. Снять защиту PCROP можно только при переходе RDP от Level 0 к Level 1 и полном стирании памяти. Однако пользователь может сохранить содержимое PCROP при стирании памяти, если сбросит опциональный бит PCROP_RDP.

Защита от записи WRP позволяет организовать постраничную защиту Flash от записи/стирания/программирования (страница = 2 кбайт). После активации защиты попытка записи/стирания выбранной страницы приведет к ошибке Flash Memory Error. По этой причине если хоть один сектор защищен от записи, то стирание всего чипа оказывается невозможным – сначала нужно будет снять защиту от записи.

Защита выделенной области пользовательской Flash (Secure User Memory protection). Пользователь может дополнительно защитить выбранную область памяти. Область защищенной памяти располагается в начале Flash (адрес 0x0800 0000), а ее объем задается полем SEC_SIZE[6:0] в регистре FLASH_SECR. Данные и код, находящиеся в этой области, остаются доступными, пока не будет установлен опциональный бит SEC_PROT в регистре FLASH_CR. После установки бита SEC_PROT защищаемый участок памяти блокируется (для чтения и записи) до следующего сброса. Обычно такой механизм записи используется для защиты данных и кода загрузчика, а также для хранения различных программ шифрования и аутентификации.

TAMP: защита от вскрытия

В микроконтроллерах STM32G0 присутствует блок TAMP, который вместе с RTC относится к домену VBAT. TAMP имеет пять 32-битных дежурных регистров (Backup Registers), содержимое которых сохраняется, даже если основное питание отключается, а домен VBAT продолжает получать питание от дежурной батарейки. Кроме того, при обнаружении взлома содержимое этих регистров может быть автоматически стерто. По этой причине в дежурных регистрах обычно хранят наиболее ценную информацию, например, ключи шифрования.

Блок-схема TAMP представлена на рисунке 25. Тактирование регистров управления TAMP осуществляется с помощью тактового сигнала шины APB, а для тактирования функциональных блоков (ядра) используется сигнал RTCCLK. RTCCLK может формироваться из HSE, LSE, LSI. Однако при питании от батарейки допускается использовать только LSE.

Рис. 25. Блок-схема TAMP

Рис. 25. Блок-схема TAMP

Кроме дежурных регистров в состав TAMP входят блоки обнаружения входных сигналов (по фронту/срезу или по заданному уровню входных сигналов). Пользователь также может настраивать параметры входных цифровых фильтров. Количество входных сигналов TAMP_INx зависит от модели контроллера. Сигналы TAMP_IN1 и TAMP_IN2 поступают со внешних входов, например, от датчиков вскрытия. На остальные входы TAMP_Inx поступают внутренние сигналы микроконтроллера.

Кроме автоматического стирания дежурных регистров блок TAMPER может генерировать события и прерывания, формировать триггерные сигналы для таймеров, инициировать проставление временных меток от RTC. При этом TAMPER продолжает работать во всех режимах пониженного потребления, даже в режиме Shutdown.

DES: уникальная цифровая подпись

На этапе производства микроконтроллеров STM32G0 в них зашивается уникальная электронная подпись DES (Device Electronic Signature). DES представляет собой набор регистров, доступных только для чтения, в которых содержится следующая информация:

  • UID – уникальный 96-битный идентификатор, который включает в себя координаты кристалла на кремниевой подложке по оси X (16 бит) и по оси Y (16 бит), номер лота в кодировке ASCII (24 бита) и номер подложки (8 бит). UID может использоваться для генерации ключей шифрования, формирования серийных номеров и так далее;
  • информация об объеме Flash;
  • информация о корпусном исполнении.

Литература

  1. Reference manual. STM32G0x1 advanced Arm®-based 32-bit MCUs. (Rev.2 2019). 

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

  1. Микроконтроллеры STM32G0: Архитектура и системная периферия
•••

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

О компании ST Microelectronics

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

Товары
Наименование
NUCLEO-G070RB (ST)
STM32G071B-DISCO (ST)
STM32G081B-EVAL (ST)
NUCLEO-G031K8 (ST)
STM32G030K6T6 (ST)
STM32G070RBT6 (ST)
STM32G071RBT6 (ST)
STM32G081RBT6 (ST)
STM32G031K6T6 (ST)
STM32G031G8U6 (ST)
STM32G031K8T6 (ST)
STM32G071KBU6 (ST)
STM32G071C8T6 (ST)
STM32G030C6T6 (ST)
STM32G070KBT6 (ST)
STM32G071CBT6 (ST)
STM32G071CBU6 (ST)
STM32G071KBU6N (ST)