如何使用DMA在低功耗穿戴式裝置中加速周邊監測
作者:ADI硬體和嵌入式韌體工程師Brandon Hurst
摘要
本文介紹在嵌入式系統程式中使用直接記憶體存取(DMA)的用例、優點和缺點。本文描述了DMA如何與周邊和記憶體模組交互作用,以提升CPU的運行效率。並將為讀者介紹不同的DMA匯流排存取架構,及各自的優點。
嵌入式系統執行的一個常見任務是管理外部輸入。管理輸入會為處理器帶來很多不必要的計算壓力,導致處理器處於有功功率模式下的時間更長,回應速度更慢。為了優化功率,保持對事件的快速回應以及管理大量資料連續傳輸,具有直接記憶體存取(DMA)的微控制器可提供更好的解決方案。
直接記憶體存取(DMA)
在涉及周邊的系統應用中,微處理器在許多點可能都會遭遇瓶頸。例如,在管理一個不斷發送資料的ADC時,處理器可能時常被中斷,導致它很難完成其他任務。DMA是一種在大型或快速資料處理事務中移動資料和儘量減少處理器參與的方法。您可以將DMA控制器當成一個輔助處理器,它的唯一作用就是與記憶體和周邊交互作用。透過這種方式,主處理器可以成功管理工作量大的周邊,專注於處理其他任務,甚至可以在幕後處理資料時進入睡眠狀態,以節省功率。例如,在Arm®架構上,DMA模組可以在LP2(睡眠)或LP3(運行)模式下運行。對於需要更長的電池壽命的應用,例如可穿戴感測器中樞和智慧手錶,這具有明顯的優勢。
優點和缺點
在許多數位系統中,DMA很有用處,有時甚至用於管理大量匯流排流量。它還用於網卡、顯卡,甚至一些原始的IBM個人電腦中。也就是說,將DMA整合到設計中時,確實需要進行一些權衡考量。
使用DMA的優點 | |
CPU時間 | DMA可以大幅減少需要處理器執行和中斷的頻率,縮短處理資料需要耗費的CPU時間。 |
功耗 | 如果DMA允許處理器在DMA傳輸期間進入睡眠模式,則有機會盡可能降低功耗。 |
並聯操作 | 根據系統匯流排的架構情況,處理器可以在執行周邊設備事務時執行其他操作。 |
使用DMA的缺點 |
|
成本 | 在系統中整合DMA需要用到DMA控制器,這會使系統成本更加高昂。 |
複雜性 | 雖然DMA可以降低中斷頻率,但它會使應用韌體的大小和複雜性增加。 |
對平台的依賴性 | 不同製造商生產的DMA控制器以及同一製造商生產的不同DMA控制器,其內部架構不同,根據它們本身的匯流排瀏覽方案,行為特性也會不同。 |
緩存區的不連續性 | 在寫入記憶體體系的緩存層時,DMA事務可能導致邏輯錯誤。使用緩存連貫的系統架構或在DMA完成時使緩存無效可以解決這一問題。 |
匯流排存取和CPU週期
雖然DMA控制器在節能或加速嵌入式系統方面非常有效,但它們的實現方案還沒有高度標準化。可以使用多種方案來確保不會與CPU同時授予內部匯流排存取權限。匯流排存取方案的主要目標是避免同時存取相同的記憶體位置,以免發生緩存區不連續和邏輯錯誤。單一DMA控制器通常配置為採用這些方案之一,因為使用每種方案可能需要不同的硬體或韌體控制。大多數DMA控制器使用的匯流排瀏覽方案是突發、週期竊用和透明模式的DMA。
透明DMA一次只能執行一項操作,但是,它也必須等待處理器執行指令,以獲得對所需資料或位址匯流排的存取。驗證這種存取限制需要使用額外的邏輯,這種類型DMA的速度通常最慢。在不需要存取記憶體匯流排但需要進行額外的處理的應用中,透明DMA可能具有優勢。在這種情況下,優勢在於消除了對CPU的節流,因為處理器無需完全停止運行。
DMA類型 | 優點 | 缺點 |
突發DMA | 速度最快的DMA類型 | CPU的閒置時間相對很長 |
週期竊取DMA | CPU不會連續長時間處於空閒狀態 | 比突發DMA慢 |
透明DMA | 無需使用CPU節流 | 速度最慢的DMA |
突發DMA是藉由不常見的大型突發事件發生,在此期間,DMA會根據緩衝區可以儲存的容量,向目標緩衝區發送盡可能多的資料。DMA控制器會在短時間內阻止CPU運行,以移動大量記憶體,然後將匯流排交還給主CPU,並一直重複該過程,直到傳輸完成。突發DMA通常被認為是速度最快的類型。
相反,單字節傳輸或週期竊用DMA從CPU獲取提示,並且僅在CPU指令之間執行操作。它在兩個CPU週期之間插入一個操作,因此實際上「竊取」了CPU時間。由於一次只能執行一項操作的限制,它通常比突發DMA慢。
突發DMA架構示例
關於突發DMA控制器示例,可以參見 MAX32660 (參見圖4)。上方路徑對應資料流程,下方路徑代表先進的高性能匯流排(AHB)和DMA邏輯之間的控制/狀態流。DMA控制器可以用作AHB和記憶體或周邊模組之間的緩衝區介面,具體取決於其配置方式。DMA邏輯位於DMA緩衝區和每個周邊之間,用於在處理期間獨立管理每個唯一的周邊匯流排。DMA運行一次可以移動多達32個位元組,只要源/目標緩衝區中可以包含這麼多資料。緩衝區最高可儲存16 MB,除了內部記憶體傳輸外,還可以配置為發送或接收I2C、SPI、I2S和UART。程式設計DMA控制可能會因協議的不同而略有不同,但周邊事務完全由DMA控制器管理。仲裁模組控制四個DMA通道和CPU之間的匯流排存取限制,根據優先順序系統批准請求。
現代DMA選項
總之,對於管理大量感測器並要求高輸送量、高效率和低功耗操作的現代嵌入式系統來說,DMA是一個關鍵特性。它就像是一個專門用於處理記憶體和周邊匯流排事務的輔助處理器。
許多應用必須使用DMA,以盡量降低功耗和減輕處理器負載。例如,健康和穿戴式裝置可以處理大量的資料輸送量,但它們也必須盡量節省電池電量,同時還要處理敏感性資料。ADI在適用於低功耗可穿戴設備的微控制器上採用快速突發DMA架構,例如 MAX32660 和 MAX32670。此外,DARWIN Arm微控制器(例如 MAX32666 )是為整合Bluetooth® 5的可穿戴設備和物聯網應用而設計的。這些元件採用2個8通道突發DMA控制器,支援基於事件的事務。它們甚至配備了傑出的安全硬體,具有安全引導載入程式和信任保護單元(TPU),可以加速ECDSA、SHA-2和AES加密。從早期的IBM電腦到網卡,再到現在的安全、低功耗可穿戴設備和物聯網設備,DMA是現代數位系統的基本特徵。