STM32G0 – особенности периферии, ядра, архитектуры и ее отличие от STM32F0

9 октября

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

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

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

Новое семейство 32-битных микроконтроллеров STM32G0 с процессорным ядром Cortex-M0+ производства компании STMicroelectronics имеет очень высокий потенциал и является отличной альтернативой не только для 8- и 16-битных микроконтроллеров, но и для всего семейства STM32F0. Оба семейства, – STM32F0 и STM32G0, – относятся к сегменту бюджетных микроконтроллеров STM32 и предназначены в первую очередь для создания недорогих устройств (рисунок 1). При этом представители семейства STM32G0 также обладают высокой рабочей частотой и значительной производительностью, что позволяет использовать их для построения достаточно сложных приложений.

Рис. 1. Семейство микроконтроллеров STM32

Рис. 1. Семейство микроконтроллеров STM32

В ранее вышедшей статье «Новое семейство микроконтроллеров STM32G0» уже был дан краткий обзор семейства микроконтроллеров STM32G0. В данной статье проводится более глубокое сравнение STM32G0 и STM32F0, в том числе – процессорных ядер, организации памяти, шинной архитектуры, потребления, надежности и периферии.

Краткий обзор процессорных ядер Cortex-M0 и Cortex-M0+

Семейство микроконтроллеров STM32F0 построено на базе процессорного ядра ARM Cortex-M0, в то время как в STM32G0 используется ARM Cortex-M0+. Дополнительный «+» в названии подчеркивает, что это модернизированная версия ядра. Вполне очевидно, что процессорное ядро напрямую влияет на производительность микроконтроллера.

В таблице 1 сравниваются основные параметры ядер Cortex-M0 и Cortex-M0+, заявленные компанией ARM. В данном случае речь идет о референсных ядрах. Стоит помнить, что ARM предлагает широкий спектр опциональных функций, которые могут использоваться или не использоваться по усмотрению производителя микроконтроллеров.

Таблица 1. Параметры референсных процессорных ядер Cortex-M0 и Cortex-M0+ согласно документации ARM

Особенность Cortex-M0 Cortex-M0+
Ядро Armv6-M Armv6-M
Набор инструкций Thumb, Thumb-2 Thumb, Thumb-2
Системная шина 32-битная AMBA-3 AHB-Lite 32-битная AMBA-3 AHB-Lite
Отладочный интерфейс 32-битный Debug Access Port (DAP) с поддержкой JTAG или Serial Wire 32-битный Debug Access Port (DAP) с поддержкой JTAG или Serial Wire
Прямой интерфейс с IO 32-битный
Длина конвейера 3 2
Модуль защиты памяти (Memory Protection Unit, MPU) + (опционально)
Количество областей MPU 0 8
Трассировка (ETM или MTB) MTB (опционально)
Встроенный контроллер прерываний + +
Число каналов прерываний 32 32
Возможность изменения положения таблицы векторов прерывания +
Привилегированный/непривилегированный режим +
Производительность DMIPS/МГц 0,87…1,27 0,95…1,36
Производительность CoreMark®/МГц 2,33 2,46

Необходимо отметить наиболее важные отличия Cortex-M0+ от Cortex-M0:

  • Появление в Cortex-M0+ дополнительного 32-битного интерфейса для быстрого взаимодействия с портами ввода-вывода. Эта особенность позволяет Cortex-M0+, в отличие от Cortex-M0, быстро переключать выходы даже при невысокой тактовой частоте ядра.
  • Уменьшение длины конвейера. В отличие от Cortex-M0, в Cortex-M0+ используется двухступенчатый конвейер. Выбор числа ступеней конвейера является непростой задачей, но в данном конкретном случае целью проектировщиков было максимальное снижение потребления. Как показывают данные практических испытаний, эта цель была достигнута (таблица 2). Вне зависимости от выбранного техпроцесса (180/90/40 нм) потребление Cortex-M0+ оказывается меньше, чем у Cortex-M0 почти на 30%. Разумеется, уменьшение потребления обеспечено не только сокращением длины конвейера, но и оптимизацией других блоков ядра.

Таблица 2. Сравнение потребления референсных ядер Cortex-M0 и Cortex-M0+

Техпроцесс Cortex-M0 Cortex-M0+
Динамическое потребление, мкВт/МГц Площадь, мм² Динамическое потребление, мкВт/МГц Площадь, мм²
180ULL (1,8 В; 25°C) 66 0,11 47,4 0,098
90LP (1,2 В; 25°C) 12,5 0,03 9,37 0,028
40LP (1,1 В; 25°C) 5,3 0,008 3,8 0,0066
  • Появление в Cortex-M0+ модуля защиты памяти MPU (Memory Protection Unit). Наличие MPU особенно важно при использовании операционных систем, позволяющих параллельно выполнять несколько процессов. Благодаря MPU вероятность случайного или злонамеренного стирания или перезаписи памяти существенно уменьшается. Аналогичную важную роль играет поддержка привилегированного и непривилегированного режимов.
  • Возможность изменения положения таблицы векторов прерываний (опциональная функция).

Несмотря на урезание «лишнего» функционала, оптимизация ядра позволила повысить удельную производительность Cortex-M0+ до 2,46 CoreMark®/МГц, в то время как для Cortex-M0 этот показатель составляет 2,33 CoreMark®/МГц.

Подчеркнем, что большая часть из перечисленных функций и нововведений является опциональной, то есть каждый производитель микроконтроллеров самостоятельно решает, какие блоки и функции использовать, а какие нет. Выбор технологии производства (таблица 2) также остается за производителем контроллеров, а значит, площадь кристалла, тактовая частота, потребление и набор периферии могут варьироваться в широких пределах. Компания STMicroelectronics реализовала практически все возможные опции ядра Cortex-M0+ в своем новом семействе STM32G0. Рассмотрим подробнее особенности этого семейства в сравнении с STM32F0.

Системная архитектура

Как уже было отмечено выше, одним из важнейших нововведений, реализованных в Cortex-M0+, стало добавление 32-битной шины для прямого взаимодействия ядра с портами ввода-вывода. На рисунке 2 эта особенность показана на примере микроконтроллеров STM32G0x1 [1]. Для сравнения, в микроконтроллерах STM32F0 за взаимодействие ядра с портами ввода-вывода GPIO отвечает шина AHB2, которая подключена не к ядру, а к матрице шин (рисунок 3) [2].

Рис. 2. Архитектура микроконтроллеров STM32G0x1 [1]

Рис. 2. Архитектура микроконтроллеров STM32G0x1 [1]

Рис. 3. Архитектура микроконтроллеров STM32F0x1/STM32F0x2/STM32F0x8 [2]

Рис. 3. Архитектура микроконтроллеров STM32F0x1/STM32F0x2/STM32F0x8 [2]

Использование отдельной шины для портов ввода-вывода дает микроконтроллерам STM32G0 сразу несколько преимуществ. С одной стороны, прямое взаимодействие с ядром обеспечивает быстрое переключение портов даже при низкой тактовой частоте. А с другой – матрица шин освобождается от трафика, связанного с GPIO, что дополнительно повышает эффективность обмена данными.

Кроме преимуществ, определяемых использованием продвинутого ядра Cortex-M0+, микроконтроллеры STM32G0 также получили некоторые дополнительные архитектурные улучшения по сравнению с STM32F0. Здесь стоит в первую очередь отметить матрицу межсоединений Interconnect matrix. Благодаря этой матрице периферийные блоки оказываются напрямую связаны между собой и могут не только обмениваться данными, но и управлять друг другом даже в спящем режиме. В таблице 3 представлены связи, реализованные в микроконтроллерах STM32G0x1 [1].

Таблица 3. Матрица межсоединений в микроконтроллерах STM32G0x1 [1]

Источник Приемник
TIM1 TIM2 TIM3 TIM14 TIM15 TIM16 TIM17 LPTIM1 LPTIM2 ADC DAC DMAMUX COMP1 COMP2 IRTIM
TIM1 + + + + + +
TIM2 + + + + + + +
TIM3 + + + + + + +
TIM14 + + +
TIM15 + + + + +
TIM16 + +
TIM17 + + +
TIM6 + +
TIM7 +
LPTIM1 + +
LPTIM2 + +
USART1 +
USART4 +
ADC +
Датчик T +
VBAT +
VREFINT +
HSE + +
LSE + +
LSI +
MCO + +
EXTI + +
RTC и TAMP + + + +
COMP1 + + + + + + + +
COMP2 + + + + + + + +
SYST ERR + + + + + +

Рассмотрим конкретные примеры прямого взаимодействия между периферийными блоками [1].

Взаимодействие таймеров. Связи между таймерами могут использоваться для синхронизации и каскадирования. Если один из таймеров (TIM1, TIM2, TIM3, TIM15, TIM16 и TIM17) настроен в режиме ведущего, то он может сбрасывать, запускать, останавливать, тактировать счетчик ведомого таймера (TIM1, TIM2, TIM3 и TIM15). Связи работают в режимах Run, Sleep, Low-power run и Low-power sleep.

Взаимодействие между таймерами, EXTI и АЦП. Сигналы от таймеров (TIM1, TIM2, TIM3, TIM6, TIM15) и EXTI могут использоваться в качестве триггеров для запуска АЦП. Связи работают в режимах Run, Sleep, Low-power run и Low-power sleep.

Взаимодействие между АЦП и TIM1. АЦП также может формировать триггерные сигналы (от аналогового сторожевого компаратора) для TIM1 в режимах Run, Sleep, Low-power run и Low-power sleep.

Взаимодействие между таймерами, EXTI и ЦАП. Сигналы EXTI и некоторые таймеры, в том числе TIM2/TIM3/TIM15, TIM6, TIM7, LPTIM1/LPTIM2, TIM1 могут формировать триггерные сигналы для ЦАП в режимах Run, Sleep, Low-power run и Low-power sleep.

Взаимодействие между тактовыми генераторами и таймерами. Внешние тактовые генераторы (HSE, LSE), встроенные генераторы (HSI, LSI), выходной сигнал MCO, тактовый сигнал часов реального времени RTC, прерывание от RTC, сигналы с портов GPIO могут использоваться в схемах захвата таймеров TIM14/16/TIM17. Такой режим удобен в частности для калибровки встроенных генераторов LSI или HSI16 с помощью более точных генераторов, например, LSE или HSE.

Взаимодействие между RTC, TAMP, COMP1, COMP2 и малопотребляющими таймерами LPTIM1/LPTIM2. Для запуска таймеров LPTIM1/LPTIM2 могут использоваться сигналы RTC (alarm A/B), TAMP1/2 (input detection), COMP1/2_OUT, входные сигналы альтернативных функций GPIO. Данное взаимодействие возможно в режимах Run, Sleep, Low-power run, Low-power sleep, Stop 0 и Stop 1.

Взаимодействие между таймерами и компараторами. Таймеры TIM1, TIM2, TIM3 и TIM15 могут использоваться для формирования «слепых окон» при работе компараторов. Это нужно, например, для защиты от ложных включений при бросках токов во время коммутации. Таймеры кратковременно блокируют выход компараторов и не дают пройти ложным сигналам. Такое взаимодействие доступно в режимах Run, Sleep, Low-power run и Low-power sleep.

