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

1 октября 2021

потребительская электроникаавтоматизацияинтернет вещейуниверсальное применениеSTMicroelectronicsстатьяинтегральные микросхемыDMASTM32Cortex-M7NVICDMAMUXSTM32H7TCMAXI

Владислав Барсов (КОМПЭЛ)

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

Содержание

Если среди микроконтроллеров STM32 выбирать семейство, оптимально подходящее для приложений с высокими требованиями к производительности, то таким, несомненно, будет новое семейство STM32H7. Оно создано на базе процессорного ядра ARM Cortex-M7 и имеет рекордную для STM32 максимальную частоту работы, составляющую 550 МГц. Встроенные аппаратные модули, математические ускорители и богатая периферия справляются с задачами, которые обычно решает процессорное ядро, тем самым освободив его вычислительные мощности для других процессов. При необходимости еще больше увеличить производительность или произвести параллельные вычисления можно воспользоваться моделями микроконтроллеров с двумя ядрами: ARM Cortex-M7 и вспомогательным ARM Cortex-M4.

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

Процессорное ядро ARM Cortex-M7

Все микроконтроллеры семейства STM32H7 созданы по техпроцессу 40 нм на базе 32-битного ядра ARM Cortex-M7. Данное ядро спроектировано по архитектуре ARMv7E-M и предназначено для обеспечения высокого уровня производительности при сохранении простоты использования. Оно работает на основе RISC-команд, представляющих собой набор простейших операций. Использование RISC-архитектуры позволяет увеличить скорость обработки данных и, соответственно, снизить энергопотребление.

Основной вклад в увеличение производительности ядра вносят три функциональных блока (рисунок 1):

  • блок предварительной выборки (PFU);
  • блок обработки данных (DPU);
  • блок загрузки/хранения (LSU).

Рис. 1. Блок-схема устройства процессорного ядра Cortex-M7

Рис. 1. Блок-схема устройства процессорного ядра Cortex-M7

DPU

ARM Cortex-M7 – суперскалярный процессор (рисунок 2). Это означает, что в нем поддерживается параллелизм на уровне инструкций. Благодаря наличию двойного шестиступенчатого конвейера при выполнении определенных условий есть возможность обрабатывать две инструкции одновременно. Для увеличения эффективности блок DPU разделен на несколько частей:

  • два арифметико-логических блока (ALU), один из которых может выполнять SIMD операции;
  • конвейер для операций умножения (MAC) с возможностью расчета одной MAC-операции за цикл;
  • конвейер для операций с плавающей точкой (FPU) с двойной точностью.

Когда операция достигает стадии выпуска, она разделяется на микрооперации. Далее каждая микрооперация обрабатывается в соответствующем конвейерном блоке.

Рис. 2. Суперскалярная архитектура ядра ARM Cortex-M7

Рис. 2. Суперскалярная архитектура ядра ARM Cortex-M7

PFU

За один цикл PFU передает одну 64-битную инструкцию в DPU и включает в себя:

  • буфер для четырех 64-битных слов;
  • кэш для прогнозируемого адреса ветвления (BTAG) на один цикл. 

LSU

Блок LSU (рисунок 3) обеспечивает два 32-битных или один 64-битный канал загрузки/хранения с буферизацией для увеличения пропускной способности каналов. Компилятор скрывает сложность управления конвейером, оптимизирует код и позволяет в полной мере воспользоваться всеми преимуществами этой архитектуры.

Рис. 3. Параллельное выполнение арифметических операций и операций загрузки/хранения

Рис. 3. Параллельное выполнение арифметических операций и операций загрузки/хранения

TCM-память

В Cortex-M7 так же предусмотрена TCM-память (рисунок 4). Это специальная память, подключенная напрямую к процессорному ядру. Она используется для хранения данных (DTCM) или инструкций (ITCM) и обеспечивает детерминированное время доступа к хранимой там информации без арбитража и лишних задержек. Так, например, в ней можно расположить таблицу векторов прерываний или критические секции кода, к которым часто обращается программа. Кроме этого, шина ядра AHBS дает возможность использовать прямой доступ (DMA) к TCM RAM-памяти.

Рис. 4. TCM-память в ядре ARM Cortex-M7

