在linux下使用am335x的DMA

2021-09-12 09:30:47 字數 967 閱讀 3695

這幾天在弄am3358的dma,簡化應用環境如下:

am3358的fsmc接了一片fpga;

fpga上接adc;

am3358通過fpga以dma方式讀取adc資料。

事先在網上查詢過相關資料,發現關於這方面工作的文章極少,即使ti官網上也沒什麼可靠資料,心裡還是有些忐忑的,結果在實現過程中發現意外的簡單,所以把過程寫下來,希望有相似需求的同行可以少走彎路。

注意:閱讀本文要求具備一定的linux裝置驅動開發經驗,如果您從沒有做過linux驅動開發,那麼閱讀本文時可能會有一定的困難。

文章基於ti提供的linux sdk 3.0。

1. 引腳配置

2. 外部dma請求形式

在ti的處理器手冊上沒有找到外部dma引腳請求形式,不過一般來說不外乎上公升沿或下降沿兩種,所以我偷了個懶,使用乙個1us寬度的正脈衝來提交dma請求。

3. crossbar配置

crossbar的配置可以參照linux核心文件documentation/devicetree/bindings/dma/ti-dma-crossbar.txt。我使用了dma channel 58和transfer controller 1,所以我的devicetree檔案有如下內容:

dmas=<&edma_xbar 58 1 28>;

ti的edma engine會根據上面這行內容為你配置好crossbar,幾乎不需要在你自己的驅動裡做任何工作。

4. linux下的dma驅動程式框架

linux dma驅動程式框架文件位於linux核心目錄樹下documentation/dmaengine,主要看client.txt就可以了。在這篇文件裡說明了該如何使用dma engine的api。原則上來說,只要根據這篇文件所述內容程式設計,就可以搞定了。另外我還參考了drivers/crypto/omap-aes.c,這個驅動也使用了dma。不過針對具體的ti dma控制器,這裡還是有一些補充說明:

5. 嗯,就只有這麼多了。

AM335x移植linux核心 轉

am335x移植linux核心 該部落格中詳細介紹了移植linux核心到am335x上相關,裝置驅動採用裝置樹 dt 方式載入,包含裝置啟動 uboot kernel driver rootfs及簡單上層應用。一些文件羅列如下 1.為am335x移植linux核心主線 4 booting witho...

Am335x 啟動過程

啟動順序 針對ti oma3 evm linux一般的啟動順序是 上電的時候,omap裝置最開始的boot是從cpu內部的boot rom起來,這部分的 是出廠的時候固化的,不能被改變的。boot rom通過讀取外部boot pin的配置來尋找第乙個外部bootloader。可以尋找的裝置有nand...

SIM7100在AM335X上移植

有了前面的理論作為基礎,這次移植sim7100到am335x上非常順利,sim7100只是乙個例子,其實只要是高通方案的4g模組,估計移植過程都差不多,sim7100是高通的方案,現在階段 在linux上,有2種途徑,gobinet 和qmi wwan,我的am335x linux核心是3.2版本的...