Взаимодействие между встроенными источниками напряжения, аналоговыми датчиками и АЦП. Такой вид связи традиционен для всех контроллеров STM32. С помощью АЦП можно измерять напряжение на выходе датчика температуры, напряжение VREFINT и напряжение на входе VBAT.

Взаимодействие между компараторами и таймерами. Компараторы COMP1 и COMP2 также способны формировать триггерные сигналы для таймеров TIM1, TIM2, TIM3, TIM15, TIM16 и TIM17.

Запуск таймеров при возникновении системных ошибок. Запуск таймеров возможен при возникновении следующих системных ошибок: CSS, CPU hardfault, RAM parity error, Flash ECC double error detection, а также при поступлении сигналов от PVD.

Взаимодействие таймеров, USART и инфракрасного порта. Выход TIMx_OC1 таймеров TIM16 и TIM17 посредством USART1 или USART4 могут формировать сигнал для инфракрасного порта IRTIM.

Взаимодействие таймеров и DMAMUX. Таймеры TIM14, LPTIM1 и LPTIM2, а также EXTI, могут быть использованы для формирования триггерных сигналов для DMAMUX.

Наличие матрицы межсоединений дает такие преимущества как:

  • освобождение процессора от выполнения рутинных операций по пересылке данных;
  • уменьшение потребления за счет возможности работы при выключенном процессоре;
  • освобождение шины матриц от трафика;
  • повышение детерминированности выполнения операций за счет использования аппаратных связей;
  • возможность взаимодействия периферийных блоков даже в режимах Run, Sleep, Low-power run, Low-power sleep, Stop 0, and Stop 1.

Подробнее об использовании матрицы межсоединений в режимах пониженного потребления будет сказано в разделе «Потребление».

Память

В настоящий момент в паре STM32G0 и STM32F0 именно семейство STM32F0 лидирует по объему встроенной пользовательской Flash-памяти – до 256 кбайт. Однако в ближайшем будущем STMicroelectronics планирует представить модели STM32G0 с объемом Flash до 512 кбайт. Объем памяти является не единственным различием между STM32G0 и STM32F0. Среди основных особенностей нового семейства следует отметить: изменение организации Flash, появление однократно программируемой памяти, наличие кэша инструкций, появление встроенной аппаратной поддержки коррекции кода ECC.

В микроконтроллерах STM32F0 используется 32-битная Flash-память, организованная в виде одного банка. Банк разбит на три блока: основная память (до 128 страниц по 2 кбайт), системная память (до 12 кбайт), опциональные байты (до 2×8 байт). В семействе STM32G0 используется 72-битная Flash-память (64 бита плюс 8 битов кода коррекции ECC). Объем системной памяти был увеличен до 28 кбайт, а число опциональных байтов возросло до 128. Кроме того, в STM32G0 добавлена однократно программируемая память OTP (One-Time Programmable) объемом 1 кбайт. Данная память записывается однократно и в дальнейшем не может быть стерта или изменена. OTP играет важную роль в повышении уровня защиты в бюджетных приложениях.

Вторым шагом, существенно повышающим уровень безопасности STM32G0, стало внедрение ECC (Error Code Correction) – системы контроля целостности информации, хранимой во Flash. Каждое двойное слово (64 бита), размещаемое во Flash, снабжается дополнительным кодом коррекции, который позволяет обнаруживать и исправлять одиночные ошибки, а также обнаруживать пары ошибок.

Одним из узких мест, ограничивающих производительность микроконтроллеров, был и остается процесс чтения Flash-памяти. Так как процессор работает значительно быстрее чем Flash, то для чтения данных на высоких тактовых скоростях приходится использовать циклы ожидания. Чтобы минимизировать потери времени, создатели микроконтроллеров предлагают различные решения. В частности, в STM32F0 используется буфер предвыборки (prefetch buffer), состоящий из 3 слов (по 32 бита). Каждый раз, когда очередное слово поступает для обработки в текущий буфер процессора (current buffer), в буфер предвыборки поступает новая порция данных из Flash. В результате новые данные всегда будут наготове. Очевидно, что такая схема имеет смысл только если чтение выполняется как минимум с одним циклом ожидания. Кроме того, буфер предвыборки оказывается бесполезен при обработке условных переходов (при ветвлении кода), так как в этих случаях вычитанные данные оказываются бесполезны.

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

Среди значительных изменений также следует отметить увеличение скорости записи во Flash. В STM32F0 запись производится по 16 бит за раз, то время как в STM32G0 в штатном режиме происходит запись по 72 бита за раз. Кроме того, в STM32G0 есть особый режим Fast Programming, при котором не происходит верификации данных, за счет чего время прожига сокращается.

В заключении данного раздела хочется еще раз подчеркнуть, что, согласно обещаниям STMIcroelectronics, в скором времени появятся микроконтроллеры с объемом Flash-памяти до 512 кбайт и с объемом ОЗУ до 128 кбайт (рисунок 4). Хотя уже сейчас по объему ОЗУ представители STM32G0 (до 36 кбайт ОЗУ) опережают представителей STM32F0 (до 32 кбайт ОЗУ).

Рис. 4. В новых моделях STM32G0 объем Flash будет достигать 512 кбайт

Рис. 4. В новых моделях STM32G0 объем Flash будет достигать 512 кбайт

Оптимизация работы с DMA с помощью мультиплексора DMAMUX

Важным элементом оптимизации работы с памятью являются контроллеры прямого доступа DMA. Контроллеры прямого доступа к памяти DMA (Direct Memory Access) необходимы для прямой передачи данных между периферийными устройствами и памятью без участия процессорного ядра. В микроконтроллерах STM32F0 используются один или два «традиционных» DMA. Например, в STM32F070xB присутствует один пятиканальный DMA с возможностью работы с широким спектром периферийных блоков (таблица 4) [2].

