Перейти к содержанию

STM32L5: малопотребляющие Cortex-M33 с TrustZone

STM32L5 — малопотребляющее семейство STM32 на ядре Cortex-M33 с частотой до 110 МГц и технологией Arm TrustZone, которая делит кристалл на защищённую и обычную части. Режимы питания и генератор MSI у него как у STM32L4, а загрузка и защита устроены по-новому. Здесь — главное из reference manual RM0438 и страницы с распиновкой каждого микроконтроллера в каждом корпусе.

STM32L5 — семейство малопотребляющих микроконтроллеров STMicroelectronics на ядре Arm Cortex-M33 с частотой до 110 МГц (RM0438, 2.1). Ядро архитектуры Armv8-M поддерживает TrustZone: память и периферию можно разделить на защищённую и обычную части, а защищённый код не виден обычному. По периферии и режимам питания STM32L5 близок к STM32L4+, но добавляет FDCAN, контроллер USB Type-C Power Delivery (UCPD) и средства защиты прошивки. В разделе 32 страницы для 38 исполнений в 7 корпусах, 2 линейки: у каждого сочетания микроконтроллера и корпуса — своя страница со схемой выводов и номерами альтернативных функций.

Линейки STM32L5

Значения в таблице собраны из записей базы ST: частота — максимальная для линейки, память — от наименьшего до наибольшего исполнения.

ЛинейкаЯдро, частотаФлеш-памятьОЗУКорпусаЧем выделяется
STM32L552Cortex-M33, до 110 МГц256 КБ – 512 КБ256 КБLQFP48, LQFP64, LQFP100, LQFP144, UFBGA132, UFQFPN48, WLCSP81USB, UCPD, FDCAN, FMC, DAC, COMP, SAI, DFSDM, HASH, RNG, LPTIM, LPUART, TSC
STM32L562Cortex-M33, до 110 МГц512 КБ256 КБLQFP48, LQFP64, LQFP100, LQFP144, UFBGA132, UFQFPN48, WLCSP81USB, UCPD, FDCAN, FMC, DAC, COMP, SAI, DFSDM, AES, HASH, RNG, LPTIM, LPUART, TSC

В семействе одна линейка, STM32L5x2, из двух вариантов: STM32L552 и STM32L562. ОЗУ у обоих — 256 КБ: SRAM1 на 192 КБ и SRAM2 на 64 КБ (RM0438, 2.4). Отличаются они криптографией (RM0438, 4.2):

БлокSTM32L552STM32L562
AES-256 (ECB, CBC, CTR, GCM, CCM)—есть
PKA — RSA, DH, ECC—есть
OTFDEC — расшифровка на лету внешней флеш-памяти на OCTOSPI—есть
HASH (MD5, SHA-1, SHA-2), генератор случайных чисел RNGестьесть
TrustZone, защищённые области флеш-памяти, защита от вскрытия (tamper)естьесть

TrustZone

TrustZone включают битом TZEN в байтах опций (RM0438, 2.2). Пока он сброшен, STM32L5 работает как обычный микроконтроллер, и для него подходят привычные приёмы STM32L4. С TZEN = 1 права доступа задают блоки SAU и IDAU ядра и контроллер GTZC микроконтроллера: после сброса все SRAM защищённые, и защищённая программа сама открывает обычной части нужные блоки памяти и периферию. Флеш-память делится на защищённые области, границы которых задают байты опций (watermark), а внутри защищённой области можно выделить зону HDP: после загрузки доступ к ней закрывается до следующего сброса, и код первичной загрузки с его ключами становится недоступен (RM0438, 4.7.1).

Тактирование и питание

После сброса STM32L5 работает от генератора MSI на 4 МГц без тактов ожидания; как у STM32L4, MSI настраивается на одну из двенадцати частот от 100 кГц до 48 МГц (RM0438, раздел RCC). Питание — от 1,71 до 3,6 В. Встроенный понижающий преобразователь SMPS есть только в отдельных корпусах, а у части исполнений ядро можно питать от внешнего преобразователя через выводы VDD12 (RM0438, раздел PWR).

Напряжение ядра выбирается из трёх диапазонов, и от него зависит допустимая частота. Такты ожидания флеш-памяти (RM0438, табл. 34):

Тактов ожиданияRange 0Range 1Range 2
0до 20 МГцдо 20 МГцдо 8 МГц
1до 40 МГцдо 40 МГцдо 16 МГц
2до 60 МГцдо 60 МГцдо 26 МГц
3до 80 МГцдо 80 МГц—
4до 100 МГц——
5до 110 МГц——

Делители таймеров и скорость UART от выбранных частот считают калькулятор таймера и калькулятор UART, а про кадры шины FDCAN — статья о CAN FD.

Выводы STM32L5: альтернативные функции и загрузка

У каждой линии порта мультиплексор на шестнадцать функций: номер AF0–AF15 записывают в регистры GPIOx_AFRL (линии 0–7) и GPIOx_AFRH (линии 8–15) (RM0438, раздел GPIO). В данных ST у STM32L5 встречаются номера до AF14. При включённой TrustZone каждая линия порта тоже бывает защищённой или обычной.

Значение BOOT0 берётся с вывода PH3-BOOT0 или, если бит nSWBOOT0 сброшен, из бита nBOOT0 в байтах опций. Адрес старта задают байты опций (RM0438, табл. 6 и 7):

