1. 程式人生 > >關於6410板文件的dm9000的平臺設備地址

關於6410板文件的dm9000的平臺設備地址

truct 寫入 ase command txt sources tails lag 內存

轉自csdn

#define CONFIG_DM9000_BASE 0x20000300
#define DM9000_IO 0x20000000
#define DM9000_DATA 0x20000004
這幾個數值代表的地址是從哪裏得到的,我翻了MINI2440的原理圖和S3C2440的芯片手冊沒看懂從哪裏找網卡的地址,請老師指導一下

tiny6410/mini6410開發板上DM9000與S3C6410的連接關系入手。下面是兩者之間的連接示意圖:
技術分享
DM9000的訪問地址主要是由CMD和CS#這兩個端口的連接方式來確定的,CS#是DM9000的片選引腳,CMD引腳在芯片手冊中描述如下:
CMD pin :
Command Type
When high, the access of this command cycle is DATA port
When low, the access of this command cycle is INDEX port

DM9000的CS#接的是S3C6410靜態內存區(物理地址為0x10000000~0x3fffffff)的Bank1片選nCS1引腳(對應起始物理地址為0x18000000),CMD引腳則接的是S3C6410地址總線的Xm0ADDR2位。因此可以確定,DM9000的INDEX端口地址是0x18000000(Xm0ADDR2=0),DATA端口的地址是0x18000004(Xm0ADDR2=1)。

註意: 由上面的分析可以知道,DM9000的尋址僅僅取決於其CMD和CS#兩個引腳的接法。也就是說,即使讀者要將訪問地址改為“0x18000000 + 0x300”(事實上在友善之臂提供的uboot以及其他一些資料中就是用的這個地址),同樣能夠正常的訪問到網卡的INDEX端口。

提示: 確定了DM9000的INDEX和DATA端口地址,我們就有了訪問網卡的途徑。讀網卡寄存器的方法是:先向INDEX端口寫入寄存器的地址,再從DATA端口讀出該寄存器的值。寫寄存器的方法與之對應:先向INDEX端口寫入寄存器的地址,再向DATA端口寫入值。通過I/O端口讀寫網卡寄存器的方法在驅動中由ior()、iow()這來兩個函數實現。

國嵌範老師 2011-07-02 11:54
摘自《國嵌嵌入式標準教材--驅動開發深入班》 DM9000網卡驅動分析



首先,讓我們打開arch/arm/mach-s3c64xx目錄下的mach-mini6410.c,找出DM9000平臺驅動對應的平臺設備及資源。下面列出了平臺設備資源的情況:
#define S3C64XX_PA_DM9000 (0x18000000)
#define S3C64XX_SZ_DM9000 SZ_1M
#define S3C64XX_VA_DM9000 S3C_ADDR(0x03b00300)

static struct resource dm9000_resources[] = {
[0] = {
.start = S3C64XX_PA_DM9000,
.end = S3C64XX_PA_DM9000 + 3,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = S3C64XX_PA_DM9000 + 4,
.end = S3C64XX_PA_DM9000 + S3C64XX_SZ_DM9000 - 1,
.flags = IORESOURCE_MEM,
},
[2] = {
.start = IRQ_EINT(7),
.end = IRQ_EINT(7),
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_HIGH,
},
};

這裏定義了三個平臺資源,下標為0和1的資源(後面簡稱為資源0、資源1…)是IO內存資源,其中資源0的start成員代表的地址S3C64XX_PA_DM9000,也就是0x18000000,是訪問DM9000的INDEX端口的地址,而資源1的start成員代表的地址S3C64XX_PA_DM9000+4,也就是0x18000004,則是訪問DM9000的DATA端口的地址。DM9000的INDEX端口和DATA端口分別用來寫命令和讀寫數據,要理解為什麽能通過這兩個地址訪問對應的端口,需從

http://blog.csdn.net/gooogleman/article/details/7533348

關於6410板文件的dm9000的平臺設備地址