溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

DMA使用注意事項(xiàng)

發(fā)布時(shí)間:2020-06-10 10:50:24 來(lái)源:網(wǎng)絡(luò) 閱讀:2448 作者:dongzhiliange 欄目:系統(tǒng)運(yùn)維

1、DMA造成臟數(shù)據(jù)
在使用DMA進(jìn)行數(shù)據(jù)搬運(yùn)時(shí),當(dāng)需要中途停止DMA的傳輸,需要先停止控制器的dma請(qǐng)求,再?gòu)?qiáng)制關(guān)閉DMA,最后再釋放內(nèi)存,否則有可能造成DMA搬運(yùn)數(shù)據(jù)到釋放過(guò)的內(nèi)存中。
2、省電對(duì)DMA的影響

在使用DMA將數(shù)據(jù)從ram搬運(yùn)到fifo后,釋放省電鎖之前,需要特別注意,不能僅僅依賴(lài)于DMA的完成中斷,DMA的完成中斷只表示DMA已經(jīng)將所有數(shù)據(jù)都搬運(yùn)進(jìn)外設(shè)的fifo,不代碼外設(shè)已經(jīng)完成fifo中數(shù)據(jù)的傳輸。
必須添加FIFO是否有數(shù)據(jù)的判斷,否則進(jìn)省電后會(huì)導(dǎo)致fifo中未傳輸完成的數(shù)據(jù)丟失。

3、Cache對(duì)DMA的影響

在mem-->dev傳輸之前,需要先clean cache,保證cache中的數(shù)據(jù)到真正的RAM中后,再啟動(dòng)DMA;
在dev-->mem傳輸之后,需要invalid cache,保證每次讀數(shù)據(jù)會(huì)重新從RAM中去取數(shù)據(jù)。(注意:A9處理器,invalidate操作僅會(huì)無(wú)效掉當(dāng)前cache line,不會(huì)有其他操作;A53處理器,32位或者64位模式下,invalidate的cacheline如果是dirty的,cache在進(jìn)行invalidate前會(huì)自動(dòng)增加clean操作。)
DMA使用需要考慮cache一致性,而在cache一致性操作時(shí),有可能將別人的空間誤踩,所以在申請(qǐng)DMA空間時(shí),需要注意地址和大小要進(jìn)行cache line對(duì)齊。

4、MMU對(duì)DMA的影響

MMU完成虛擬地址和物理地址的映射,虛擬地址對(duì)CPU可見(jiàn),對(duì)DMA不可見(jiàn);物理地址對(duì)CPU不可見(jiàn),對(duì)DMA可見(jiàn)。
1、配置DMA傳輸?shù)刂窌r(shí),需要注意將物理地址轉(zhuǎn)換為虛擬地址;
Linux上kmalloc出來(lái)的地址物理連續(xù),地址轉(zhuǎn)換后可給DMA使用,vmalloc出來(lái)的地址物理不連續(xù),即使轉(zhuǎn)換也不能給DMA使用。
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI