Перейти к содержимому

#39. DMA: Direct Memory Access (Прямой доступ к памяти)

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

for (i = 0; i < N; i++) {
while (flagBusy);
buf[i] = peripheralRegister ;
}

Мы рассматривали это в разделе Последовательная связь, связь по SPI и увидим это снова со связью I2C. Этот подход, называемый программным опросом, имеет три ограничения. Во-первых, процессор связан во время передачи и не может выполнять другие задачи; в идеале при большой передаче данных (рассмотрите возможность считывания сектора данных с SD-карты), передача может быть начата, и процессор может быть освобожден для выполнения другой работы, пока передача осуществляется. Во-вторых, фактическая скорость передачи ниже, чем может позволить базовое оборудование. Наконец, трудно достичь жестких временных ограничений, например, потоковая передача звука зависит от выборок данных, которые должны передаваться с постоянной скоростью.

Чтобы увидеть различия в производительности, рассмотрим два снимка экрана логики, показывающих передачу SPI при заполнении, и ЖК-дисплей 7735 со сплошным цветом. Верхний снимок измеряет время для переноса 2 пикселей, а нижний снимок измеряет время для передачи 128 пикселей. Теоретический пик составляет 12х106 /16 = 750 000 пикселей в секунду для тактовой частоты SPI 12 МГц. Без прямого доступа к памяти наша скорость передачи составляет 1/20×10-6 = 50 000 пикселей / секунду, в то время как с DMA наша скорость передачи составляет 128/17×10-4 = 735 000 пикселей / секунду. Конечно, с DMA, есть неизбежные издержки между блоками. Таким образом, существует компромисс между пропускной способностью и пространством памяти (большие блоки дают более высокую пропускную способность).

Цветная заливка с и без DMA

DMA реализован в процессорах с выделенными аппаратными устройствами. Эти устройства совместно используют шину памяти и периферийные шины с процессором (CPU. На этой схеме устройство DMA считывает данные из памяти по шине памяти и выполняет запись в периферийное устройство по периферийной шине. Ситуация с STM32 несколько сложнее, потому что есть несколько периферийных шин, но принцип тот же.

DMA Transfer

Только одно устройство может использовать шину в любой момент, поэтому передача DMA влияет на процессор. Однако учтите, что пиковая скорость для устройства SPI составляет 750 000 передач / секунду, в то время как шина памяти устройства линейки значений STM32 может поддерживать 24 000 000/5 операций ОЗУ в секунду (каждая передача занимает 5 циклов шины). Таким образом, наша передача блоков потребляет примерно 15% циклов шины памяти. Архитектура STM32 гарантирует, что процессор не будет голодать). Кроме того, только часть инструкций STM32 напрямую обращаются к памяти RAM — остальные просто извлекают инструкции из FLASH, который использует другую шину.

Добавить комментарий