【導讀】本文介紹在嵌入式系統(tǒng)程序中使用直接內(nèi)存訪問(DMA)的用例、優(yōu)點和缺點。本文描述了DMA如何與外設和內(nèi)存模塊交互,以提高CPU的運行效率。還將為讀者介紹不同的DMA總線訪問架構(gòu),及各自的優(yōu)點。
嵌入式系統(tǒng)執(zhí)行的一個常見任務是管理外部輸入。管理輸入會給處理器帶來很多不必要的計算壓力,導致處理器處于有功功率模式下的時間更長,響應速度更慢。為了優(yōu)化功率,保持對事件的快速響應以及管理大量數(shù)據(jù)連續(xù)傳輸,具有直接內(nèi)存訪問(DMA)的微控制器可提供更好的解決方案。
直接內(nèi)存訪問(DMA)
在涉及外設的系統(tǒng)應用中,微處理器在許多點可能都會遭遇瓶頸。例如,在管理一個不斷發(fā)送數(shù)據(jù)的ADC時,處理器可能時常被中斷,導致它很難完成其他任務。DMA是一種在大型或快速數(shù)據(jù)處理事務中移動數(shù)據(jù)和盡量減少處理器參與的方法。您可以將DMA控制器當做一個協(xié)處理器,它的唯一作用就是與存儲器和外設交互。通過這種方式,主處理器可以成功管理工作量大的外設,專注于處理其他任務,甚至可以在后臺處理數(shù)據(jù)時進入睡眠狀態(tài),以節(jié)省功率。例如,在Arm?架構(gòu)上,DMA模塊可以在LP2(睡眠)或LP3(運行)模式下運行。對于需要更長的電池壽命的應用,例如可穿戴傳感器中樞和智能手表,這具有明顯的優(yōu)勢。
優(yōu)點和缺點
在許多數(shù)字系統(tǒng)中,DMA很有用處,有時甚至用于管理大量總線流量。它還用于網(wǎng)卡、顯卡,甚至一些原始的IBM個人電腦中。也就是說,將DMA集成到設計中時,確實需要進行一些權(quán)衡考量。
表1. 使用DMA的優(yōu)點
表2. 使用DMA的缺點
總線訪問和CPU周期
雖然DMA控制器在節(jié)能或加速嵌入式系統(tǒng)方面非常有效,但它們的實現(xiàn)方案還沒有高度標準化??梢允褂枚喾N方案來確保不會與CPU同時授予內(nèi)部總線訪問權(quán)限??偩€訪問方案的主要目標是避免同時訪問相同的存儲器位置,以免發(fā)生緩存區(qū)不連續(xù)和邏輯錯誤。單個DMA控制器通常配置為采用這些方案之一,因為使用每種方案可能需要不同的硬件或固件控制。大多數(shù)DMA控制器使用的總線訪問方案是突發(fā)、周期竊用和透明模式的DMA。
透明DMA一次只能執(zhí)行一項操作,但是,它也必須等待處理器執(zhí)行指令,以獲得對所需數(shù)據(jù)或地址總線的訪問。驗證這種訪問限制需要使用額外的邏輯,這種類型DMA的速度通常最慢。在不需要訪問存儲器總線但需要進行額外的處理的應用中,透明DMA可能具有優(yōu)勢。在這種情況下,優(yōu)勢在于消除了對CPU的節(jié)流,因為處理器無需完全停止運行。
表3. DMA類型及其優(yōu)缺點總結(jié)
圖1. DMA運行期間,突發(fā)DMA的架構(gòu)圖。
突發(fā)DMA是借由不常見的大型突發(fā)事件發(fā)生,在此期間,DMA會根據(jù)緩沖區(qū)可以存儲的容量,向目標緩沖區(qū)發(fā)送盡可能多的數(shù)據(jù)。DMA控制器會在短時間內(nèi)阻止CPU運行,以移動大量內(nèi)存,然后將總線交還給主CPU,并一直重復該過程,直到傳輸完成。突發(fā)DMA通常被認為是速度最快的類型。
圖2. 在DMA運行期間,周期竊用DMA發(fā)生在兩個CPU周期之間。
相反,單字節(jié)傳輸或周期竊用DMA從CPU獲取提示,并且僅在CPU指令之間執(zhí)行操作。它在兩個CPU周期之間插入一個操作,因此實際上"竊取"了CPU時間。由于一次只能執(zhí)行一項操作的限制,它通常比突發(fā)DMA慢。
圖3. 在DMA運行期間,透明DMA在處理器處理不訪問數(shù)據(jù)或地址總線的任務時發(fā)生。
突發(fā)DMA架構(gòu)示例
圖4. MAX32660上的DMA控制器的架構(gòu)圖。
關(guān)于突發(fā)DMA控制器示例,可以參見 MAX32660(參見圖4)。上方路徑對應數(shù)據(jù)流,下方路徑代表先進的高性能總線(AHB)和DMA邏輯之間的控制/狀態(tài)流。DMA控制器可以用作AHB和存儲器或外設模塊之間的緩沖區(qū)接口,具體取決于其配置方式。DMA邏輯位于DMA緩沖區(qū)和每個外設之間,用于在處理期間獨立管理每個唯一的外設總線。DMA運行一次可以移動多達32個字節(jié),只要源/目標緩沖區(qū)中可以包含這么多數(shù)據(jù)。緩沖區(qū)最高可存儲16 MB,除了內(nèi)部存儲器傳輸外,還可以配置為發(fā)送或接收I2C、SPI、I2S和UART。編程DMA控制可能會因協(xié)議的不同而略有不同,但外設事務完全由DMA控制器管理。仲裁模塊控制四個DMA通道和CPU之間的總線訪問限制,根據(jù)優(yōu)先級系統(tǒng)批準請求。
現(xiàn)代DMA選項
總之,對于管理大量傳感器并要求高吞吐量、高效率和低功耗操作的現(xiàn)代嵌入式系統(tǒng)來說,DMA是一個關(guān)鍵特性。它就像是一個專門用于處理存儲器和外設總線事務的協(xié)處理器。
許多應用必須使用DMA,以盡可能降低功耗和減輕處理器負載。例如,健康和可穿戴設備可以處理大量的數(shù)據(jù)吞吐量,但它們也必須盡可能地節(jié)省電池電量,同時還要處理敏感數(shù)據(jù)。ADI公司在適用于低功耗可穿戴設備的微控制器上采用快速突發(fā)DMA架構(gòu),例如 MAX32660 和 MAX32670。此外,DARWIN Arm微控制器(例如 MAX32666 )是為集成Bluetooth? 5的可穿戴設備和物聯(lián)網(wǎng)應用而設計的。這些器件采用2個8通道突發(fā)DMA控制器,支持基于事件的事務。它們甚至配備了出色的安全硬件,具有安全引導加載程序和信任保護單元(TPU),可以加速ECDSA、SHA-2和AES加密。從早期的IBM電腦到網(wǎng)卡,再到現(xiàn)在的安全、低功耗可穿戴設備和物聯(lián)網(wǎng)設備,DMA是現(xiàn)代數(shù)字系統(tǒng)的基本特征。
免責聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進行處理。
推薦閱讀: