1、DMA造成臟數(shù)據(jù)在使用DMA進行數(shù)據(jù)搬運時,當需要中途停止DMA的傳輸,需要先停止控制器的dma請求,再強制關(guān)閉DMA,最后再釋放內(nèi)存,否則有可能造成DMA搬運數(shù)據(jù)到釋放過的內(nèi)存中。
2、省電對DMA的影響
創(chuàng)新互聯(lián)是一家專業(yè)提供屏山企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計、網(wǎng)站制作、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為屏山眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。
在使用DMA將數(shù)據(jù)從ram搬運到fifo后,釋放省電鎖之前,需要特別注意,不能僅僅依賴于DMA的完成中斷,DMA的完成中斷只表示DMA已經(jīng)將所有數(shù)據(jù)都搬運進外設(shè)的fifo,不代碼外設(shè)已經(jīng)完成fifo中數(shù)據(jù)的傳輸。
必須添加FIFO是否有數(shù)據(jù)的判斷,否則進省電后會導(dǎo)致fifo中未傳輸完成的數(shù)據(jù)丟失。
3、Cache對DMA的影響
在mem-->dev傳輸之前,需要先clean cache,保證cache中的數(shù)據(jù)到真正的RAM中后,再啟動DMA;
在dev-->mem傳輸之后,需要invalid cache,保證每次讀數(shù)據(jù)會重新從RAM中去取數(shù)據(jù)。(注意:A9處理器,invalidate操作僅會無效掉當前cache line,不會有其他操作;A53處理器,32位或者64位模式下,invalidate的cacheline如果是dirty的,cache在進行invalidate前會自動增加clean操作。)
DMA使用需要考慮cache一致性,而在cache一致性操作時,有可能將別人的空間誤踩,所以在申請DMA空間時,需要注意地址和大小要進行cache line對齊。
4、MMU對DMA的影響
MMU完成虛擬地址和物理地址的映射,虛擬地址對CPU可見,對DMA不可見;物理地址對CPU不可見,對DMA可見。
1、配置DMA傳輸?shù)刂窌r,需要注意將物理地址轉(zhuǎn)換為虛擬地址;
Linux上kmalloc出來的地址物理連續(xù),地址轉(zhuǎn)換后可給DMA使用,vmalloc出來的地址物理不連續(xù),即使轉(zhuǎn)換也不能給DMA使用。