Рис. 4. TCM-память в ядре ARM Cortex-M7

Интерфейс AXIM

В отличие от процессорного ядра ARM Cortex®-M4, где одновременно используются несколько AHB-шин для обмена данными с системной памятью, в ARM Cortex®-M7 эту задачу берет на себя одна мастер-шина AXIM (рисунок 5). Она представляет собой улучшенный интерфейс, соединяющий ядро со внешней и внутренней памятью, а также определенной периферией. AXIM может быть использована для:

  • получения инструкций;
  • заполнения и удаления строк кэша данных;
  • доступа с некэшируемым и нормальным типам памяти;
  • доступа к строго упорядоченным данным и данным устройств.

Рис. 5. AXI-интерфейс в ядре ARM Cortex-M7

Рис. 5. AXI-интерфейс в ядре ARM Cortex-M7

Кэш

В дополнение к интерфейсу AXIM ядро ARM Cortex®-M7 оснащено кэшем данных (D-cache) на 16 кбайт и инструкций (I-cache) на 16 кбайт (рисунок 6). Они обеспечивают быстрый доступ памяти при работе ядра на высоких частотах и с низкоскоростной внешней памятью. Длина строки в обоих кэшах 256 байт. В них используется четырехсторонняя ассоциативная схема для кеширования данных и двусторонняя ассоциативно-множественная схема для инструкций.

Если кэш включен, с его помощью обрабатывается любой запрос, за исключением запросов, предназначенных для TCM-памяти или идущих через шину AHBP. Когда данные попадают в кэш и соответствуют критериям кэширования, они извлекаются или записываются в соответствующую ОЗУ. В случае отключенного кэша или работы с некэшируемыми данными доступ к памяти осуществляется напрямую через интерфейс AXIM.

Рис. 6. Кэш в ядре ARM Cortex-M7

Рис. 6. Кэш в ядре ARM Cortex-M7

Шинная архитектура

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

Рис. 7. Шинная архитектура микроконтроллеров STM32H7

Рис. 7. Шинная архитектура микроконтроллеров STM32H7

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

Первый домен (D1) связывает высокоскоростные управляющие и управляемые узлы (рисунок 8): всего семь управляемых блоков (ASIB) и семь управляющих (AMIB). В число ASIB входят два моста AXI/AHB, Flash A, Flash B, FMC, QUAD SPI и AXI SRAM. К блокам AMIB относятся: шина AHB от второго домена, процессорное ядро ARM Cortex-M7, контроллер SDMMC1, узел прямого доступа к памяти (MDMA), графический ускоритель (DMA2D), контроллер управления дисплеем LTDC и ускоритель ART.

Рис. 8. Блок-схема домена (D1)

Рис. 8. Блок-схема домена (D1)

Из-за высоких скоростей обмена данными требования к матрице шин здесь гораздо выше чем, например, к конструкции, используемой в предыдущем флагманском семействе STM32F7. Поэтому в первом домене микроконтроллеров STM32H7 используется новая 64-битная шина AXIM вместо классической для STM32 32-битной шины.

Когда в AXIM два узла ASIB одновременно пытаются получить доступ к одному узлу AMIB, используется арбитраж на основе приоритетов. Каждый блок ASIB имеет программируемый канал чтения и записи с приоритетами (QoS), значение которых может составлять 0…15. Чем выше число, тем выше приоритет. Если две совпадающие транзакции поступают в один AMIB, транзакция с более высоким приоритетом проходит раньше, чем транзакция с более низким.

Второй домен (D2) создан на базе 32-битной AHB-шины. К ней подключается второе ядро ARM Cortex-M4 (если оно есть в выбранной модели), имеются относительно медленные интерфейсы, такие как, например, USB или Ethernet, и другая менее быстрая периферия. У шины также есть свои модули прямого доступа к памяти (DMA1, DMA2) и своя оперативная память. Это позволяет производить управление передачей данных и интерфейсами независимо от первого домена.

Третий домен (D3) используется для энергосберегающих режимов. Он оказывается крайне полезен, когда есть необходимость перевести микроконтроллер в режим глубокого сна, то есть когда требуется временно отключить и первый, и второй домены питания. Третий домен также имеет свою ОЗУ и свой блок BDMA. К нему подключается малопотребляющая периферия, способная при наступлении заданного события перевести в активный режим нужную периферию на других доменах.