Таблица 4. Распределение каналов DMA на примере STM32F070xB [2]

Периферийный блок Канал 1 Канал 2 Канал 3 Канал 4 Канал 5
ADC ADC ADC
SPI SPI1_RX SPI1_TX SPI2_RX SPI2_TX
USART USART1_TX, USART3_TX) USART1_RX), USART3_RX) USART1_TX, USART2_TX USART1_RX, USART2_RX
I²C I2C1_TX I2C1_RX I2C2_TX I2C2_RX
TIM1 TIM1_CH1 TIM1_CH2 TIM1_CH4, TIM1_TRIG, TIM1_COM TIM1_CH3, TIM1_UP
TIM3 TIM3_CH3 TIM3_CH4, TIM3_UP TIM3_CH1, TIM3_TRIG
TIM6 TIM6_UP
TIM7 TIM7_UP
TIM15 TIM15_CH1, TIM15_UP, TIM15_TRIG, TIM15_COM
TIM16 TIM16_CH1, TIM16_UP TIM16_CH1, TIM16_UP
TIM17 TIM17_CH1, TIM17_UP TIM17_CH1, TIM17_UP

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

DMAMUX обеспечивает произвольное соединение между периферийными блоками и семиканальным DMA. При этом DMAMUX имеет 57 входов, 23 триггерных входа и 23 входа синхронизации. Таким образом, использование DMA оказывается максимально гибким.

Особенности системы тактирования и сброса

Система тактирования STM32G0 была существенно переработана по сравнению с STM32F0 с учетом опыта, полученного STMicroelectronics при разработке более поздних семейств STM32. Речь идет как о качественном улучшении параметров встроенных генераторов, так и об оптимизации архитектуры системы. В таблице 5 представлены ключевые различия схем тактирования и сброса STM32F0 и STM32G0 [1, 2].

Таблица 5. Основные отличия систем тактирования и сброса STM32F0 и STM32G0 [1, 2]

Особенность STM32F0 STM32G0
Максимальная тактовая частота процессора, МГц До 48 До 64
Максимальная частота шины APB, МГц До 48 До 64
Частота HSI, МГц 8 16
Точность HSI, диапазон 0…85°C 2% 1%
Частота HSE, МГц 4…32 4…48
Использование LSI и LSE для тактирования системы +
Выходы PLL 1 3
Делитель HSI (для SYSCLK) + (1…128)
Работа таймеров Timer 1 и 15 на удвоенной частоте системы (SYSCLK) +
Выход LSCO для подачи сигналов LSE и LSI +
Выход MCO PA8, PA9 PA8, PA9, PF2
Функция OSC_EN для HSE, LSE +
CSS для LSE +
Конфигурация вывода NRST Вход и выход Вход и выход, GPIO
Система сброса POR/PDR POR/PDR, BOR

Во-первых, стоит отметить увеличение максимальной рабочей частоты ядра до 64 МГц и расширение диапазона поддерживаемых частот внешнего генератора HSE.

Во-вторых, параметры встроенного генератора HSI также улучшились. Погрешность частоты была уменьшена до 1% в диапазоне температур 0…85°C.

Среди архитектурных различий между STM32G0 и STM32F0 можно отметить: появление двух дополнительных выходов ФАПЧ, возможность использования низкочастотных генераторов для тактирования системы (что интересно с точки зрения минимизации потребления), наличие дополнительного делителя для HSI при его использовании в качестве системного тактового сигнала, расширение возможностей по выводу внутренних тактовых сигналов на выводы микросхемы, наличие системы контроля качества тактового сигнала LSE (в STM32F0 такая система работала только для HSE).

В STM32G0 появилась возможность использования сигнала сброса NRST в качестве обычного входа-выхода, что крайне актуально для микроконтроллеров с малым числом выводов, которые компания STMicroelectronics планирует выпускать уже в ближайшем будущем.

Еще одним преимуществом STM32G0 над STM32F0 становится наличие схемы сброса BOR (Brown Out Reset). В отличие от POR/PDR, схема сброса BOR является программируемой. Для нее уровень порогового напряжения сброса системы определяется пользователем из четырех предложенных значений: 2,0/2,2/2,5/2,8 В. Пороговые напряжения выхода из состояния сброса на 100 мВ превышают напряжение сброса и составляют 2,1/2,3/2,6/2,9 В.

Новые периферийные блоки

По сравнению с STM32F0 номенклатура доступных периферийных блоков микроконтроллеров STM32G0 была существенно расширена, кроме того, характеристики многих блоков значительно улучшились. Это касается, в первую очередь, аналоговой периферии, периферии для работы в режимах пониженного потребления и периферии, относящейся к защите данных (таблица 6) [1, 2].

Таблица 6. Периферийные блоки в семействах микроконтроллеров STM32G0 и STM32F0 [1, 2]

