【DMA】认识 DMA 及其工作流程(与传统CPU存取方式的区别)

DMA(Direct Memory Access),字面意思“直接访问内存”,无需 CPU 干预直接读写内存。传统CPU读写数据时,需要先将要使用的数据保存到 RAM,等要用时再从RAM 加载。


目录

一、传统CPU存取数据

二、认识DMA

1、什么是DMA

2、DMA 的工作模式、数据传输方式、寻址模式

3、为什么要使用DMA

三、DMA 数据传输

1、准备阶段

2、传输请求

3、数据传送

4、善后处理


一、传统CPU存取数据

CPU 不直接存取外设的原因:

  • CPU 的工作速度和外设的工作速度差距太大
  • 外设格式种类繁多,无法直接存取,需要经过转换

基于上述原因,CPU 不能直接从外设获取或者向外设写入内容。传统CPU 获取数据的步骤如下:

1、CPU 将外设数据加载到内存(和CPU的处理速度最接近)

2、CPU 检查 cache 是否有自己需要的数据(是否命中)

3、如果命中,直接返回数据;如未命中,继续从内存获取(这里暂时不考虑MMU)

4、返回数据

二、认识DMA

由上面CPU 读取数据来看,无论是将外设数据搬移到内存,还是从内存读取数据,都需要CPU 的参与。为了让 CPU 能够专注于处理手中事务,DMA 将负责数据的搬移工作。

1、什么是DMA

DMA(Direct Memory Access)即直接存储器访问,借助内部的控制器来实现内存和外设之间的数据传输。有了DMA,CPU 可以专注于内存数据的存取;数据的搬运过程完全可以交由DMA硬件完成。有了DMA以后,不代表完全不需要CPU了,只是不会像中断那样频繁向CPU发送请求。

  • 开始传输时刻:DMA向CPU申请至少一个总线周期的占用时间来做数据传输工作
  • 结束传输时刻:DMA向CPU发送中断请求,请求CPU处理这些数据

2、DMA 的工作模式、数据传输方式、寻址模式

工作模式:直接模式、FIFO 模式。

① 直接模式

DMA 直接进行从源地址到目的地址的数据传输。

② FIFO 模式

FIFO模式下,可以将要传输的多个数据(或字节)累计存储在FIFO缓冲器中,然后在FIFO缓冲器中设置存储阈值,当到达阈值时,FIFO会自动把所有存储的数据一次性的发送到目标地址。

数据传输方式:单字传送、块传送

① 单字传送(单次模式)

DMA 请求获得批准后,CPU 让出一个总线周期用于字或字节的传送。结束后, DMA 控制器归还总线控制权,CPU 再重新判断下一个总线周期的总线控制权是 CPU 保留,还是继续响应一次新的 DMA 请求。这种方式称为单字传送方式,又称为周期挪用周期窃取

② 块传送(突发模式)

DMA 请求获得批准后,DMA 控制器掌管总线控制权,连续占用若干个总线周期,进行成组连续的批量传送,直到批量传送结束,才将总线的控制权交还给 CPU。这种方式称为成组连续传送方式

寻址模式:增量寻址、非增量寻址

① 增量寻址发送完数据后,继续发送下一个地址的数据,配合突发传输模式

② 非增量寻址一发送完数据后,如果想要继续发送数据,需要更具软件配置的发送下一个数据的地址,再进行数据的传输

3、为什么要使用DMA

第一,可以把比较固定的任务让DMA来做,可以减轻CPU负担,提高系统的效率

第二,DMA具有一般CPU没有的高效操作,能够提高系统的吞吐率(IO 效率)

三、DMA 数据传输

1、准备阶段

CPU 会对 DMA 控制器和 IO 接口进行初始化,初始化的内容如下:

① DMA 控制器初始化

  • 配置 DMA 内存缓冲区的首地址(即告诉DMA把数据放到哪)
  • 配置 DMA 传输方向(是向外设传数据,还是从外设读数据)
  • 配置 DMA 交换量(设置数据传输的上限)

② 接口的初始化

  • I/O 设备的寻址信息

2、传输请求

① 设备接口 => DMA 控制器

设备接口向DMA控制器发送 “ DMA请求 ” ,即请求使用 DMA 进行数据传输

② DMA 控制器 => CPU

DMA 控制器向CPU申请 “ 总线占用 ”,DMA控制器和 CPU 只能有一个占用总线

③ CPU => DMA 控制器

CPU 批准使用总线,此时CPU会让出一个或者多个总线周期用于数据传输。在DMA数据传输期间,CPU 停止访问内存,无法执行需要占用总线的指令。

④ DMA 控制器 => 设备接口

DMA 批准设备请求,此时 DMA控制器将掌握总线控制权。如果是单字节传送,一个总线周期后,DMA归还总线控制权;如果是块传送,连续占用若干个总线周期后,DMA才会归还总线控制权。

3、数据传送

数据传送期间,DMA 控制器会向总线发送读/写命令、向 I/O 接口发响应信号。真正的数据交互是内存和设备接口,DMA 控制器只是负责控制整个数据传送流程。

4、善后处理

在初始化时,CPU 便指定了DMA的交换量,而且DMA 控制器内部有一个计数器,只有 DMA 控制器知道传送是否结束。当传送结束时,DMA控制器向CPU发送一个传输完成的中断,CPU重新接管总线的控制权。

注意:DMA 控制器并非只有在传输完成时才会发送中断,其实传输过半、传输错误也可以发送中断

参考文章:

DMA基本工作原理总结概述(一)——DMA系统架构_dma工作原理_摆渡沧桑的博客-CSDN博客

DJ9-3 DMA 方式_dma会占用总线吗_狂放不羁霸的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/challenglistic/article/details/132109276
DMA