DMA

1 Overview

1.1 What is DMA

DMA将数据从一个地址空间复制到另一个地址空间,提供外设和存储器之间、存储器和存储器、及外设和外设之前的高速数据传输。这个传输动作是由DMA控制器来完成的,且整个过程无需CPU直接控制传输,也没有中断方式那样保留现场和恢复过程,通过硬件为RAM和外设开辟一条直接传输数据的通道,使得CPU的效率大大提高。

1.2 Main Components

  • DMA Controller
  • DMA channel
  • Hardware Request Interface
  • AHB Master Interface
  • AHB Slave Interface
  • Arbiter

1.3 Applications

DMA主适用于一些高速、大数据量的I/O设备。对于这类高速I/O设备,如果采用输入输出指令或采用中断的方式传输信息,会占用大量CPU的时间,同时也容易造成数据的丢失。DMA方式能使I/O设备直接和存储器进行成批数据的快速传输。
常见应用如下:

  • FLASH
  • AUDIO
  • VIDEO

2 Basic Definitions

2.1 DMAC

2.2 Source/Destination Peripheral

Source Peripheral :DMAC从AHB层读取数据的设备,然后DMAC将数据存储在通道FIFO中。Source Peripheral 可以挂在AHB总线或者APB总线上。
Destination Peripheral DMAC 从FIFO中存储的数据的设备(从Source Peripheral读取的)Destination Peripheral 可以挂在AHB总线或者APB总线上。

2.3 Memory/Non-Memory Peripheral

一般定义:始终“准备就绪”进行DMA传输的Source Peripheral 或者 Destination Peripheral,不需要握手接口即可与DMA进行交互,仅当外围设备插入的等待状态不超过16个时,才应当将其定义为Memory Peripheral。反之,则应当定义为Non-Memory Peripheral并使用握手接口,以便在其准备好接收/发送数据时发出信号通知DMA。

2.4 Master/Slave Interface

Master Interface:DMAC通过AHB总线读取数据或写入数据的接口。
Slave Interface:CPU编程DMA的AHB接口。

2.5 Handshaking Interface

一组信号或软件寄存器,他们符合DMAC与Source Peripheral/Destination Peripheral之间的握手协议,以控制他们之间的Single/Brust 事务。即此接口用于请求、确认、控制DMAC事务。一般情况DMAC可以通过以下2种方式接收请求:

  • Hardware handshaking interface:使用硬件信号来控制DMAC与源或目标外围设备之间的Single/Brust 事务。
  • Software handshaking interface:使用一组软件寄存器DMAC与源或目标外围设备之间的Single/Brust 事务。

2.6 Transfer Hierarchy

3 Transfer Setting

3.1 传输类型

根据外设的分类,共有四种传输类型:

  • Memory to Memory
  • Memory to Peripheral
  • Peripheral to Memory
  • Peripheral to Peripheral

3.2 流控

流控制器:确定DMA块传输长度并终止它的设备
则一般情况有如下选择:

  • DMAC
  • Source Peripheral
  • Destination Peripheral
    如果在传输之前知道块大小,则应将DMAC设为流控。
    如果在传输之前不知道块大小,则Source Peripheral/Destination Peripheral必须为流控

3.3 传输宽度

多数通用DMA时挂在AHB总线上的,即AHB总线的位宽则为DMA的传输宽度的上限。以STM32单片机为例,DMA的传输宽度 <= 32。则常见有Byte-8bit、HalfWord-16bit、Word-32bit方式

3.4 地址方式

DMA传输过程是没有CPU干预的,DMAC怎么知道下一个数据去哪里搬运,也需要事先告诉DMA地址的变化规律。即三种地址方式:递增、递减、不变。

3.5 通道优先级

对于独立的通用DMA,都会有多条通道,每条通道有独立的FIFO、配置寄存器、中断等硬件。但是DMA的Master Interface仅有一个,故多个通道会竞争该Master Interface资源。值得注意的是,高优先级通道可以随时提出对主总线接口的请求,但是仅在当前AHB传输(突发或单次)完成后才被授予。因此,当Master Interface正在为底优先级通道传输数据而高优先级通道请求服务时,它会在切换为高优先级通道传输数据之前完成低优先级通道当前的AHB传输(Single 或 Brust)。另外,当优先级相同时(寄存器配置),DMAC一般会根据通道号来选择优先运行的通道。

3.6 突发事务长度

Source BurstTransaction Length:每次从相应的硬件或软件握手接口发出Destination Brust 请求时,将从Source读取的数据项数。
Destination BurstTransaction Length:每次从相应的硬件或软件握手接口发出Destination Burst请求时,将写入Destination的数据项数。
对于外设而言,如果采用DMA方式传输数据,则

  • 当Source FIFO超过我们设置的阈值时,即触发DMA请求,搬走一个Burst的数据。
  • 当Destination FIFO降至我们设置的阈值时,即触发DMA请求,搬走一个Burst的数据。
    DMA会优先使用Burst方式搬运,当搬运数量不足一个Burst的时候,采用Single方式。故Burst的大小设置合理能较少DMA的请求次数,从而提高DMA的搬运效率。但是,DMA与外设使用时,Burst设置不合理会导致外设的FIFO溢出或下漏。

3.6.1 FIFO阈值与Destination Burst

在外设串行传输期间,当外设发送FIFO中的数据量 <= 外设发送FIFO的阈值,外设就会向DMA发出其发送FIFO的数据请求。DMA收到该请求之后,将写入一个Burst的数据进外设发送FIFO进行响应。故为了外设能够连续执行串行传输,在外设的发送FIFO为空之前必须触发一个新的Burst来请求DMA填充外设发送FIFO,否则外设的发送FIFO可能出现下溢。当然如果Burst设置过大,导致外设FIFO没有足够的空间来存储DMA传输进来的数据,则可能出现上溢。

如上图,若DMA 块大小为30,则本次传输产生的Burst: 30/6 = 5。DMA块传输的Burst总数为5,但水位线非常低。该种case下,外设传输过程中DMA可能来不及服务请求,即FIFO来不及填充数据,此时就会产生下溢。

如上图,若DMA块大小为30,则本次传输产生的Burst: 30/2 = 15。DMA块传输的Burst总数为15,但水位线非常高。因此,外设下溢得到可能性很低,因为DMA在外设发送FIFO变空之前有足够的时间服务于Burst事务。
第二种情况下发生下溢的可能性更低,其代价则是每个块传输有更多的突发事务。与前一种情况相比,这潜在的提供了每个块更多的突发量和更差的总线利用率。
综上所述,对于水位线和Destination Burst的目标是最小化每个块的事务数量,同时将下溢的概率保持在可接受的水平。具体可参考如下公式:
Burst Size <= FIFO Depth - DMADLR

3.6.1 FIFO阈值与Source Burst

在外设串行传输期间,只要外设RX FIFO中的数据量 >= 接收阈值,就会向DMA发出外设接收FIFO的数据请求。DMA收到请求之后,将从外设的接收FIFO读走一个Burst的数据对请求进行响应。故外设为了接收FIFO能够连续进行串行传输。也就是说,当外设接收FIFO填充满之前,应触发一个Burst请求。否则,外设接收FIFO可能出现上溢。另外如果Burst设置过大,这样就没有足够的数据来服务Source Burst请求,可能会导致下溢。

如上图所示,为了实现最佳效率,并同时兼顾FIFO溢出。设置Source Burst应遵循以下公式
Burst Size = DMADLR + 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值