AM335x中GPMC與FPGA通訊

2021-06-18 12:03:54 字數 1253 閱讀 2073

最近這一兩個月研究am3730的gpmc與fpga的通訊,我負責的主要是涉及到gpmc這一塊,由於之前就沒有linux基礎,剛開始的時候進展很慢,還時不時的面臨來自外界的壓力,所以那會很痛苦。前乙個月用來熟悉linux和摸清乙個方向,摸清gpmc在核心的目錄之後,開始真正的gpmc之旅。

,所以關於硬體gpmc(ti所特有的匯流排)的中文資料很少,我覺得很有必要把自己做的東西分享一下,本人剛接觸linux驅動,水平有限不對的地方望指教。

整個gpmc做完之後會發現其實它很簡單,只是在剛開始做的時候會對它的控制機制不太清楚,花費不少時間去讀技術手冊和到ti的官網查。gpmc相比於我以前所做過的微控制器,主要有兩點大的區別。第一是gpmc的片選定址機制,第二是gpmc的資料輸出時的寫法。

首先來講講gpmc的片尋,gpmc總共有八個片尋cs0-cs7,其中cs0-1是用來做flash的,和fpga通訊可以從cs2-cs7裡面選。在gpmc的暫存器裡,一般用到的也就是config1-config7這七個配置暫存器,關於片尋的在config7裡。config7的意義在於,當處理器檢測到你往乙個位址裡寫資料,如果這個位址在gpmc的位址範圍內的話(對am3730是0x00000000-0x40000000),它就將位址送到gpmc的位址解碼器,在位址解碼器裡,它將這個位址與各個config7裡的掩碼位相與,如果相與後得到的新位址與config7的base address相同,則相應的片尋位置位,就是變成低電平。

理解了片尋的置位過程後,再來講講gpmc資料輸出。以前做微控制器的時候,微控制器總會為你提供乙個data暫存器或者輸出埠的位址,往這兩個的位址裡寫好資料它會自動按規則將資料送到埠輸出,依照這樣的思路我在3730的技術手冊裡不斷的找gpmc資料暫存器或者是輸出埠的位址位址,找了好久沒找到,後來我分析網口和flash的**時發現,他們對硬體位址的寫入操作只涉及到config1-7這七個暫存器,並沒有特定的位址暫存器或者埠位址,然後直接往config7申請好的位址裡寫資料就行了,以此我就猜測gpmc的位址資料輸出都是由硬體自動完成的,根本不需要有特定的資料暫存器,或者可以理解為申請好的與片尋對應的位址空間都是資料暫存器,往這些位址裡寫資料就能直接在輸出的資料埠檢測到,同時位址線的輸出也是由3730的硬體自動完成的,只要是在片尋位址空間內的位址,他都會往gpmc的位址線上輸出。後來用示波器來檢測確實證實了我這一猜想,對我來說這有點像是顛覆了我對資料口控制的認識,只能說硬體的設計越來越智慧型化,很多協議和時序上的東西越來越多由硬體自己就完成,而減少了開發人員在硬體上所耗費的時間。

理解了這兩點,其實gpmc就做的差不多了,接下來的就只是在時序上與下位機的匹配問題,調一調時序就基本上能通訊了。

Am335x 啟動過程

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

AM335X中的DTS簡單介紹

linux核心在2011年後開始轉換到dts配置的方式。詳細的device tree source 裝置樹 相關的文件請參考documentation devicetree bindings相關文件。其中提到dts可以很多人會比較陌生。其實不用陌生,很多人知道.config檔案吧。其實dts檔案有點...

Am335X編譯除錯環境搭建

am335x編譯除錯環境搭建 可以參考 1,配置伺服器端的編譯環境,參見sitara linuxsdk sdg 05.04.01.00.pdf p239 sitara linux sdk gcc toolchain 這裡由於是同事已經搭好環境,所以沒法確認細節問題 2,寫一段測試c include ...