DMA理论篇
简介
传统的数据传输都是需要CPU来实现,从一个地方拷贝到另一个地方;而DMA(Direct Memory Access)则不完全依赖CPU,DMA更新芯片SOC的一个控制器,他可以控制数据从内存中传输到另一个地方(外设、soc其它模块),CPU可以专注做自己的事情,而DMA专门传输数据也更高效;
DMA原理
如上图,dma传输过程分为:
- DMA初始化阶段,DMA控制负责分配内存信息,记录内存首地址、大小以及传输方向;
- 初始化完成后,由外设向DMA发起请求,而DMA又向CPU发起请求,CPU通过DMA的请求后,总线控制权限将交由DMA,CPU将无法操作;
- 在DMA控制器控制下,数据在内存和外设之间发生数据转移
- DMA内部计数器,当计数和第一个步骤大小相同时,说明数据传递完成,中断通知CPU传输完成了;除此之外,传输过程中出错也会中断通知CPU处理
DMA传输中的模式
工作模式
- 直接模式
从源地址直接传递到目的地址 - FIFO队列模式
DMA会先将数据从源地址拷贝FIFO队列中,当队列的数据量达到某个阈值时,会自动将队列中所有数据传输到目的地址
数据传输模式
- 单次模式
DMA向CPU请求后,CPU让出一个总线周期,DMA传输一次数据,完成后归还总线权限给CPU;下次再来在申请 - 突发模式(brust)
DMA向CPU请求后,CPU让出n个总线周期,DMA连续传输多个数据块,数据量大,知道数据传输完成才归还总线权限。
寻址方式
- 增量寻址
对应突发模式,发送数据后,继续发送下一个地址的数据 - 非增量寻址
发送一次数据后,软件更新下一次发送的数据地址,在进行数据传输
参考文章
1. 认识 DMA 及其工作流程