Периферия STM32F0 STM32G0
АЦП (ADC) 12-битный, 19-канальный, 1 MSPS, питание 2,4…3,6 В 12-битный, 19-канальный,
2,5 MSPS, питание 1,62…3,6 В
ЦАП (DAC) 12-битный, до двух выходов 12-битный, до двух выходов
Источник опорного напряжения (VREFBUF) 2,048 В/2,5 В
Компараторы COMP1, COMP2 COMP1, COMP2
Контроллер сенсорных приложений TSC
RNG 32-битный RNG
Таймер с расширенным функционалом TIM1 TIM1
Таймеры общего назначения TIM3, TIM14, TIM15, TIM16, TIM17 TIM2, TIM3, TIM14, TIM15, TIM16, TIM17
Базовые таймеры TIM6, TIM7 TIM6, TIM7
Таймеры для режимов пониженного потребления LPTIM1, LPTIM2
Инфракрасный интерфейс IRTIM IRTIM
Независимый сторожевой таймер IWDG IWDG
Оконный сторожевой таймер WWDG WWDG
Часы реального времени RTC RTC
Интерфейсы общего назначения I2C, USART, SPI I2C, USART, SPI
SPI/I2S + +
CAN + Планируется в новых моделях
UART для режимов пониженного потребления LPUART
HDMI-CEC + +
USB 2.0 USB 2.0 FS Планируется в новых моделях
Поддержка функций USB Type-C™/USB Power Delivery interface (UCPD) +
ID + +
AES +
Блок защиты от взлома TAMP 5х32-битных регистров, 2 входа и 4 внутренних канала для обнаружения взлома

По сравнению с STM32F0, в STM32G0 появился новый аналоговый блок – буфер опорного напряжения VREFBUF, который может выступать в качестве источника опорного напряжения как для встроенных ЦАП и АЦП, так и для внешних микросхем (напряжение буфера поступает на вывод VREF+). Выходное напряжение VREFBUF выбирается пользователем из двух значений: 2,048 В или 2,5 В. Стоит отметить, что VREFBUF присутствует не во всех корпусных исполнениях.

Кроме VREFBUF, стоит также отметить модернизацию цифро-аналогового преобразователя. Во-первых, согласно документации, в микроконтроллерах STM32F0 при использовании максимальной разрядности 12-бит скорость измерения АЦП составит 1 MSPS (1 миллион выборок в секунду), в то время как для STM32G0 скорость преобразования при той же разрядности увеличена до 2,5 MSPS (на одно преобразование тратится 0,4 мкс). Во-вторых, в АЦП STM32G0 появился аппаратный блок передискретизации, позволяющий увеличивать разрешение до 16 бит. В-третьих, количество цифровых компараторов (не путать с аналоговыми компараторами) у встроенного АЦП STM32G0 было увеличено до трех, в то время как у АЦП STM32F0 был только один. И в-четвертых, огромным плюсом STM32G0 стало расширение диапазона рабочих напряжений АЦП до 1,62…3,6 В. Для сравнения: нормальная работа АЦП в STM32F0 возможна при напряжении питания VDDA 2,4…3,6 В. Это крайне важно, так как микроконтроллеры STM32G0 ориентированы на создание малопотребляющих устройств с батарейным питанием.

При проектировании STM32G0 одной из важнейших задач было уменьшение потребления, поэтому вполне ожидаемым стало появление и специализированных периферийных блоков, способных работать в режимах глубокого сна, вплоть до Stop 0 и Stop 1 LPTIM1, LPTIM2 и LPUART.

Функционал традиционных таймеров в STM32G0 остался без изменений, однако благодаря изменению системы тактирования сразу два таймера TIM1 и TIM15 получили возможность работы на удвоенной частоте процессора (128 МГц), что позволяет увеличить точность измерений временных интервалов.

На момент выхода семейства STM32F0 проблемы безопасности низкобюджетных приложениий стояли не так остро как сейчас, но после начала расцвета IoT все изменилось. Теперь практически любое IoT-устройство должно иметь минимальный набор защитных функций. Именно это объясняет появление в STM32G0 генератора случайных чисел RNG, блока защиты от взлома TAMP и блока шифрования AES (не во всех моделях). Использование генератора случайных чисел и AES для решения задач по защите данных является вполне понятным, а вот о блоке TAMP будет рассказано подробнее в разделе «Безопасность и защита от взлома».

В настоящий момент в семействе STM32G0, в отличие от STM32F0, не представлены модели с поддержкой USB 2.0 FS и CAN. Тем не менее, как следует из информации на сайте ST, такие модели следует ожидать уже в ближайшем будущем. В то же время на вооружении STM32G0 уже есть контроллер UCPD, обеспечивающий аппаратную поддержку USB Type-C™ (спецификация 1.2) и USB Power Delivery (спецификация 3.0, V1.1).

Как показала практика, USB-интерфейс имеет огромное значение не только для обмена данными, но и для питания электронных устройств. В ранних стандартах USB параметры питания были описаны достаточно размыто, и новый стандарт закрывает этот пробел. Интерфейс USB PDI (Power Delivery Interface) необходим для четкого согласования параметров питания между устройствами. При подключении нового устройства происходит обмен данными, в ходе которого определяются роли устройств (кто источник, а кто приемник), профиль источника (напряжение и выходная мощность) и так далее.

В настоящий момент микроконтроллеры STM32G081 имеют сразу два UCPD и способны организовывать два порта USB Type-C.

Потребление

Стоит еще раз отметить, что снижение потребления было одной из основных задач при создании STM32G0. Эта задача была успешно решена.

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

Процессорное ядро. В STM32G0 используется процессорное ядро ARM Cortex-M0+. В таблице 2 было представлено сравнение потребления «голых» референсных ядер Cortex-M0 и ARM Cortex-M0+. По данным ST, потребление реальных микроконтроллеров STM32F0 в активном режиме (RUN) при тактировании всех периферийных блоков не превышает 500 мкА/МГц и 250 мкА при отключенной периферии (температура 25°C и питание 3,6 В). Потребление STM32G0 при отключенной периферии составляет около 100 мкА/МГц (температура 25°C и питание 3,3 В). При снижении тактовой частоты происходит дополнительное уменьшение потребления STM32G0, например, при частоте 16 МГц, удельное потребление составляет 93 мкА/МГц.

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

