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

MDMA (master DMA)

В STM32H7 три вида DMA: обычные DMA1 и DMA2, базовый BDMA в домене D3 и главный MDMA. Последний сидит на шине AXI, видит память TCM ядра Cortex-M7 и предназначен для больших передач между памятями.

Обновлено Редакция GAW

MDMA (master direct memory access) — контроллер DMA микроконтроллеров STM32H7, рассчитанный на быстрые передачи между памятями и между памятью и периферией. По RM0433 (разд. 14.1) у него два главных интерфейса:

  • AXI — для основной памяти и регистров периферии (system access port), см. шина AXI;
  • AHB — только для доступа к TCM ядра Cortex-M7 через его порт AHBS (TCM access port).

Возможности

ПараметрMDMA по RM0433
Каналы16, все одинаковые
Источники запускадо 32 аппаратных плюс программный запуск
Буфер256 позиций, два FIFO по 128
Ширина данныхбайт, полуслово, слово, двойное слово, отдельно для источника и приёмника
Приоритеты4 уровня; при равенстве канал с меньшим номером старше

Шаг адреса источника и приёмника задают отдельно, поэтому MDMA умеет переставлять данные. RM0433 приводит пример: два 16-битных блока чередуются в памяти приёмника, если запустить два канала с шагом 4 байта и начальными адресами, сдвинутыми на 2 байта. Источник запуска может автоматически меняться в конце блока, что позволяет связывать передачи.

MDMA, DMA1, DMA2 и BDMA

В STM32H743 три вида контроллеров. DMA1 и DMA2 получают запросы периферии через DMAMUX и обслуживают потоки от UART, SPI, АЦП. BDMA работает в домене D3 с его памятью и периферией. MDMA работает совместно со стандартными DMA: по RM0433 его каналы могут обслуживать запросы от буфера памяти потока DMA, то есть забирать уже собранные данные дальше — например, в TCM, куда DMA1 и DMA2 не пишут. Общие принципы DMA в STM32 — в статье «DMA в STM32».

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

Чем MDMA отличается от DMA1 и DMA2 в STM32H7?

MDMA — главный интерфейс AXI с доступом к TCM-памяти ядра, 16 одинаковых каналов, ширина данных до двойного слова и буфер на 256 позиций. DMA1 и DMA2 получают запросы периферии через DMAMUX и лучше подходят для потоков от UART, SPI или АЦП. RM0433 описывает их совместную работу: MDMA может забирать данные из буфера памяти потока DMA.

Может ли MDMA писать в DTCM?

Да. У MDMA отдельный главный порт AHB, подключённый к порту AHBS ядра Cortex-M7, и он нужен только для доступа к памяти TCM. Обычные DMA1 и DMA2 в TCM не попадают, поэтому буферы для них размещают в AXI SRAM или SRAM доменов D2 и D3.

Что такое источник запуска MDMA?

Событие, по которому канал начинает передачу: окончание передачи потока DMA1 или DMA2, флаги периферии вроде LTDC, JPEG или QUADSPI, либо программный запрос. У MDMA до 32 аппаратных источников, и выбор источника может автоматически меняться в конце блока — это позволяет строить цепочки передач.

Источники

  1. STMicroelectronics. RM0433: STM32H742, STM32H743/753 and STM32H750 Value line advanced Arm-based 32-bit MCUs. Reference manual, Rev 9 — разд. 14.1: MDMA — быстрые передачи память — память и периферия — память без участия процессора; главный интерфейс AXI для основной памяти и регистров периферии (system access port) и главный интерфейс AHB только для доступа к TCM ядра Cortex-M7 (TCM access port); работает совместно со стандартными DMA1 и DMA2; до 16 каналов, каждый обслуживает запросы от буфера памяти потока DMA или другой периферии; разд. 14.2: 16 каналов, до 32 аппаратных источников запуска, выбор источника программный и может автоматически меняться в конце блока; программный запуск; буфер на 256 позиций из двух FIFO по 128; приоритеты четырёх уровней, при равенстве канал 0 старше канала 1; ширина источника и приёмника независимо — байт, полуслово, слово, двойное слово, с упаковкой; размер и шаг адреса источника и приёмника задаются отдельно; пример: чередование двух 16-битных блоков двумя каналами с шагом 4 байта; табл. запросов MDMA — mdma_str0 от dma1_tcif0, mdma_str16 — ltdc_li_it, mdma_str17–21 — флаги JPEG, mdma_str22 — quadspi_ft_trg; разд. 2.1.2 — ITCM и DTCM подключены к ядру выделенными шинами, MDMA обращается к ним через порт AHBS ядра
  2. STMicroelectronics. CMSIS device header stm32h743xx.h, cmsis-device-h7 v1.10.7 (GitHub, Apache-2.0) — MDMA, MDMA_Channel0 … MDMA_Channel15 — структуры каналов MDMA_Channel_TypeDef

Нашли ошибку?