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

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.

Источники

  1. 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
  2. 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

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