Увеличение числа спящих режимов. Здесь стоит напомнить, что у микроконтроллеров STM32F0 было только три спящих режима: Sleep mode (отключено процессорное ядро, остальная периферия активна),  Stop mode (все источники тактирования остановлены), Standby mode (полное отключение всех без исключения блоков домена 1,8 В). В STM32G0 спящих режимов сразу семь (рисунок 5):

  • Low-power run. Данный режим активируется при уменьшении тактовой частоты ниже 2 МГц и отключении основного регулятора напряжения MR. Питание домена VCORE осуществляется малопотребляющим встроенным регулятором LPR. Отключение MR увеличивает время пробуждения, но уменьшает потребление до 90 мкА/МГц.
  • Sleep mode: отключено процессорное ядро, остальная периферия активна. Потребление около 32 мкА/МГц (при 16 МГц).
  • Low-power sleep отличается от режима Sleep переключением питания домена VCORE с основного регулятора напряжения MR на LPR. Это уменьшает потребление, но увеличивает время пробуждения.
  • Stop 0: содержимое ОЗУ и регистров сохраняется, тактирование всех блоков домена VCORE остановлено, тактовые генераторы HSI16 и HSE, а также PLL отключены. Генераторы LSI и LSE могут оставаться активными. Также могут сохранять активность RTC (Stop mode with RTC, Stop mode without RTC), TAMP и специализированные блоки LPTIM1, LPTIM2, LPUART, USART, I2C.
  • Stop 1 отличается от режима Stop 0 переключением питания домена VCORE с основного регулятора напряжения MR на LPR. Потребление падает до единиц мкА.
  • Standby mode: домен VCORE полностью отключен. Тем не менее, возможно сохранение содержимого ОЗУ при сохранении включенного состояния малопотребляющего встроенного регулятора LPR (режим Standby mode with SRAM retention). Генераторы LSI и LSE могут оставаться активными. Также может сохранять активность RTC (Standby mode with RTC, Standby mode without RTC). Потребление в таком режиме падает до сотен нА.
  • Shutdown mode: активным может оставаться только LSE, однако мониторинг напряжения питания не выполняется.

Рис. 5. Потребление STM32G0 и в STM32F0 различных режимах

Рис. 5. Потребление STM32G0 и в STM32F0 различных режимах

Появление специализированной периферии для малопотребляющих режимов работы. Как уже отмечалось выше, по сравнению с STM32F0 в STM32G0 был расширен перечень периферийных блоков, способных работать в режимах пониженного потребления вплоть до STOP. Речь идет о LPTIM1, LPTIM2 и LPUART.

Появление матрицы межсоединений. Матрица межсоединений позволяет периферийным блокам обмениваться данными без участия процессора. Таким образом, в отличие от STM32F0, микроконтроллеры STM32G0 способны решать целый ряд задач без выхода из спящих режимов, а это может стать очень важным плюсом в сверхмалопотребляющих приложениях. В таблице 7 представлены варианты взаимодействия периферийных блоков в спящих режимах [3].

Таблица 7. Варианты взаимодействия периферийных блоков STM32G0 в спящих режимах [3]

Источник Приемник Run/Low-power run Sleep/Low-power sleep Stop
TIMx TIMx + +
ADCx, DACx + +
DMA + +
COMPx + +
COMPx TIM1, 2, 3 + +
LPTIMERx + + +
ADCx TIM1 + +
RTC TIM16 + +
LPTIMERx + + +
Генераторы (внешние и внутренние) TIM14, 16, 17 + +
CSS RAM (parity error), Flash memory (ECC error), COMPx, PVD TIM1, 15, 16, 17 + +
CPU (hard fault) TIM1, 15, 16, 17 +
GPIO TIMx + +
LPTIMERx + + +
ADC, DACx + +

Расширение диапазона питающих напряжений STM32G0 до 1,7 В (VDD) позволяет снизить потребление, а также использовать для питания низковольтные батарейки. Для сравнения, диапазон рабочих напряжений STM32F0 составляет 2,0…3,6 В (VDD). Единственным исключением является линейка STM32F0x8 с фиксированным напряжением питания 1,8 В ±8% (VDD) и аналоговым питанием 1,65…3,6 В (VDDA).

Питание от дежурной батарейки. В некоторых устройствах требуется обеспечить работу отдельных периферийных блоков, а также сохранность данных или настроек микроконтроллера при питании от дежурной батарейки (при отключении основного источника питания). Для этих целей в STM32G0 был реализован отдельный домен VBAT, в который входят следующие периферийные блоки: RTC, TAMP, LSE (32,768 кГц) и дежурные регистры (backup registers). Питание домена осуществляется от внешней батарейки или аккумулятора 1,55…3,6 В.

Стоит также отметить, что в качестве дежурного элемента питания для домена VBAT может выступать суперконденсатор. В большинстве случаев для его зарядки от VDD не потребуется никаких внешних соединений или компонентов, так как в составе STM32G0 для этого предусмотрены ограничительные резисторы 5 и 1,5 кОм.

Безопасность и защита от взлома

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

Как уже было сказано выше, у отдельных представителей семейства STM32G0 появилось сразу три специализированных блока: AES, RNG и TAMP, к этому также стоит добавить и модуль MPU, и традиционные для STM32 методы защиты памяти (RDP, PcROP, WRP).

AES – аппаратный ускоритель, обеспечивающий шифрование и дешифрование данных, согласно алгоритму AES (соответствует NIST “Advanced encryption standard (AES) и FIPS publication 197” от ноября 2001 года). Кодирование и декодирование происходит с помощью ключа длиной 128/256 бит (рисунок 6). Работа ускорителя осуществляется без участия процессора, а для обмена данными может использоваться DMA (один канал – для входных данных, а второй – для выходных).

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

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

