uboot移植之網絡驅動移植--移植操作--7.29

1、網卡驅動文件介紹

uboot/drivers/net/dm9000x.c和dm9000x.h。

這個驅動來自於linux kernel源代碼。所以我們uboot中是移植而不是編寫。

2、網卡移植的關鍵:初始化

(1)網卡初始化代碼地方在:
start_armboot
init_sequence
board_init
dm9000_pre_init這個函數就是移植的關鍵

(2)必須要結合開發板原理圖來分析,然後決定這個函數怎麼編程。

BW寄存器

       SROM_BW_REG  &=  ~(0xf << 4);

        SROM_BW_REG   |= (1<<7)|(1<<6)|(1<<5)|(1<<4);

BC寄存器

       SROM_BC1_REG =((0<<28)|(1<<24)|(5<<16)|(1<<12)|(4<<8)|(6<<4)|(0<<0));

MP0_1CON寄存器

       tmp   = MP01CON_REG;

       tmp &= ~(0XF<<4);

       tmp   |=(2<<4);

       MP01CON_REG =tmp ;

(3)#define DM9000_16BIT_DATA這個宏用來表示DM9000工作在16位總線模式下。根據上節課的硬件原理圖的分析,可以看到我們開發板上DM9000確實工作在16位模式下。


(4)從三星版本的代碼中可以看出,它操作的是bit20-bit23,對照數據手冊中寄存器定義,可以看出三星的開發板DM9000是接在Bank5上的。而我們接在bank1上的,因此我們需要操作的bit位是bit4-bit7

(5)總結:三個寄存器的修改。主要是三星的開發板DM9000接在bank5,我們接在了bank1上,因此要做一些修改。


3、基地址的配置等

(1)驅動分爲2部分:代碼和數據。代碼不用動,數據要修改。


(2)CONFIG_DM9000_BASE是DM9000網卡通過SROM bank映射到SoC中地址空間中的地址。這個地址的值取決於硬件接到了哪個bank,這個bank的基地址是SoC自己定義好的。譬如我們這裏接到了bank1上,bank1的基地址是0x88000000.


(3)DM9000_IO表示訪問芯片IO的基地址,直接就是CONFIG_DM9000_BASE;DM9000_DATA表示我們訪問數據時的基地址,因爲DM9000芯片的CMD引腳接到了ADDR2,因此這裏要+4(0b100,對應ADDR2)


(4)本來這樣配置就完了,重新編譯運行網卡就應該工作了。但是實際測試發現不工作,要怎麼樣修改呢?修改方式是將CONFIG_DM9000_BASE改成0x88000300就工作了。

問題?這個0x300從哪裏來的?我得出的感覺最靠譜的解釋是:跟DM9000網卡芯片型號版本有關,我認爲這個0x300是DM9000網卡本身的問題,他本身的內部寄存器就有一個0x300的一個偏移量。




發佈了40 篇原創文章 · 獲贊 59 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章