DMA Direct Memory Access(直接存储器访问)
DMA能干的事,核心就是三种传输方向:
| 传输方向 | 说明 | 典型场景 |
|---|---|---|
| 外设 → 存储器 | 从外设读取数据存到内存 | ADC采集数据存入数组 |
| 存储器 → 外设 | 从内存取出数据发给外设 | 内存数据通过串口发送 |
| 存储器 → 存储器 | 内存之间相互搬运 | RAM数据拷贝到另一块RAM |
存储器:
- ✅片内 RAM(内存)
- ✅外部 SRAM / SDRAM(外接内存)
- ✅片内 Flash(只能做源,不能做目标)
- ✅外接映射的外部存储(FMC 挂载的器件)
DMA一次最多可搬运 1~65535个 数据单元,每个单元可以是字节(8位)、半字(16位)或全字(32位)。
此外,DMA还支持两种传输模式:
- 普通模式:传完一批数据就停止
- 循环模式:传完后自动重新开始,循环往复
凡是需要频繁搬运数据、但又不想让CPU被占满的场景,都适合用DMA:
- ADC连续采样:ADC不断采集数据,DMA自动把结果搬进内存数组
- 串口(UART)通信:收发大量数据时用DMA搬运,CPU可以去处理其他任务
- SPI/I2C总线通信:与外部传感器、存储器批量交换数据
- 音频/波形处理:DAC播放音频时,DMA从内存持续搬运数据给DAC
- 内存数据拷贝:在SRAM不同区域之间快速搬移数据
- 显示屏刷新:将图像数据从内存搬运到显示控制器