DMA技术原理
最近在一些技术资料上看见一篇关于讲解DMA技术原理,个人感觉是很通俗易懂的,所以博主就通过该文章分享出来,大家共同成长进步。如有更好的文献,也欢迎分享!
目录
一、DMA的含义
1)狭义定义
2)广义定义
3)示例如下
二、DMA关键参数
三、DMA模式
1)单描述符DMA
2)多描述符DMA
一、DMA的含义
1)狭义定义
是英文Direct Memory Access(直接内存访问)的缩写,主要指无需CPU介入下的外设、内存、子系统之间的数据交换技术。
2)广义定义
是指交换数据的双方(或双方的控制者)不直接参与与数据传输的技术,不再局限于CPU构建的系统。
3)示例如下
将数据0~31传输到UART接口:
二、DMA关键参数
关键参数 | 描述 |
数据来源类型 | 如DDR存储器、Flash存储器、UART、SPI、ETH、PCIE等 |
数据目的类型 | 与数据源相同 |
数据源、目的地址 | 数据来源或者目的的具体地址 |
地址模式 | 数据的源、目的地址更新模式、递增、递减、不变 |
数据长度 | 传输数据的长度 |
工作模式 | 单/多次模式 = 完成1/N次数据传输 循环模式 = 重复完成设定的数据传输 |
传输状态 | 传输进行的状态,表示传输完成了HALF、DONE、ERR等 |
中断设置 | 传输各个状态是否产生中断 |
启动/终止 | 启动DMA完成数据传输,终止DMA的传输(常用于循环模式的终止) |
三、DMA模式
1)单描述符DMA
也可以称之为BLOCK类型,只能完成1块数据的传输,即DMA参数寄存器只提供了一份DMA相关参数的配置,属于手动步枪。
CPU配置并启动DMA控制器,DMA控制器替代CPU完成数据从源到目的地的搬移。
如果DMA的数据传输方式为单次模式,则数据传输完成后通过终端主动上报或者CPU查询DMA状态通知CPU,如果CPU想进行下一次的数据传输,需要重新配置并启动DMA。
如果DMA的数据传输方式为多次模式,则完成指定次数的数据传输后DMA通过中断或者状态通知CPU此次DMA数据传输完成。
如果DMA的数据传输方式为循环模式,需要CPU主动终止DMA,之后DMA通过中断或者状态通知CPU此次DMA数据传输完成。
DMA控制器的内部结构为DMA配置寄存器+DMA执行机构。
2)多描述符DMA
也可以称之为Scatter-Gather(分散聚合)类型的DMA,DMA参数寄存器保存了一份DMA工作参数,同时增加了一个参数装载机构,在启用SG模式时,自动从外部参数表装载工作参数到参数寄存器,完成参数的连续装载,属于自动步枪。