Домены связаны друг с другом четырьмя 32-битными AHB-шинами:

  • D2-to-D1 позволяет управляющим модулям второго домена получать доступ к управляемым модулям первого, а также через шину D1-к-D3 – к блокам третьего домена;
  • D1-to-D2 позволяет управляющим модулям первого домена получать доступ к управляемым модулям второго;
  • D1-to-D3 позволяет управляющим модулям первого домена получать доступ к управляемым блокам третьего;
  • D2-to-D3 открывает доступ управляющим модулям второго домена к управляемым блокам третьего.

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

Контроллер прерываний NVIC

В микроконтроллерах STM32H7 и первое ядро (ARM Cortex-M7) и второе (ARM Cortex-M4 в линейках с двумя ядрами) имеют свои контроллеры прерываний — NVIC1 и NVIC2, соответственно. Они обладают следующими особенностями:

  • до 150 маскируемых каналов прерываний (за исключением 16 линий прерываний Cortex-M7 с FPU);
  • 16 программируемых уровней прерываний (используются 4 бита);
  • обработка исключений и прерываний с малой задержкой;
  • система управления питанием;
  • системные регистры управления.

Для работы приложения могут оказаться крайне полезными: система динамической установки уровней прерываний, быстрое реагирование на запросы прерываний (необходимо для приложений реального времени), технология постановки в очередь “Tail chaining”, а также возможность перемещения таблицы векторов прерываний. Последнее позволяет разработчику адаптировать размещение процедур обслуживания прерываний в структуре памяти приложения.

Большая часть периферии имеет свой уникальный вектор прерываний. Это упрощает разработку программ, так как нет необходимости определять источник запроса прерывания. Контроллер NVIC предоставляет несколько способов для эффективной обработки прерываний:

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

Рис. 9. Вложенная обработка исключений

Рис. 9. Вложенная обработка исключений

  • Tail chaining применяется, если во время обработки первого прерывания приходит второе, но с более низким или равным приоритетом (рисунок 10). В этом случае запрос на второе прерывание встает в очередь. Когда обработка первого прерывания будет завершена, контекст будет сохранен, фаза восстановления нормальной работы приложения будет пропущена, и контроль будет напрямую передан обработчику второго исключения. Это сделано для уменьшения времени задержки.

Рис. 10. Работа Tail chaining

Рис. 10. Работа Tail chaining

  • Обработка прерывания, пришедшего с опозданием. В случае, если во время фазы перехода к обработке первого прерывания приходит второе с более высоким приоритетом, процессор переключается на обработку второго прерывания немедленно (рисунок 11). Когда в очереди больше не осталось прерываний и их обработка завершена, процессор выгружает контекст из стека и восстанавливает нормальную работу приложения.

Рис. 11. Прерывание с опозданием

Рис. 11. Прерывание с опозданием

Прямой доступ к памяти (DMA)

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

Два встроенных контроллера DMA1 и DMA2 (рисунок 12) в STM32H7 созданы на базе сложной матричной архитектуры, подключаются по шине AHB и имеют независимые FIFO-буферы, используемые для оптимизации пропускной способности системы. У DMA1 и DMA2 доступны всего 16 потоков, каждый из которых предназначен для управления доступом к памяти через запросы от периферии. У каждого потока есть гибкое аппаратное управление запросами и поддержка программных триггеров запуска. Уровень приоритета у потока может быть произвольно задан разработчиком. Аппаратный приоритет же используется в случае равенства приоритетов, заданных программно. Потоки настраиваются независимо друг от друга. Каждый из них имеет свой формат данных, тип инкремента, адреса источника и места назначения данных.

Рис. 12. Контроллеры DMA1 и DMA2

Рис. 12. Контроллеры DMA1 и DMA2

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

Таблица 1. Прерывания DMA

