[杂谈]-快速了解直接内存访问 (DMA)

快速了解直接内存访问 (DMA)

文章目录

  • 快速了解直接内存访问 (DMA)
    • 1、使用 DMA 需要什么?
    • 2、DMA介绍
    • 3、DMA 中的数据传输如何进行?
    • 4、DMA接口
    • 5、DMAC 控制器寄存器
    • 6、DMA 控制器编程模式
      • 6.1 突发模式(Burst Mode)
      • 6.2 循环窃取模式(Cycle Stealing Mode)
      • 6.3 透明模式(Transparent Mode)
    • 7、DMA 总线仲裁的概念
      • 7.1 总线仲裁
      • 7.2 集中仲裁
      • 7.3 分布式仲裁
    • 8、DMA的优点

在本文中,我们将介绍 DMA,它代表直接内存访问(Direct Memory Access,DMA)。 首先,我们将了解为什么需要使用 DMA 以及在现代计算机和微控制器中使用 DMA 的优点是什么。

1、使用 DMA 需要什么?

计算机的处理器执行许多功能,包括外部设备和主存储器之间的数据传输。 从初始化数据传输到将其存储在主存储器中的目的地,所有处理均由CPU控制。 当 CPU 启动时,处理器可能不知道外部 I/O 设备已准备好进行数据传输,这可能会导致数据丢失。

另一个问题是微处理器与外部 I/O 外设的同步。 在这种情况下,设备只要准备好就会向处理器发送中断,但处理器需要一些时间将其自身从主程序切换到子例程。 但如果异步 I/O 设备速度很快并且生成大量数据,它就无法等待延迟,这也会再次导致数据丢失。 因此,为了解决这个问题并保持系统的效率,引入了一种称为DMA的方法,该方法允许外围设备以最少的处理器干预直接访问存储器。 这是在称为 DMAC 的控制器的帮助下实现的,该控制器充当总线的主控器来控制特定时间的通信。

2、DMA介绍

直接内存地址通常称为 DMA,是一种数据传输技术,其中 I/O 设备直接与内存进行通信,而无需通过中央处理单元。 在该硬件机制中,DMA控制器代替CPU单元并负责访问输入输出设备和存储器以传输数据。 DMA 控制器是专用硬件,无需 CPU 参与即可直接执行读写操作,并节省了涉及操作码获取、解码、递增和源/目标测试地址的时间,而这些操作本来应该由中央处理单元完成。 这导致外设和存储器之间的数据传输速率较高,并且可以快速传输大数据块。

[杂谈]-快速了解直接内存访问 (DMA)_第1张图片

3、DMA 中的数据传输如何进行?

数据传输由起始地址、块中要传输的字数以及传输数据的方向发起。 DMA 控制器收到信息后立即执行请求的功能。 当整个数据块传输完后,控制器会发出中断信号,通知微处理器所请求的操作已完成。

对于包括 DMA 的 I/O 操作,请求数据传输的程序被操作系统置于挂起状态,并开始执行另一个程序。 完成后,DMA 会发出一个中断来通知处理器。 结果,操作系统将程序从阻塞状态释放回可运行状态,以便CPU可以返回到请求的程序并继续进一步执行。 在 DMA 传输期间,DMA 控制器是主控制器,必须与相关外设同步。

4、DMA接口

DMA 是外部设备和系统总线之间的协议。 它由 DMAC、磁盘控制器和内存组成。 DMAC 连接到快速系统总线,这是唯一的传输媒介。 磁盘控制器对磁盘进行授权并具有 DMA 潜力,并且可以执行像 DMAC 一样的独立功能。 它们也被称为可以根据其编程执行 DMA 数据传输的通道。

[杂谈]-快速了解直接内存访问 (DMA)_第2张图片

5、DMAC 控制器寄存器

它具有用于存储地址、字数和控制信号的寄存器。 处理器访问控制器寄存器以启动数据传输操作。 有两个寄存器,即地址寄存器和字计数寄存器,分别用于存储要存储数据的内存地址和字计数,以及一个控制寄存器,用于保存状态和控制标志。 除此之外,还有一个读/写位决定数据通信的方向。

当程序指示读取时,即R/W为1时,数据从存储器传输到I/O设备,当它为0时,将数据从外设写入主存储器。 当数据块完全传输完毕后,DMA 就准备好接受进一步的命令。 这通过将 Done 标志设置为 1 来表示。之后 DMA 会升高 IE 标志,为处理器启用中断,并且当 DMA 请求中断时,IRQ 位也会变为 1。

[杂谈]-快速了解直接内存访问 (DMA)_第3张图片

