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 аппаратных источников, и выбор источника может автоматически меняться в конце блока — это позволяет строить цепочки передач.
Источники
- 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 ядра
- STMicroelectronics. CMSIS device header stm32h743xx.h, cmsis-device-h7 v1.10.7 (GitHub, Apache-2.0) — MDMA, MDMA_Channel0 … MDMA_Channel15 — структуры каналов MDMA_Channel_TypeDef
Нашли ошибку?
Смотрите также
- DMAПрямой доступ к памяти без участия ядра
- DMAMUX (мультиплексор запросов DMA)Мультиплексор, который подключает любой запрос периферии к любому каналу DMA
- BDMA (basic DMA)8-канальный DMA домена D3 STM32H7 для SRAM4 и периферии D3
- TCM (ITCM, DTCM)ОЗУ на прямых интерфейсах ядра Cortex-M7: предсказуемый доступ без кэша
- Шина AXI (AXIM)64-битный главный интерфейс AXI4 ядра Cortex-M7
- STM32H7Cortex-M7 от 280 до 600 МГц, двухъядерные H745/H747 — линейки, память, загрузка и распиновки
- DMA STM32Каналы и потоки, запросы периферии, кольцо, двойной буфер, FIFO, флаги, примеры