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: частота — максимальная для линейки, память — от наименьшего до наибольшего исполнения.
| Линейка | Ядро, частота | Флеш-память | ОЗУ | Корпуса | Чем выделяется |
|---|---|---|---|---|---|
| STM32L552 | Cortex-M33, до 110 МГц | 256 КБ – 512 КБ | 256 КБ | LQFP48, LQFP64, LQFP100, LQFP144, UFBGA132, UFQFPN48, WLCSP81 | USB, UCPD, FDCAN, FMC, DAC, COMP, SAI, DFSDM, HASH, RNG, LPTIM, LPUART, TSC |
| STM32L562 | Cortex-M33, до 110 МГц | 512 КБ | 256 КБ | LQFP48, LQFP64, LQFP100, LQFP144, UFBGA132, UFQFPN48, WLCSP81 | USB, 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):
| Блок | STM32L552 | STM32L562 |
|---|---|---|
| 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 0 | Range 1 | Range 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 = 0 | BOOT0 = 1 |
|---|---|---|
| TrustZone выключена (TZEN = 0) | NSBOOTADD0, заводское значение — флеш-память 0x0800 0000 | NSBOOTADD1, заводское значение — загрузчик 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, STM32L552CE | LQFP48 | 256 КБ / 512 КБ | 256 КБ | 38 |
| STM32L552CC, STM32L552CE | UFQFPN48 | 256 КБ / 512 КБ | 256 КБ | 38 |
| STM32L552CE | LQFP48 | 512 КБ | 256 КБ | 36 |
| STM32L552CE | UFQFPN48 | 512 КБ | 256 КБ | 36 |
| STM32L552MEYxP | WLCSP81 | 512 КБ | 256 КБ | 61 |
| STM32L552MEYxQ | WLCSP81 | 512 КБ | 256 КБ | 58 |
| STM32L552QC, STM32L552QE | UFBGA132 | 256 КБ / 512 КБ | 256 КБ | 106 |
| STM32L552QEIx | UFBGA132 | 512 КБ | 256 КБ | 110 |
| STM32L552QEIxP | UFBGA132 | 512 КБ | 256 КБ | 108 |
| STM32L552RC, STM32L552RE | LQFP64 | 256 КБ / 512 КБ | 256 КБ | 52 |
| STM32L552RETxP | LQFP64 | 512 КБ | 256 КБ | 50 |
| STM32L552RETxQ | LQFP64 | 512 КБ | 256 КБ | 47 |
| STM32L552VC, STM32L552VE | LQFP100 | 256 КБ / 512 КБ | 256 КБ | 79 |
| STM32L552VE | LQFP100 | 512 КБ | 256 КБ | 83 |
| STM32L552ZC, STM32L552ZE | LQFP144 | 256 КБ / 512 КБ | 256 КБ | 111 |
| STM32L552ZE | LQFP144 | 512 КБ | 256 КБ | 115 |
STM32L562 — Cortex-M33, до 110 МГц
| Микроконтроллер | Корпус | Флеш-память | ОЗУ | Линий ввода-вывода |
|---|---|---|---|---|
| STM32L562CETx | LQFP48 | 512 КБ | 256 КБ | 38 |
| STM32L562CETxP | LQFP48 | 512 КБ | 256 КБ | 36 |
| STM32L562CEUx | UFQFPN48 | 512 КБ | 256 КБ | 38 |
| STM32L562CEUxP | UFQFPN48 | 512 КБ | 256 КБ | 36 |
| STM32L562MEYxP | WLCSP81 | 512 КБ | 256 КБ | 61 |
| STM32L562MEYxQ | WLCSP81 | 512 КБ | 256 КБ | 58 |
| STM32L562QEIx | UFBGA132 | 512 КБ | 256 КБ | 110 |
| STM32L562QEIxP | UFBGA132 | 512 КБ | 256 КБ | 108 |
| STM32L562QEIxQ | UFBGA132 | 512 КБ | 256 КБ | 106 |
| STM32L562RETx | LQFP64 | 512 КБ | 256 КБ | 52 |
| STM32L562RETxP | LQFP64 | 512 КБ | 256 КБ | 50 |
| STM32L562RETxQ | LQFP64 | 512 КБ | 256 КБ | 47 |
| STM32L562VETx | LQFP100 | 512 КБ | 256 КБ | 83 |
| STM32L562VETxQ | LQFP100 | 512 КБ | 256 КБ | 79 |
| STM32L562ZETx | LQFP144 | 512 КБ | 256 КБ | 115 |
| STM32L562ZETxQ | LQFP144 | 512 КБ | 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).
Смотрите также
- STM32Распиновки по корпусам, альтернативные функции, похожие по выводам МК
- STM32L4Cortex-M4 до 80 МГц с режимами низкого потребления: L4x1–L4x6 — линейки, MSI, загрузка и распиновки
- STM32L4+Cortex-M4 до 120 МГц, до 640 КБ ОЗУ, LTDC и DSI: L4P5/Q5 и L4R/S — линейки, загрузка и распиновки
- Таймер AVR и STM32Предделитель, OCRnA, PSC и ARR под частоту
- Скорость UARTUBRR, BRR, TH1 и ошибка скорости
- CAN FDКадр, BRS и фаза данных, DLC до 64 байт, CRC, ISO и non-ISO