本文讨论了直接内存访问(DMA)在嵌入式系统编程中的使用,以及DMA如何与外围设备和内存模块交互,以提高CPU的效率。

本文解释了在嵌入式系统编程中使用直接内存访问(DMA)的用例、优点和缺点。本文描述了DMA如何与外围设备和内存模块交互,以提高CPU的运行效率。本文还将向读者介绍不同的DMA总线访问体系结构及其各自的优点。

嵌入式系统的一项常见任务是管理外部输入。管理输入会给处理器带来大量不必要的计算压力,从而导致有功功率模式下的时间更长,响应时间变慢。为了优化功率、保持对事件的快速响应以及管理大规模连续数据传输,具有直接存储器访问(DMA)的微控制器可以提供最佳解决方案。

直接内存访问(DMA)

在涉及外围设备的系统应用中,微处理器可能会遇到很多瓶颈。例如,当管理一个不断发送数据的ADC时,处理器可能会经常中断,以至于难以完成其他任务。DMA是一种移动数据的方法,可以最大限度地减少处理器在大型或快速数据事务中的参与。您可以将DMA控制器视为协处理器,其唯一目的是与内存和外围设备交互。这使得主处理器能够成功地管理贪婪的外围设备,专注于另一项任务,甚至在数据事务发生在后台时进入休眠状态并节省电力。例如,在Arm®架构上,DMA模块可以在LP2(休眠)或LP3(运行)模式下运行。这在需要延长电池寿命的应用中具有明显优势,例如可穿戴传感器集线器和智能手表。

优点和缺点

DMA在许多数字系统中都很有用,有时甚至需要它来管理大量的总线流量。它已经被用于网卡、图形卡,甚至一些原始的IBM PC。也就是说,在设计中加入DMA确实需要一些权衡。

表1。使用DMA的优点

CPU时间 DMA最小化了对处理器执行和中断的需要,

减少了数据事务所需的CPU时间。

功耗 如果DMA允许处理器在DMA传输过程中休眠,那么使用DMA可以使功耗最小化。
并行操作 根据系统总线的体系结构细节,处理器可能能够在外围事务发生时执行其他操作。

表2。使用DMA的缺点

费用 将系统与DMA结合需要DMA控制器,这会使系统更昂贵。
复杂性 虽然DMA可以减少中断的频率,但它可以增加应用程序固件的大小和复杂性。
平台依赖性 DMA控制器在制造商之间和制造商内部具有不同的内部架构,并且可以根据其本地总线访问方案具有不同的行为。
缓存不一致 DMA事务可以通过写入内存层次结构的缓存层而导致逻辑错误。这可以通过使用缓存相关系统架构或在DMA完成时使缓存存储无效来解决。

总线访问和CPU周期

虽然DMA控制器在节能或加速嵌入式系统方面非常有效,但它们的实现并没有严格标准化。有多种方案可用于确保内部总线访问不会与CPU同时授予。总线访问方案的目标主要是避免对相同内存位置的并发访问,这可能导致缓存不一致和逻辑错误。单个DMA控制器通常将被配置为采用这些方案中的一个,因为可能需要不同的硬件或固件控制来使用它们中的每一个。大多数DMA控制器使用的总线访问方案是突发、周期窃取和透明DMA。

透明DMA一次只能执行一个操作,但它还必须等待处理器执行指令,在这些指令中,它可以访问所需的数据或地址总线。需要额外的逻辑来验证这种访问限制,这种类型的DMA通常是最慢的。透明DMA在具有不需要访问存储器总线的额外处理的应用中可能是有利的。在这种情况下的优点是消除了对CPU的限制,因为处理器不必完全停止运行。

表3。DMA类型及其优缺点概述

DMA类型 赞成的意见 欺骗
突发DMA 最快的DMA类型 相对较长的CPU空闲时间
循环窃取DMA CPU没有长时间空闲

连续时期

比突发DMA慢
透明DMA 无需限制CPU使用 DMA的最慢形式


图1。DMA操作期间突发DMA的体系结构图。

突发DMA通过不频繁的大突发发生,其中DMA控制器将尽可能多的数据发送到目标缓冲区。DMA控制器在很短的时间内阻止CPU操作,以移动一大块内存,然后将总线交还给主CPU,直到传输完成。突发DMA通常被认为是最快的类型。


图2:DMA操作期间的周期窃取DMA发生在两个CPU周期之间。

相反,单字节传输或循环窃取DMA从CPU获取线索,并且只在CPU指令之间执行操作。它在两个CPU周期之间插入一个操作,因此实际上是“窃取”CPU时间。由于一次执行一个操作的限制,它通常比突发DMA慢。


图3。当处理器处理不访问数据或地址总线的任务时,在DMA操作期间发生透明DMA。

突发DMA体系结构示例


图4。MAX32660上DMA控制器的结构图。

突发DMA控制器的示例可以在最大32660(见图4)。上部路径对应于数据流,下部路径表示高级高性能总线(AHB)和DMA逻辑之间的控制/状态流。DMA控制器可以充当AHB和内存或外围模块之间的缓冲接口,具体取决于其配置方式。DMA逻辑位于DMA缓冲器和每个外设之间,以在事务期间独立地管理每个唯一的外设总线。DMA操作一次最多可以移动32个字节,前提是源/目标缓冲区可以包含这么多数据。缓冲区最多可容纳16 MB,可配置为发送或接收I2C、SPI、I2S和UART以及内部存储器传输。编程DMA控制可能在协议之间略有不同,但外围事务仅由DMA控制器管理。仲裁器模块控制四个DMA通道和CPU之间的总线访问限制,根据优先级系统授予请求。

现代DMA选项

总之,DMA是现代嵌入式系统的一项关键功能,这些系统管理大量传感器,需要高吞吐量、高效率和低功耗操作。它的行为就像专用于内存和外围总线事务的协处理器。

对于许多应用程序来说,使用DMA是必要的,以最小化功耗并减轻处理器负载。例如,健康和可穿戴设备处理大量数据吞吐量,但它们也必须在处理敏感数据的同时尽可能节省电池电量。Analog Devices在微控制器上提供快速突发DMA架构,这些微控制器为低功耗可穿戴设计(如最大32660和最大32670此外,DARWIN Arm微控制器如最大32666专为集成蓝牙的可穿戴和物联网应用而构建®5.这些设备具有两个8信道突发DMA控制器,集成支持基于事件的事务。它们甚至具有一流的安全硬件,带有安全引导加载程序和信任保护单元(TPU),用于加速ECDSA、SHA-2和AES加密。从早期的IBM PC到网卡,再到现在的安全、低功耗可穿戴和物联网设备,DMA是现代数字系统的一个基本特征。

注:所有图形均由Maxim集成/模拟设备提供。


布兰登·赫斯特是一名硬件和嵌入式固件工程师,与Maxim Integrated培训和技术服务小组合作,Maxim Integrated现在是Analog Devices的一部分。他毕业于加州保利市圣路易斯·奥比斯波分校,获得电气工程学士学位,并于2021 1月加入马克西姆公司。此前,布兰登曾在股份有限公司Maxim的TTS团队和产品安全工程团队实习brandon.hurst@analog.com.