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