Прерывание Описание
Передача половины данных Устанавливается, когда передана половина всех данных
Передача завершена Устанавливается, когда передались все данные. Может использоваться как триггер для мультиплексора DMA (DMAMUX)
Ошибка передачи Устанавливается, когда во время передачи возникла ошибка на шине
Ошибка прямого режима Появляется только при передаче от периферии к памяти в прямом режиме, когда инкремент указателя памяти отключен. Сообщает о том, что новые данные переводятся в заданную область памяти, в то время как предыдущая передача еще не завершилась

В случае обнаружения ошибки при передаче поток автоматически отключается без какого-либо воздействия на другие активные потоки.

У каждого потока можно независимо настроить размер пакета данных, он может быть 8, 16 или 32 бит. Тип передачи настраиваем. Он бывает одиночным или пакетным. Также разработчик может задать адреса источника/назначения данных и инкремент адреса. Максимальный размер передаваемых данных программируется и равен 65535. Для поддержки непрерывного потока данных доступен циклический буферный режим. При его активации после завершения передачи адреса источника/назначения и размер данных автоматически обновляются.

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

Когда включен режим FIFO, контроллер DMA управляет изменением формата данных (упаковкой и распаковкой данных). Благодаря встроенному FIFO-буферу DMA-поток может снизить накладные расходы на программное обеспечение и количество транзакций через шину AHB (рисунок 13).

Рис. 13. Распаковка и упаковка данных в DMA-транзакциях

Рис. 13. Распаковка и упаковка данных в DMA-транзакциях

В одиночном или пакетном режимах работы DMA пороговый уровень FIFO-буфера определяет, когда данные будут отправлены в память или из памяти (таблица 2). Существуют всего четыре настраиваемых пороговых уровня на каждый поток:

  • FIFO, заполненный полностью;
  • заполненный на ¼;
  • на ½;
  • на ¾.

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

Таблица 2. Пороговые уровни FIFO-буфера.

Размер данных Инкремент Доступные пороговые уровни
Байт 4 ¼, ½, ¾ и полностью
8 ½и полностью
16 Полностью
2 байта (полслова) 4 ½ и полностью
8 Полностью
4 байта (слово) 4 Полностью

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

Мультиплексор DMA (DMAMUX)

Главные особенности DMAMUX

В предыдущих семействах микроконтроллеров STM32 периферия была жестко привязана к определенному каналу DMA. Так же жестко был задан и приоритет обработки запросов. Чтобы увеличить гибкость управления DMA-транзакциями и сделать возможной расширенную настройку выставления приоритетов, компания STMicroelectronics добавила в свои новые семейства, в том числе в STM32H7, новый модуль – мультиплексор DMA-запросов. Он может оказаться незаменимым, когда в приложении нужно срочно получить данные от определенной периферии или области памяти без ожидания, когда освободится шина, которая занята передачей данных с более высоким аппаратным приоритетом (при этом процессорное ядро также не должно быть задействовано).

DMAMUX позволяет маршрутизировать запросы между контроллерами DMA и периферией. В его основе лежит многоканальный программируемый мультиплексор. Каждому каналу соответствует определенная линия DMA, которая может синхронизироваться с сигналами, поступающими на вход DMAMUX. Также мультиплексор может выступать в роли генератора DMA-запросов.

Ключевые особенности DMAMUX:

  • 16 программируемых каналов мультиплексора для взаимодействия с линиями DMA;
  • 8-канальный генератор запросов DMA;
  • способность обрабатывать до 107 линий DMA;
  • синхронный режим работы.

У каждого генератора запросов DMA в канале есть:

  • входной фильтр триггеров запросов DMA;
  • счетчик запросов DMA;
  • флаг переполнения для выбранного входного триггера DMA-запросов.

Каждая выходная линия DMA-запросов в мультиплексоре имеет:

  • до 107 входных линий запросов DMA от периферии;
  • одну выходную линию DMA-запросов;
  • фильтр входа синхронизации;
  • счетчик запросов DMA;
  • флаг переполнения для выбранных входов синхронизации;
  • один выход для цепочки запросов DMA

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

Безусловный режим работы

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

  • прохождение одного периферийного запроса через заданный выход и выход мультиплексора выбирается через программируемое значение ID в поле DMAREQ_ID в регистре контроля каналов DMAMUX_CxCR;
  • каждой периферийной линии запроса присваивается свой ID;
  • значение DMAREQ_ID = 0x00 говорит о том, что линия DMA-запроса не выбрана.

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

