在学校参与的项目中需要有DMA和DDR的交互的设计,之前对DDR和DMA只是有很浅显的理解,现在正好把这两个东西弄明白。
目录
DMA简述
什么是DMA
- DMA是一种内存访问的技术;
- 可以独立于CPU,直接读写系统存储器、外设。
本科的微机原理也学过DMA,按照之前的简单理解DMA应该就是缓解CPU压力,能够使得硬件设备能够快速访问存储器或者使得存储器之间高速数据传输的硬件单元。
DMA的双面性
- 对于CPU,DMA是外设;
- 对于普通外设,DMA是控制器。
为什么使用DMA
- 解决查询方式传送数据慢和中断传送数据占用CPU、传送数据少的矛盾,DMA适合高速、大批量数据传输系统;
- 把相对固定的事情交给DMA做,减轻CPU负担,提高系统的效率;
- DMA具有一般CPU没有的高效操作,能够提高系统的吞吐率。
DMA的系统架构
总线的控制权是关键,CPU需要能释放总线的控制权,DMA控制器需要能够管理数据总线使得数据高速传输。
DMA与CPU如何竞争总线
- 两路DMA、CPU都是总线矩阵的master;
- DMA与CPU同时访问同一slave时,BUS_MATRIX内部的仲裁器会对请求进行仲裁;
- DMA和CPU同时访问不同slave时,可以同时工作。
为什么使用两路DMA
- 两路DMA可以连接更多的外设DMA请求源;
- 两路DMA,在内存的访问空间上做一定的区分,可以同时工作。
不同的DMA的应用区别
- DMA2的matser端口可以访问总线矩阵中所有的slave(存储器、AHB1、AHB2、APB1、APB2);
- DMA1的端口1只连接了具有存储器属性的salve,端口2直接点接到了APB1上;
- DMA2可以实现存储器、AHB1、AHB2、APB1、APB2之间数据的相互传输;
- DMA1只能实现存储器、APB1之间数据的相互传输。
DMA的内部结构
- DMA的通道构成
- 仲裁器
-通过配置选择器,可以让某一外设的DMA_REQ最终mux到stream;
-DMA控制器有多个stream,可以让多个外设的DMA_REQ同时工作;
-仲裁器的作用就是通过算法,确定当前优先级最高的STREAM,并对连接到该stream的DMA_REQ进行相应。
常见的仲裁算法
(1)固定优先级:优先级是定义好的,或者软件可以配置的;
(2)轮转优先级:随着通道请求服务,游戏那几不断轮转,服务完之后,优先级会降低;
(3)随机优先级:基于随机数的优先级分配。 - FIFO
- 总线master端口1
- 总线master端口2
- 总线slave端口
DMA数据传送
- DMA传送申请阶段
1、外设发DMA数据传输请求DREQ;
2、接收到外设的DMA请求信号DREQ后,在DMA控制器允许的情况下向CPU发送总线请求信号HRQ - DMA响应阶段。
1、CPU在每个总线周期结束时检测HRQ信号;
2、当HRQ有效,并且总线锁定信号LOCK无效时,响应HRQ请求-HLDA;
3、CPU脱离三总线,发出总线保持信号HLDA,使DMAC一侧的总线“接通”。此时DMAC正式成为系统的主控者。 - DMA传送数据阶段
1、以DMA请求回答信号DACK通知发出请求的外部设备,使之成为被选中的DMA设备;
2、DMAC行使总线控制权,控制数据按初始化的设定进行数据传输。 - DMA传送结束阶段
1、初始化规定的数据字节传送完毕引发;
2、由外设发出“过程结束”信号引发。
DMA传送数据类型
- 纯数据:将源地址的数据传送到目的地址单元中。源地址和目的地址可以是存储器也可以是外设;
- 校验信息:该操作不进行数据传输,只对数据块的每个字节进行某种校验。其过程与数据传输相同,只是DMAC不发存储器和外设的读写信号;
- 检索信息:数据检索与数据校验一样,只是对某个存储区域查找某些关键数据。
DMA操作方式
- 单字节方式:每次DMA操作只操作一个字节;
- 连续方式:DMA获得总线的控制权,便开始连续传送数据,知道将所有规定的字节全部传送万,或收到外部信号,DMAC才结束传送,将总线控制权交给CPU
- 请求方式:当有DMA请求时,DMAC占用总线;当请求无效,或数据传送结束,或由外部送来过程结束信号EOP时,DMAC才释放总线。