Для генерации ключа или других случайных данных необходим генератор случайных чисел. В микроконтроллерах STM32G0 генератор случайных чисел RNG формирует 32-битные случайные значения с помощью двух источников аналогового шума.

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

Для защиты памяти в STM32G0 предусмотрено три основных механизма: RDP, PcROP и WRP.

RDP определяет защиту всей памяти и имеет три уровня (таблица 8) [3]:

  • Level0 – без защиты;
  • Level1 – защита Flash от чтения и записи в режиме отладки;
  • Level2 – наиболее строгий уровень защиты, который, в отличие от Level1, является необратимым.

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

Область памяти Уровень защиты Действия при выполнении пользовательского кода Действия при отладке, загрузке из ОЗУ или загрузке из System Memory (loader)
Чтение Запись Стирание Чтение Запись Стирание
User memory 1 + + + н/о н/о н/о
2 + + +
System memory 1 + + н/о н/о
2 + н/о н/о
Option bytes 1 + + + + + +
2 + н/о н/о
Backup registers 1 + + н/о н/о
2 + +

PcROP (Proprietary code Read Out Protection) позволяет защитить отдельные участки Flash от чтения и записи. В этом случае участок кода отмечается как «только для исполнения».

WRP обеспечивает защиту выбранных областей от записи и чтения.

Еще одним нововведением STM32G0 по сравнению с STM32F0 стало появление системы защиты от взлома TAMP. У STM32G0 есть пять 32-битных дежурных регистров (TAMP_BKPxR), содержимое которых сохраняется даже при питании от батарейки домена VBAT. Эти регистры необходимы для хранения особенно важной информации и имеют защиту от взлома. У микроконтроллеров STM32G0 есть два входа, на которые могут подаваться сигналы с различных датчиков, например, с датчика вскрытия корпуса. Получив сигнал о взломе, система защиты может:

  • сформировать временную метку (с помощью RTC) или сгенерировать триггер для LPTIM;
  • автоматически стереть содержимое регистров TAMP_BKPxR;
  • пробудить микроконтроллер из спящего режима (Stop and Standby mode).

Надежность

По сравнению с STM32F0, микроконтроллеры STM32G0 оказываются лучше подготовлены не только ко взлому со стороны злоумышленников, но и к негативным воздействиям объективных внешних факторов: помех, перегрева и прочего.

Надежность микроконтроллеров STM32G0 существенно возросла благодаря целому ряду нововведений и улучшений:

  • Погрешность частоты HSI была уменьшена до ±1% в диапазоне температур 0…85°C, а в диапазоне температур -40…125°C погрешность составляет -2/+1,5 %. Повышение точности генератора позволяет во многих случаях обходиться без внешнего кварца.
  • Появление схемы сброса BOR (Brown Out Reset) позволяет гибко учитывать различные особенности источника питания.
  • Система контроля тактового сигнала LSECSS (Clock security system for LSE clock) теперь используется не только с HSE, но и с LSE. Контроль работоспособности внешнего тактового генератора имеет большое значение для ответственных приложений.
  • По сравнению с STM32F0, устойчивость STM32G0 к наносекундным импульсам напряжения возросла с 2 кВ до 4,5 кВ.
  • Диапазон рабочих температур STM32G0 был расширен до -40…125°C, в то время как микроконтроллеры STM32F0 могли работать при температурах до 105°C (некоторые модели до 125°C, но не с максимальной производительностью).
  • Система контроля четности позволяет обнаруживать повреждения данных ОЗУ. Для этого на каждые 32 бита данных приходится 4 бита четности (ширина шины данных 36 бит).
  • Система контроля целостности Flash, – ECC (Error Code Correction), позволяет обнаруживать и исправлять одиночные ошибки. Она также способна обнаруживать пары ошибок. Для этого каждое двойное слово данных (64 бита) снабжается дополнительным кодом коррекции (8 бит).

Повышение уровня надежности и безопасности делает STM32G0 более оптимальным выбором для ответственных приложений.

Дополнительные преимущества STM32G0

Чтобы закончить сравнение с STM32F0, следует коснуться еще нескольких важных преимуществ STM32G0, а именно: экономии на внешних компонентах, упрощения трассировки, увеличения GPIO, появления моделей с малым числом выводов и моделей с большим объемом памяти.

Благодаря оптимизации внутренней структуры количество выводов питания в STM32G0 было уменьшено. Так, например, в моделях с 64-выводными корпусами (а также в моделях с меньшим числом выводов) присутствует только одна пара выводов VDD-VSS (рисунок 7). С одной стороны, это упрощает разводку контроллера, а с другой – сокращает число развязывающих конденсаторов.

Рис. 7. У всех моделей STM32G0 с числом выводов до 64 включительно есть всего одна пара выводов питания VDD/VSS

Рис. 7. У всех моделей STM32G0 с числом выводов до 64 включительно есть всего одна пара выводов питания VDD/VSS

Упрощение трассировки печатной платы и сокращение числа внешних компонентов обеспечивается также за счет расширения номенклатуры встроенных периферийных блоков (в частности VREFBUF и ЦАП). Во многих случаях пользователь может вполне обойтись без внешнего ЦАП или ИОН. Кроме того, еще раз стоит напомнить об улучшении параметров встроенного генератора HSI, который позволяет отказаться от внешнего кварцевого резонатора в широком спектре приложений.

По сравнению с STM32F0, у микроконтроллеров STM32G0 увеличилось количество выводов GPIO. Разница для некоторых корпусных исполнений достигает 9, например, между STM32G071 и STM32F071.

Говоря об увеличении объемов памяти и появлении моделей с малым числом выводов, можно привести подробный план развития семейства (рисунок 8).

Рис. 8. Номенклатура и направления развития семейства STM32G0

Рис. 8. Номенклатура и направления развития семейства STM32G0