Синхронный режим работы

Каждая линия DMA-запросов в MDAMUX может быть установлена в синхронный режим работы. Для этого требуется выставить бит разрешения синхронизации (SE) в соответствующем регистре управления каналом мультиплексора (DMAMUX_CxCR). В данном режиме связь между входом и выходом DMAMUX зависит от:

  • входящего синхрособытия, выбираемого через поле SYNC_ID в регистре контроля. Синхронизирующее событие может быть восходящим фронтом, нисходящим фронтом или же фронтом, приходящим на один из входов;
  • встроенного счетчика запросов DMA.

Маршрутизатор запросов имеет множественную синхронизацию входов. Входы синхронизации подключены параллельно ко всем каналам DMAMUX. После синхронизации выбранная линия запросов DMA подключается к выходному каналу DMAMUX. С этого момента каждый обслуживаемый запрос DMA на заданной линии будет уменьшать свой счетчик запросов. Когда счетчик обнулится, в него будет загружено значение из поля NBREQ в регистре управления и входная линия DMA автоматически отключится от выходного канала DMAMUX (рисунок 14).

Рис. 14. Работа DMAMUX в синхронном режиме

Рис. 14. Работа DMAMUX в синхронном режиме

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

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

Режим генерации событий

При работе в данном режиме (рисунок 15) мультиплексор генерирует событие (импульс), когда в его счетчик запросов автоматически загружается значение из поля NBREQ. Счетчик уменьшается при каждой обработке запроса. Генератор событий включается установкой бита EGE в регистре управления соответствующего канала мультиплексора DMA.

Рис. 15. Работа DMAMUX в режиме генерации событий

Рис. 15. Работа DMAMUX в режиме генерации событий

Режим генерации запросов с триггером

Данный режим позволяет создавать запросы DMA, срабатывающие после прихода триггерных сигналов (рисунок 16). В нем выходные сигналы генерирующих каналов идут на вход мультиплексора. Так же, как и в синхронном режиме, входы, на которые приходят триггерные сигналы, подключены параллельно ко всем каналам DMAMUX.

Рис. 16. Работа DMAMUX в режиме генерации запросов с триггером

Рис. 16. Работа DMAMUX в режиме генерации запросов с триггером

У каждого генерирующего канала есть свой индивидуальный регистр настроек:

  • поле SIG_ID отвечает за триггерный сигнал на входе генератора;
  • поле GNBREQ отвечает за число запросов DMA, сгенерированных после прихода триггерного сигнала;
  • поле GPOL определяет активный фронт триггерного сигнала.

Режим генерации запросов с триггером позволяет делать DMA-передачи, инициируемые событиями, отличными от запросов периферии, как, например:

  • внешнее прерывание;
  • сигналы с выходов компараторов;
  • сигнал выхода из режима сна от часов реального времени (RTC) и другие.

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

DMAMUX в STM32H7

В микроконтроллерах STM32H7 существуют два маршрутизатора запросов DMA:

  • DMAMUX1 с контроллерами DMA1 и DMA2 во втором домене;
  • DMAMUX2 с контроллером BDMA в третьем домене.

Ключевые особенности мультиплексоров представлены в таблице 3.

Таблица 3. Ключевые особенности мультиплексоров в микроконтроллерах STM32H7

Функция DMAMUX1 DMAMUX2
Число каналов для DMA-запросов 16 8
Число генерирующих каналов 8 8
Число периферийных входов 107 12
Число триггерных входов 8 32
Число входов синхронизации 8 16

Главный контроллер прямого доступа к памяти (MDMA)

Основные особенности MDMA

MDMA представляет собой управляющий модуль, расположенный в первом домене и подключаемый к AXIM-шине (рисунок 17). Он обеспечивает доступ к основной памяти, периферийным регистрам и TCM-памяти. MDMA может быть использован для:

  • сбора данных из других DMA (DMA1, DMA2 и BDMA) и обеспечения доступа к ним для процессорного ядра Cortex-M7;
  • подготовки данных для других DMA и инициации начала их работы;
  • оптимизации графических операций.

Рис. 17. Блок-схема MDMA

Рис. 17. Блок-схема MDMA

