DMA(直接内存访问)的结构详解

DMA的结构由硬件控制器通道管理总线接口控制逻辑组成,其设计旨在高效管理外设与内存间的数据传输,减少CPU干预。以下是DMA的核心结构组件及其工作原理:


1. DMA控制器核心模块

​(1) 通道(Channels)​
  • 功能:每个通道独立处理一个外设的数据传输任务,支持多设备并行操作。
  • 配置参数
    • 源地址(Source Address)​:数据起始位置(内存或外设寄存器)。
    • 目标地址(Destination Address)​:数据传输目的地。
    • 传输长度(Transfer Count)​:以字节、字或块为单位。
    • 传输方向:内存→外设、外设→内存或内存→内存。
  • 示例:STM32系列MCU通常提供8-16个DMA通道,每个通道绑定到特定外设(如UART、ADC)。
​(2) 寄存器组(Registers)​
  • 控制寄存器(CR)​:配置传输模式、数据宽度、地址自增等。
  • 状态寄存器(SR)​:显示传输状态(完成、错误、中断标志)。
  • 地址寄存器(AR)​:存储当前源地址和目标地址。
  • 计数器寄存器(CNTR)​:记录剩余传输数据量。
​(3) 仲裁器(Arbiter)​
  • 功能:当多个通道同时请求传输时,仲裁器根据优先级分配总线使用权。
  • 优先级策略
    • 固定优先级:通道编号决定优先级(如通道0 > 通道1)。
    • 循环优先级:轮流分配总线,避免低优先级通道长时间等待。
​(4) 总线接口单元(Bus Interface Unit)​
  • 作用:连接系统总线(如AMBA AHB/AXI、Wishbone),实现内存与外设的物理访问。
  • 操作模式:支持单次读写或突发传输(Burst Transfer),提升总线利用率。
​(5) 中断控制器接口
  • 功能:传输完成或发生错误时,触发中断通知CPU。
  • 中断类型
    • 传输完成中断:所有数据搬运完毕。
    • 半传输中断​(双缓冲模式):传输一半数据时触发。
    • 错误中断:地址越界、总线超时等异常。

2. DMA控制器的连接架构

​(1) 系统总线连接
  • 内存访问:通过系统总线直接读写RAM或片上内存。
  • 外设访问:连接外设的数据寄存器(如SPI的DR寄存器、ADC的结果寄存器)。
  • 示例架构
    [CPU] <---> [系统总线] <---> [DMA控制器]  
                             |  
                             +---> [外设1(UART)]  
                             +---> [外设2(ADC)]  
                             +---> [内存控制器]
​(2) 分散-聚集(Scatter-Gather)引擎
  • 功能:支持非连续内存块的传输,通过描述符链表(Descriptor List)定义多个传输任务。
  • 工作流程
    1. CPU创建链表,描述每个内存块的地址和长度。
    2. DMA控制器按链表顺序自动执行传输,无需CPU干预。
  • 应用场景:网络数据包分片传输、图像处理多区域操作。
​(3) 缓存一致性单元(仅限带Cache的系统)
  • 作用:协调DMA操作与CPU缓存,防止数据不一致。
  • 实现方式
    • 硬件自动维护:通过一致性总线(如ARM的CCI)同步缓存。
    • 软件手动刷新:在传输前后调用缓存清理(Clean)或失效(Invalidate)指令。

3. DMA控制器的工作流程

  1. 初始化阶段

    • CPU配置通道寄存器(源地址、目标地址、传输长度等)。
    • 设置传输模式(单次、循环、外设触发)。
    // STM32 HAL库示例:配置DMA通道
    hdma_usart_tx.Instance = DMA1_Channel4;
    hdma_usart_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
    HAL_DMA_Init(&hdma_usart_tx);
  2. 触发传输

    • 硬件触发:外设(如UART)发送DMA请求(DREQ)。
    • 软件触发:CPU直接启动传输(如内存到内存复制)。
  3. 总线仲裁与数据传输

    • DMA控制器申请总线控制权,接管总线后按配置参数搬运数据。
    • 突发传输模式下,一次性传输多个数据单元(如4个字)。
  4. 传输完成处理

    • 触发中断通知CPU,更新状态寄存器。
    • CPU处理后续任务(如解析数据、释放资源)。

4. 典型DMA控制器实例

​(1) STM32系列DMA控制器
  • 通道结构:每个通道独立配置,支持内存到外设、外设到内存等方向。
  • 循环模式:自动重置地址和计数器,适用于实时数据流(如音频)。
  • 双缓冲模式:交替使用两个缓冲区,减少处理延迟。
​(2) PCIe DMA引擎
  • 高级功能:支持Scatter-Gather、64位地址空间、高吞吐传输(如GPU与内存间数据交换)。
  • 应用场景:数据中心服务器、高性能计算(HPC)。
​(3) 嵌入式SoC DMA(如TI C6000)​
  • 多核协同:多个DMA控制器并行工作,服务不同处理核心。
  • 低延迟传输:用于实时信号处理(如雷达、通信基带)。

5. 关键设计考量

​(1) 性能优化
  • 突发传输:减少总线访问次数,提升吞吐量。
  • 通道优先级:确保高实时性外设(如摄像头)优先传输。
  • 对齐访问:内存地址对齐到数据宽度,避免总线分片操作。
​(2) 资源管理
  • 通道复用:动态分配通道给不同外设,提高利用率。
  • 错误恢复:检测总线超时或地址错误,自动终止传输并触发中断。
​(3) 低功耗设计
  • 时钟门控:空闲时关闭DMA控制器时钟,降低功耗。
  • 智能唤醒:外设触发传输请求时激活DMA控制器。

6. 总结

DMA的结构设计围绕高效数据搬运资源管理展开,其核心组件包括通道、寄存器、仲裁器和总线接口。通过多通道并行、分散-聚集传输等机制,DMA显著降低了CPU负载,提升了系统实时性与吞吐量。理解DMA结构有助于开发者:

  1. 优化配置:根据外设需求选择传输模式与优先级。
  2. 调试问题:通过分析寄存器状态定位传输错误。
  3. 设计高性能系统:在嵌入式、网络通信及多媒体领域实现零拷贝、低延迟的数据处理。

参考:

  1. DMA原理,步骤超细详解,一文看懂DMA-CSDN博客 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩瀚之水_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值