Экосистема

Об инструментах разработки и отладки для STM32G0, а также их месте в экосистеме STM32  было рассказано в статье «Новое семейство микроконтроллеров STM32G0». С момента ее публикации наиболее значимым событием стало появление бюджетной отладочной платы STM32G071B-DISCO (рисунок 9). Таким образом, сейчас к услугам разработчиков предлагаются уже четыре отладочные платы: NUCLEO-G070RB, NUCLEO-G071RB, STM32G071B-DISCO и STM32G081B-EVAL. В ближайшем будущем планируется выпуск еще двух плат: STM32G0316-DISCO и NUCLEO-G031K8.

Рис. 9. Внешний вид отладочной платы STM32G071B-DISCO

Рис. 9. Внешний вид отладочной платы STM32G071B-DISCO

Платы NUCLEO, хотя и не обладают собственным развитым функционалом, но, тем не менее, дают разработчику простор для использования плат расширения:

  • X-NUCLEO-GNSS1A1 – плата расширения с навигационным модулем Teseo-LIV3F с поддержкой ГЛОНАСС, GPS, Galileo, BeiDou, QZSS;
  • X-NUCLEO-6180XA1 – плата расширения с датчиком приближения VL6180X;
  • X-NUCLEO-CCA01M1 – плата расширения с аудиосистемой STA350BW;
  • X-NUCLEO-IDB05A1 – плата расширения с BLE-модулем SPBTLE-RF;
  • X-NUCLEO-IKS01A2 – плата расширения для работы с МЭМС-сенсорами: трехосевым акселерометром LSM6DSL (±2/±4/±8/±16 g), трехосевым гироскопом (±125/±245/±500/±1000/±2000 dps), инерционным модулем LSM303AGR и датчиком давления LPS22HB;
  • X-NUCLEO-NFC05A1 – плата расширения с функционалом NFC-ридера на базе ST25R3911B;
  • X-NUCLEO-LPM01A – плата расширения с функционалом программируемого источника питания, имеющего диапазон выходных напряжений 1,8…3,3 В и возможность измерения потребляемого тока;
  • X-NUCLEO-PLM01A1 – плата расширения с SOC-модемом ST7580, обеспечивающим передачу данных по линиям питания;
  • X-NUCLEO-STMODA1 – переходная плата, позволяющая подключать модули с новым интерфейсом STMod+ к платам NUCLEO.

Для разработки и отладки программ для STM32G0 традиционно предлагается использовать STM32CubeMX с последней версией программного пакета STM32CubeG0 (сейчас – STM32Cube_FW_G0_V1.3.0). В программный пакет традиционно входят примеры работы с периферией, выполненные с помощью HAL и LL, библиотеки Middleware, шаблоны и готовые примеры для отладочных плат.

Огромным плюсом STM32G0 также является наличие бесплатных IDE: STM32CubeIDE и Keil (специальная бесплатная лицензия для семейства STM32G0).

Заключение

Несмотря на то что семейства STM32F0 и STM32G0 относятся к одному и тому же бюджетному сегменту микроконтроллеров STM32, у STM32G0 есть множество важных преимуществ:

  • производительное и эффективное процессорное ядро ARMCortexM0+;
  • расширенный объем Flashи ОЗУ;
  • увеличенная номенклатура периферийных блоков (VREFBUF, TAMP, BOR, RNG, AES, LPTIM, LPUART, UCPD и другие);
  • оптимизированная система тактирования и сброса;
  • улучшенные параметры многих периферийных блоков: повышена точность HSI, увеличено быстродействие и расширен функционал АЦП и так далее;
  • минимальный уровень потребления, достигаемый за счет расширения перечня спящих режимов, оптимизации ядра и системы тактирования, появления специализированной периферии (LPTIM, LPUART) и прочее;
  • повышенный уровень безопасности, обеспеченный, в первую очередь, за счет дополнительной периферии (TAMP, RNG, AES);
  • повышенная надежность: более высокая стойкость к помехам, расширенный температурный диапазон, системы контроля целостности данных Flash и ОЗУ;
  • оптимизированные корпусные исполнения, позволяющие сократить число внешних компонентов и упростить трассировку.

Литература

    1. Reference manual. STM32G0x1 advanced Arm®-based 32-bit MCUs. Rev 1. STMicroelectronics, 2018.
    2. Reference manual. STM32F0x1/STM32F0x2/STM32F0x8 advanced ARM®-based 32-bit MCUs. Rev 9. STMicroelectronics, 2017.
    3. Arm® Cortex®-M0+ 32-bit MCU, 128 KB Flash, 36 KB RAM, 4x USART, timers, ADC, DAC, comm. I/Fs, AES, RNG, 1.7-3.6V Datasheet – production data. Rev 2. STMicroelectronics, 2018.
•••

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

О компании ST Microelectronics

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

Товары
Наименование
STM32F070RBT6 (ST)
STM32G071CBT6 (ST)
STM32F071RBT6 (ST)
STM32F051C8T6TR (ST)
STM32G071B-DISCO (ST)
NUCLEO-G070RB (ST)
NUCLEO-G071RB (ST)
STM32G081B-EVAL (ST)
X-NUCLEO-GNSS1A1 (ST)
TESEO-LIV3F (ST)
X-NUCLEO-6180XA1 (ST)
VL6180XV0NR/1 (ST)
X-NUCLEO-CCA01M1 (ST)
X-NUCLEO-IDB05A1 (ST)
SPBTLE-RF0 (ST)
X-NUCLEO-IKS01A2 (ST)
LSM6DSLTR (ST)
LPS22HBTR (ST)
X-NUCLEO-NFC05A1 (ST)
ST25R3911B-AQFT (ST)