DM8168裸機除錯 GPMC FPGA

2021-06-22 04:00:18 字數 3902 閱讀 5674

gpmc產生背景(個人理解):當除錯nor flash、nand flash、fpga、網絡卡等外部擴充套件裝置時,需要cpu給這些裝置 分配位址空間、提供訪問時序、訪問介面等控制。cotex-a8將這些外擴裝置的控制整合在gpmc模組內。對於使用者只需要配置gpmc模組,既可以訪問該裝置。

gpmc工作機制:若訪問實體地址落在gpmc的0x00 - 0x1fff ffff的512mb位址範圍內,則將實體地址資訊address 進行解碼。

這裡的解碼主要是對實體地址address  同掩碼位址做邏輯與&操作,若運算結果,同基位址一致,則使能cs片選訊號,同時可以訪問該區間;反之無cs片選且無法訪問該區間。

配置gpmc模組核心(以fpga為例說明):

1、配置裝置型別                           gpmc_config1

2、配置訪問時序,主要讀寫時序  gpmc_config2-6

3、配置基位址、容量(即掩碼位址)、使能cs訊號 gpmc_config7

注:fpga屬於nor flash型別,對於nand flash配置稍微複雜些(目前未除錯,後期會除錯,進一步完善)。

dm8168同fpga(x3sc250)硬體連線圖:

總框圖fpga實現功能:擴充套件6路串列埠。

接線定義:

fpga                                     cortex-a8

時鐘訊號:由24m晶振提供

資料匯流排:a[0-7]、a[8]                            gpmc_a[0-7]、gpmc_a[27]

控制訊號:wrn                                       gpmc_wen

rdn                                        gpmc_oe_ren

csn                                        gpmc_cs[ 3 ]n

ale                                        gpmc_adv_ale                    fpga的該引腳保留  未使用

irq0                                       gp1[9]                                     中斷引腳(有中斷觸發,該引腳置高)

irq1                                       gp113]                                    fpga的該引腳保留  未使用             

irq2                                       gp1[25]                                   fpga的該引腳保留  未使用

uart輸出:euart0 - 5

電源:3.3v  2.5v  1.2v

注:1、時鐘源:gpmc模組使用mainpll_clock4產生500mhz經過4分頻後sysclk6,即125mhz 輸出 .所以gpmc_fclk=125 mhz(t=8 ns)

2、電源域:由prcm模組alway_on域供電,始終接通供電。

第一是gpmc的片選定址機制,第二是gpmc的訪問外擴裝置。

void gpmc_init( void )

#include "fpga.h"

#include "evm816x.h"

#define deubg 0

#define uartn uart0

#define baud_9600 1

#define baud_115200 0

#define baud_250000 0

#define int_en 0

uint8 fpga_read( uint32 adress)

void fpga_wrtie( uint32 adress,uint8 data)

void fpag_init(void)

/* fpga_test() 功能:fpga的uart模組的自發自收的程式*/

void fpga_test(void)

printf("\n uartn+lsr = %02x, \n",fpga_read(uartn+lsr ));//讀取退出while時,uart當前狀態

printf("\n uartn+rbr = %02x, \n",fpga_read(uartn+rbr));//讀取接收緩衝區內容

evm816x_waitmsec(5);

}}

基位址可以任意設定嗎?同掩碼位址關係

1、將cs3基位址設定0x00,掩碼容量16 mb。片選位址範圍:0x00000000 -  0x00ff ffff

結果:無法訪問該片選範圍。why?? 因為gpmc中cs0-3基位址最小為16mb,即是16mb的倍數。

驗證:將cs3基位址設定0x0200 0000,掩碼容量16 mb。可以訪問0x0200 0000 -  0x02ff ffff的16mb區間。

所以基位址不是任意設定。

具體設定方法:

gpmc_config7 [5:0]對應a29-24,如果baseaddress設定0x200 0000,則gpmc_config7 [5:0]= 000010。

疑問:0x00000000 -  0x00ff ffff的16mb區間,如何訪問??

2、 訪問的實體地址 & 掩碼位址(即容量)  = 基位址 ,如何實現?

通過gpmc訪問機制:若實體地址落在gpmc的0x00 - 0x1fff ffff的512mb位址範圍內,則將實體地址資訊address 進行解碼。

這裡的解碼主要是對實體地址address  同掩碼位址做邏輯與&操作,若運算結果,同基位址一致,則使能cs片選訊號,同時可以訪問該區間; 反之無cs片選且無法訪問該區間。

對應config7_i配置值  

基位址 baseaddress =0x02  maskaddress = 0xff,可以訪問區間16mb的0x0200 0000 -  0x02ff ffff

若讀取0x0200 007e位址中內容(即data = *(volatile uint8 *) adress);首先0x0200 007e屬於gpmc位址區間,然後將

0x0200 007e &0x0f00 0000(掩碼位址) =0x0200 00000,該結果同設定基位址相等,則使能cs片選訊號且可以訪問0x0200 007e位址。

以cs3基位址設定0x0200 0000,掩碼容量16 mb例項說明

第一步:輸出片選區域的前10個和 後10個位址中資料(即0x0200 0000 -0x0200 0009 和 0x02ff fff6 -0x0x02ff ffff),

第二步:輸出片選區域 末位址+1(即0x0x02ff ffff + 1 =0x0300 0000)

結果:可以讀取0x0200 0000 -0x0200 0009 和 0x02ff fff6 -0x0x02ff ffff中資料,而讀取0x0300 0000中資料,出現程式跑飛或位址指標指向無效記憶體區。由此可以驗證片選容量。

結論:如果不是使用cs0-2區域,沒有必要設定(雖然cs0-2片選區域預設256mb,但是gpmc_config_7[6]預設禁止cs片選使能。不使能cs訊號,片選區域無法訪問 )。

dm8168千兆網口掛載nfs失敗的解決方法

二 問題背景 筆者用百兆網線連線板子的時候,可以進入檔案系統,這也隱含說明,筆者的網路檔案系統是 沒有問題的 但是用千兆網線連線板子的時候,核心啟動的時候會卡在掛載網路檔案系統的那一步。見 一 核心列印 中列印的資訊。筆者使用的網絡卡不是ti官方原理圖上的那個網絡卡,是我們後換了個網絡卡 rtl82...

DM8168評估板上的復位及時鐘電路的設計

復位電路 dm8168的復位管腳有 reset pin g33 por pin f37 trst pin k36 rstout pin g37 trst 經過乙個4.7k下拉電阻接地,受外部 器控制。reset emu rstn exp warm reset。emu rstn 經過4.7k上來電阻接...

DM8168 NFS無法掛載

在嵌入式的開發中nfs極大的方便了開發過程,它通過網路共享檔案,避免了來回燒寫開發板。pc host上的nfs服務搭建請參考其他文章。問題 在dvs8168上面使用nfs掛載電腦上的開發目錄時,發現使用mount t nfs o proto tcp o nolock時發現無法掛載。終端提示錯誤 nf...