Ключевые особенности MDMA:

  • 16 каналов;
  • до 34 аппаратных источников триггерного сигнала;
  • один 256-уровневый буфер памяти, разделеннный на 128-уровневые “first-in” и “first-out” (FIFO), которые используются для временного хранения передаваемых данных текущего блока в режиме пакетной или одиночной передачи;
  • возможность увеличивать, уменьшать и фиксировать адреса источника/места назначения данных. Данные параметры для источника/места назначения могут устанавливаться независимо друг от друга.

Передача данных

Каждый канал MDMA может производить:

  • единичную передачу блока данных. Каждый блок содержит до 64 кбайт. После завершения передачи канал DMA отключается;
  • повторяющуюся передачу блока данных. Блоки (максимум 4096) передаются до отключения канала;
  • передачу связанного списка данных. Когда завершается передача текущих данных, определяется новый блок данных и начинается его передача.

MDMA поддерживает единичные передачи данных. Размер пакета данных настраиваемый и может достигать 128 байт. Количество передаваемых данных за один DMA-запрос будет зависеть от установленного триггерного режима (TRGM). В случае, если он равен “00”, будет передаваться только один буфер (рисунок 18).

Рис. 18. Передача одного буфера данных за один запрос

Рис. 18. Передача одного буфера данных за один запрос

В случае, когда TRGM = “01”, после одного запроса будет передаваться блок данных (рисунок 19).

Рис. 19. Передача одного блока данных за один запрос

Рис. 19. Передача одного блока данных за один запрос

Если же TRGM = “10”, один блок данных будет передаваться циклично (рисунок 20).

Рис. 20. Цикличная передача блока данных после одного запроса

Рис. 20. Цикличная передача блока данных после одного запроса

В случае TRGM = “11” (рисунок 21) будет передаваться цепочка связанных блоков данных (до тех пор, пока адрес следующего блока не станет равным “null”).

Рис. 21. Передача цепочки связанных блоков данных после одного запроса

Рис. 21. Передача цепочки связанных блоков данных после одного запроса

Арбитраж запросов

Каждый канал MDMA имеет программируемый уровень приоритета. Если два канала имеют одинаковый приоритет, преимущество будет у канала с меньшим номером. Передача буфера – это минимальный размер передаваемых данных без начала нового арбитража между запросами на каналах MDMA. В случае, если передается блок данных, MDMA перейдет в новую фазу арбитража между новыми внешними и внутренними запросами. Если нет других запросов с более высоким приоритетом, начнется новая передача буфера данных для этого же канала. Таким образом запросы MDMA с более высоким приоритетом не будут заблокированы на время, превышающее период передачи одного буфера.

На работу MDMA и отзывчивость приложения влияют два параметра массива данных:

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

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

Flash-память

Организация памяти

Микроконтроллеры STM32H7 оснащены двумя банками высокоскоростной Flash-памяти с максимальным объемом до двух Мбайт. Она может быть использована для хранения программ или данных. Flash-память состоит 266-битных слов, где 256 бит используются для хранения кода или констант, а 10 – для хранения битов, используемых для корректировки ошибок в памяти (ECC).

Каждый банк состоит из трех блоков. Первый из них – это один Мбайт пользовательской Flash, разбитый на восемь секторов по 128 кбайт. Второй – 128 кбайт системной памяти. Системная память используется для загрузки устройства. Она содержит корневые сервисы безопасности (RCC) и загрузчик, которые используются для безопасного (или незащищенного) программирования Flash-памяти с помощью одного из таких интерфейсов, как USART, USB (DFU), I2C, SPI, Ethernet. Данная память загружается в микроконтроллер прямо на фабрике. Третий блок используется для хранения битов опций и имеет объем 2 кбайта (64 слова).

В таблице 4 наглядно представлена организация Flash-памяти.

Таблица 4. Организация Flash-памяти в микроконтроллерах STM32H7

