BDMA (basic DMA)
Чтобы микроконтроллер мог собирать данные с LPUART или АЦП, пока ядро и основная периферия выключены, в STM32H7 есть отдельный маленький контроллер DMA в домене D3 — BDMA.
Обновлено Редакция GAW
BDMA (basic direct memory access) — простой контроллер DMA микроконтроллеров STM32H7, расположенный в домене D3. По RM0433 (разд. 16) у него один главный интерфейс AHB и 8 каналов, а доступна ему SRAM домена D3 и периферия на шинах AHB и APB этого домена.
Зачем отдельный DMA
Ядро STM32H743 питается от одного регулятора, но разделено на домены D1, D2 и D3. D1 и D2 могут уйти в DStop или DStandby, а D3 продолжает работать. DMA1 и DMA2 находятся в D2 и засыпают вместе с ним, поэтому для периферии D3 нужен свой контроллер. Так, например, LPUART1 может принимать данные в SRAM4 через BDMA, пока ядро выключено.
Возможности
- передачи периферия — память, память — периферия, память — память и периферия — периферия;
- 4 уровня программного приоритета, при равенстве старше канал с меньшим номером;
- независимые размеры источника и приёмника — байт, полуслово, слово, адреса выровнены по размеру;
- кольцевой буфер и двойной буфер на каждом из 8 каналов;
- до 2¹⁶ − 1 элементов за передачу;
- прерывания по завершению передачи, половине и ошибке.
Запросы через DMAMUX2
Запросы периферии приходят в BDMA через DMAMUX2: 8 выходных каналов, по одному на канал BDMA, и 12 входов от периферии домена D3. Генератор запросов DMAMUX2 позволяет запускать BDMA по событиям, например по таймеру LPTIM. Сравнение с MDMA и обычными DMA — в статье «DMA в STM32».
Частые вопросы
Зачем в STM32H7 отдельный BDMA, если есть DMA1 и DMA2?
DMA1 и DMA2 находятся в домене D2 и выключаются вместе с ним. BDMA сидит в домене D3, который может работать, пока D1 и D2 спят в режимах DStop или DStandby. Так периферия D3 — например, LPUART1 или SPI6 — может накапливать данные в SRAM домена D3 без ядра.
К какой памяти имеет доступ BDMA?
По RM0433 — к SRAM домена D3 (SRAM4) и к периферии на шинах AHB и APB этого домена. Поэтому буферы для BDMA размещают в SRAM4; буфер в AXI SRAM или DTCM контроллер не увидит.
Как назначить запрос периферии каналу BDMA?
Через мультиплексор DMAMUX2: у него 8 выходных каналов, по одному на каждый канал BDMA, и 12 входов запросов от периферии домена D3. Номер запроса записывают в поле DMAREQ_ID регистра нужного канала DMAMUX2, а сам канал BDMA настраивают как обычный канал DMA.
Источники
- STMicroelectronics. RM0433: STM32H742, STM32H743/753 and STM32H750 Value line advanced Arm-based 32-bit MCUs. Reference manual, Rev 9 — разд. 16.1: BDMA — ведущий системный блок для программируемых передач между периферией и памятью; один главный интерфейс AHB, один экземпляр на 8 каналов, арбитр приоритетов; разд. 16.2: передачи периферия — память, память — периферия, память — память и периферия — периферия; доступ к SRAM домена D3 и периферии AHB/APB; канал связан с запросом периферии или программным запуском; 4 уровня приоритета, при равенстве канал с меньшим номером старше; размеры источника и приёмника независимы (байт, полуслово, слово), адреса выровнены по размеру; кольцевой буфер; число данных 0 … 2¹⁶ − 1; прерывания по завершению, половине и ошибке; табл. 118 — 8 каналов с двойным буфером; разд. 17.3.1 — запросы к BDMA идут через DMAMUX2 домена D3 (8 каналов, 12 входов запросов); табл. 128 — входы запросов DMAMUX2: lpuart1_rx/tx, spi6_rx/tx, i2c4_rx/tx, sai4_a/b, adc3; табл. 129 — входы запуска, среди них lptim2_out, lptim3_out, RTC_wkup; рис. 39 — передача SRAM4 → LPUART1 через BDMA при работающем домене D3; разд. 6.6 — домен D3 может работать, когда D1 и D2 в DStop или DStandby
- STMicroelectronics. CMSIS device header stm32h743xx.h, cmsis-device-h7 v1.10.7 (GitHub, Apache-2.0) — BDMA, BDMA_Channel0 … BDMA_Channel7, DMAMUX2_Channel0 … DMAMUX2_Channel7
Нашли ошибку?
Смотрите также
- DMAПрямой доступ к памяти без участия ядра
- DMAMUX (мультиплексор запросов DMA)Мультиплексор, который подключает любой запрос периферии к любому каналу DMA
- MDMA (master DMA)Контроллер DMA STM32H7 на шине AXI с доступом к TCM и FIFO на 256 позиций
- Домены питания D1, D2 и D3 (STM32H7)Три части ядра STM32H7 со своими режимами работы и сна
- LPUART (UART малого потребления)UART STM32, принимающий данные в режиме Stop от такта LSE 32,768 кГц
- STM32H7Cortex-M7 от 280 до 600 МГц, двухъядерные H745/H747 — линейки, память, загрузка и распиновки
- Кольцевой режим DMAРежим DMA с автоматической перезагрузкой счётчика: буфер заполняется по кругу