6、DMA 控制器编程模式

通常,总线上连接有多个通用外部设备。 它们发出请求并且始终优先于 CPU 请求。 此外,在这些 DMA 外设中,速度较快的外设具有最高优先级。 因此,DMAC 的编程方式和满足这种情况的方式非常重要。 它决定了可以传输数据的次数、可以访问的内存分配数量以及 DMA 控制器使用的传输模式类型。 在此基础上,DMA控制器具有突发模式、周期窃取模式和透明模式三种编程模式。

6.1 突发模式(Burst Mode)

在此模式下,DMA从CPU获取系统总线来执行数据传输。 这是最快的模式,因为数据是连续通信的。 DMAC 的优先级高于 CPU,可以不间断地执行操作。 处理器必须等待 DMAC 完成其工作。 例如,如果有网络协议,则从主存储器中读取数据块并暂时存储在内部缓冲区中。 然后通过这种模式以适合内存和系统总线的速度在网络上传输。

6.2 循环窃取模式(Cycle Stealing Mode)

在循环窃取模式下,微处理器控制计算机总线,但 DMAC 倾向于窃取处理器的执行周期。 在此模式下,DMAC 请求处理器进行一个周期的总线控制并停止 CPU。 它传输一个字节,然后将控制权交还给处理器。 这样CPU就不需要长时间等待。

6.3 透明模式(Transparent Mode)

仅当处理器不执行总线相关功能时DMA控制器才工作并具有总线控制的模式称为透明模式。 这意味着DMA只有在系统总线空闲时才能传输数据,并且不会干扰处理器执行其他指令。 它也称为隐藏模式。 这被认为是一种缓慢但有效的直接内存访问模式。

7、DMA 总线仲裁的概念

我们知道只有一个主设备可以在特定时间戳获取总线,否则可能会导致问题。 但处理器和几个DMA设备可能需要同时使用总线来访问主存。 因此,为了解决此争议并组织频繁请求传输数据的 DMA 设备的活动,在计算机总线上执行了一个称为仲裁的过程。

7.1 总线仲裁

在总线仲裁过程中,DMA设备最初控制总线并成为当前的总线主控器。 然后它传输其数据块并最终将其控制权传递给另一个 DMA 设备。 就这样,主宰权就传递了,并选出了新的主宰。 考虑到外设的需求,它们轮流成为主设备并优先访问总线。

总线仲裁有两种配置,即集中仲裁,其中仲裁器决定哪个主机使用总线;分布式仲裁,允许所有外部设备参与并获取计算机总线的下一个主控权以传输其块。

[杂谈]-快速了解直接内存访问 (DMA)_第4张图片

7.2 集中仲裁

总线仲裁器可以是连接到总线的处理器或专用硬件。 通常,微处理器是总线主控,除非仲裁器将主控权授予 DMA 控制器。 每当 DMAC 想要访问总线时,它都会向仲裁器发送请求信号,一旦授予 DMAC 访问权限,它就成为主设备并开始使用总线。 DMAC 通过激活总线请求线来发送请求,总线请求线又激活总线授权信号。 如果多个 DMA 控制器串行连接到一条总线,则总线请求线的信号是它们的请求的逻辑或。

[杂谈]-快速了解直接内存访问 (DMA)_第5张图片

以同样的方式,授权信号穿过所有连接的 DMAC,直到到达发出第一个请求的控制器。 当接近相关的 DMAC 时,它会阻止总线授权信号的进一步传播并激活总线忙线。 活动的总线忙线指示在该时间点它被占用的其他设备。 现在,这些其他设备将等待总线忙线变为非活动状态,并且下一个首选主设备将获得总线的主控权。

7.3 分布式仲裁

在此配置中,没有中央仲裁器。 所有外设都有平等的权利执行仲裁过程。 为此,所有 DMA 设备都分配有一个 4 位长的标识号。 当这些设备向总线发送请求时,它们发出“开始仲裁”信号,将 ID 号放置到仲裁线上并比较这些位。 通过任意线路生成的ID号决定了当时的主机。 选择具有最高ID号的设备并允许访问总线进行数据传输。

[杂谈]-快速了解直接内存访问 (DMA)_第6张图片

8、DMA的优点

  • 内存和 I/O 设备之间的快速数据传输
  • CPU和DMA可以同时运行并提供更好的性能
  • 更有效地使用外部中断
  • 更高的数据吞吐量
  • I/O设备和外设直接与内存通信

你可能感兴趣的:(杂谈,物联网,嵌入式硬件,计算机组成,硬件,DMA)