Блок Имя Адрес Объем, кбайт
Банк 1 Пользовательская память Sector 0 0x0800 0000 – 0x0801 FFFF 128
Sector 1 0x0802 0000 – 0x0803 FFFF 128
Sector 7 0x080E 0000 – 0x1FF1 FFFF 128
Системная Flash-память Системная память 0x01FF0 0000 – 0x1FF1 FFFF 128
Сектор с битами опция Неотображаемая память 2
Банк 2 Пользовательская Flash-память Sector 0 0o0810 0000 – 0x0811 FFFF 128
Sector 1 0x0812 0000 – 0x0813 FFFF 128
Sector 7 0x081E 0000 – 0x81F FFFF 128
Системная память Системная память 0x01FF4 0000 – 0x1FF5 FFFF 128

Функционал защиты

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

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

Интерфейс памяти позволяет менять местами два банка памяти. Это полезно, когда требуется обновить программное обеспечение устройства, не выключая его. В таком случае рабочее приложение может исполняться из одного банка памяти, в то время как обновление будет загружаться в другой банк. После завершения загрузки можно произвести мгновенное переключение на исполнение кода из второго банка.

На рисунке 22 представлена блок-схема устройства Flash-памяти. Она включает в себя шинный интерфейс AXI для доступа к коду/данным и AHB для настройки интерфейса памяти. AXI может работать параллельно с AHB и, например, производить запрос для операций чтения/программирования.

Рис. 22. Блок-схема Flash-памяти

Рис. 22. Блок-схема Flash-памяти

Чтение памяти

Интерфейс Flash поддерживает следующие типы доcтупа:

  • двойные слова (64 бита);
  • слово (32 бита);
  • полслова (16 бит);
  • байт (8 бит).

Тактирование Flash-интерфейса должно быть включено во время чтения информации из памяти. Для обеспечения правильного выполнения операции чтения ожидание (LATENCY) должно быть настроено в регистре FLASH_ACR и соответствовать с частотой работы интерфейса Flash-памяти.

В таблице 5 показано соответствие между задержкой (WS), частотой шины и диапазоном напряжения. После включения используется внутренний высокоскоростной источник тактирования (HSI) на 64 МГц. 7 WS стоят по умолчанию в регистре FLASH_ACR.

Таблица 5. Задержки при чтении Flash-памяти

Диапазон напряжений ядра Напряжение, В WS (LATENCY) Максимальная частота AXI, МГц
VOS 0/VOS 1 1,15…1,35 0WS 70
1WS 140
2WS 210
3WS 225
4WS 240
VOS 2 1,05…1,15 0WS 55
1WS 110
2WS 165
3WS 225
VOS 3 0,95…1,05 0WS 45
1WS 90
2WS 135
3WS 180
4WS 225

Механизм чтения работает следующим образом:

  • Глубина буфера команд фиксирована и составляет три запроса. Когда буфер заполнен (3 запроса на чтение поставлены в очередь в буфере), любой новый запрос на чтение остановит шинный интерфейс.
  • Любой запрос на чтение данных, который недоступен в буфере, запускает операцию чтения Flash. Считываемые данные буферизуются. Если несколько последовательных запросов требуют получить доступ к данным, которые относятся к одному и тому же слову (256 бит), требуемые данные будут выгружены из буфера и дополнительная операция чтения не будет запущена.

Операции записи и стирания

Интерфейс памяти поддерживает следующие операции:

  • запись в пользовательские сектора памяти;
  • стирание пользовательских секторов;
  • стирание банков памяти;
  • изменение битов опций.

Доступ к операциям записи происходит через AXI-интерфейс. Он может считаться буферизируемым и некэшируемым, если не учитывать то, что невозможно прочитать содержимое буфера записи. Встроенная Flash-память может быть перезаписана через программу приложения.

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

Продуманная архитектура и производительность

В микроконтроллерах STM32H7 самое быстрое процессорное ядро среди всех семейств STM32. Однако основной вклад в производительность вносят модернизированные архитектурные решения и новая специализированная периферия. Разделение микроконтроллера на три домена, которые оснащены своей оперативной памятью и модулями DMA, позволяет производить обмен данными и управление интерфейсами без участия ядра. В случае использования ядра было бы невозможно достичь такой впечатляющей эффективности на высоких частотах и детерминированности выполнения ключевых функций без наличия кэша, улучшенной матрицы шин AXI и TCM-памяти.

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

•••

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

О компании STMicroelectronics

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

Товары
Наименование