РежимBOOT0 = 0BOOT0 = 1
TrustZone выключена (TZEN = 0)NSBOOTADD0, заводское значение — флеш-память 0x0800 0000NSBOOTADD1, заводское значение — загрузчик 0x0BF9 0000
TrustZone включена (TZEN = 1)SECBOOTADD0, заводское значение — флеш-память 0x0C00 0000системный загрузчик RSS, 0x0FF8 0000

Бит BOOT_LOCK закрепляет единственную точку входа SECBOOTADD0 и отключает остальные варианты — так строят защищённую загрузку (RM0438, разд. 3). Загрузчик работает через USART1–USART3, I²C1–I²C3, SPI1–SPI3, FDCAN1 и USB в режиме DFU, занимает 32 КБ системной памяти с адреса 0x0BF9 0000 и при старте использует первые 16 КБ SRAM (AN2606, табл. 178).

Все STM32L5 по корпусам

STM32L552 — Cortex-M33, до 110 МГц

МикроконтроллерКорпусФлеш-памятьОЗУЛиний ввода-вывода
STM32L552CC, STM32L552CELQFP48256 КБ / 512 КБ256 КБ38
STM32L552CC, STM32L552CEUFQFPN48256 КБ / 512 КБ256 КБ38
STM32L552CELQFP48512 КБ256 КБ36
STM32L552CEUFQFPN48512 КБ256 КБ36
STM32L552MEYxPWLCSP81512 КБ256 КБ61
STM32L552MEYxQWLCSP81512 КБ256 КБ58
STM32L552QC, STM32L552QEUFBGA132256 КБ / 512 КБ256 КБ106
STM32L552QEIxUFBGA132512 КБ256 КБ110
STM32L552QEIxPUFBGA132512 КБ256 КБ108
STM32L552RC, STM32L552RELQFP64256 КБ / 512 КБ256 КБ52
STM32L552RETxPLQFP64512 КБ256 КБ50
STM32L552RETxQLQFP64512 КБ256 КБ47
STM32L552VC, STM32L552VELQFP100256 КБ / 512 КБ256 КБ79
STM32L552VELQFP100512 КБ256 КБ83
STM32L552ZC, STM32L552ZELQFP144256 КБ / 512 КБ256 КБ111
STM32L552ZELQFP144512 КБ256 КБ115

STM32L562 — Cortex-M33, до 110 МГц

МикроконтроллерКорпусФлеш-памятьОЗУЛиний ввода-вывода
STM32L562CETxLQFP48512 КБ256 КБ38
STM32L562CETxPLQFP48512 КБ256 КБ36
STM32L562CEUxUFQFPN48512 КБ256 КБ38
STM32L562CEUxPUFQFPN48512 КБ256 КБ36
STM32L562MEYxPWLCSP81512 КБ256 КБ61
STM32L562MEYxQWLCSP81512 КБ256 КБ58
STM32L562QEIxUFBGA132512 КБ256 КБ110
STM32L562QEIxPUFBGA132512 КБ256 КБ108
STM32L562QEIxQUFBGA132512 КБ256 КБ106
STM32L562RETxLQFP64512 КБ256 КБ52
STM32L562RETxPLQFP64512 КБ256 КБ50
STM32L562RETxQLQFP64512 КБ256 КБ47
STM32L562VETxLQFP100512 КБ256 КБ83
STM32L562VETxQLQFP100512 КБ256 КБ79
STM32L562ZETxLQFP144512 КБ256 КБ115
STM32L562ZETxQLQFP144512 КБ256 КБ111

Перед разводкой платы сверяйте выводы с даташитом своего исполнения: в нём указаны допустимые напряжения на выводах, токи и номиналы внешних компонентов. Исполнения с SMPS и с внешним питанием ядра VDD12 отличаются выводами питания от обычных.

Частые вопросы

Чем STM32L562 отличается от STM32L552?

Криптографией. По RM0438 (4.2) только у STM32L562 есть аппаратный шифратор AES-256, ускоритель операций с открытым ключом PKA и расшифровка на лету OTFDEC для программы во внешней флеш-памяти на OCTOSPI. Блок хеширования HASH и генератор случайных чисел RNG есть у обеих линеек. Ядро, память и расположение выводов у них общие: в базе ST они объединены в линейку STM32L5x2.

Что делает бит TZEN у STM32L5?

Включает TrustZone. Пока TZEN = 0, STM32L5 работает как обычный микроконтроллер. После установки TZEN в байтах опций память и периферия делятся на защищённые (secure) и обычные (non-secure): после сброса вся SRAM защищённая, а программа загрузки раздаёт доступ блоками через контроллер GTZC (RM0438, 2.2 и 2.4). Загрузка при этом идёт только с защищённого адреса SECBOOTADD0 или из системного загрузчика RSS (табл. 7).

Сколько тактов ожидания флеш-памяти нужно STM32L5 на 110 МГц?

Пять в диапазоне напряжения ядра Range 0. По табл. 34 RM0438 в Range 0 и Range 1 без ожидания флеш-память работает до 20 МГц, каждый следующий такт добавляет 20 МГц; четыре такта (до 100 МГц) и пять (до 110 МГц) доступны только в Range 0. В Range 1 предел — 80 МГц, в Range 2 — 26 МГц.

Как запустить встроенный загрузчик STM32L5?

Без TrustZone — подать BOOT0 = 1 при сбросе: ядро стартует с адреса NSBOOTADD1, заводское значение которого — системный загрузчик по адресу 0x0BF9 0000 (RM0438, табл. 6). Загрузчик работает через USART1–USART3, I²C1–I²C3, SPI1–SPI3, FDCAN1 и USB в режиме DFU (AN2606, табл. 178).