micro2440
![](http://hi.csdn.net/attachment/201112/18/0_13241751459mch.gif)
1.EINT7 中断
2.LnoE 读选通
3.LnwE 写选通
4.LnGCS4 片选
网卡和sdram,norflash都是统一编址到2440的bank区间。dm9000的片选信号接到了2440的LnGCS4,所以dm9000的bank空间应该是bank4,范围是2千万-2千8百万
![](http://hi.csdn.net/attachment/201112/18/0_1324183659pgm0.gif)
所以在mach-mini2440.c,根据接线方式指定网卡的基地址应该为2000 0000。但是如下
/* DM9000AEP 10/100 ethernet controller */
#define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300)
//#define S3C2410_CS4 (0x20000000) ,map.h
static struct resource mini2440_dm9k_resource[] = {
[0] = {
.start = MACH_MINI2440_DM9K_BASE,//2000 0300
.end = MACH_MINI2440_DM9K_BASE + 3,//2000 0303
.flags = IORESOURCE_MEM
},
[1] = {
.start = MACH_MINI2440_DM9K_BASE + 4,//2000 0304
.end = MACH_MINI2440_DM9K_BASE + 7,//2000 0307
.flags = IORESOURCE_MEM
},
[2] = {
.start = IRQ_EINT7,
.end = IRQ_EINT7,
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
}
};
指定的是0x2000 0300,这个可能是xx原因。refer to http://www.arm9home.net/read.php?tid=1817&page=1#9372
其实指定0x2000 0000也是对的。因为访问DM9000寄存器的时候,是先向数据总线写地址,再向数据总线写数据。(有点类似于usb芯片d12)。但怎么区分是地址和数据呢?
dm9000有个cmd引脚
Command Type
When high, the access of this command cycle is DATA port。 当cmd pin高电平时,认为访问的是数据。
When low, the access of this command cycle is ADDRESS port。当cmd pin低电平时,认为访问的是地址。
micro2440的laddr2接到了dm9000的cmd。所以
2440访问地址0x2000 0300-0x2000 0303时,地址线最后3位000b-011b,即laddr2输出0.此时dm9000认为从数据总线上取得的是地址。
2440访问地址0x2000 0304-0x2000 0307时,地址线最后3位100b-111b,即laddr2输出1.此时dm9000认为从数据总线上取得的是数据。
这也解释了为什么dm9000仅占用了bank4的0-3和4-7这么一点点区间。因为dm9000仅有"两个地址",一个用来存放地址,一个用来存放数据。
所以基地址0x2000 0000和0x2000 0300对dm9000来说是一样的。2440只有一个地址线laddr2接到了dm9000的cmd,只要保证laddr2是正确的就行。
从proc可以检查一下:
[root@FriendlyARM /]# cat /proc/iomem
20000300-20000303 : dm9000
20000300-20000303 : dm9000
20000304-20000307 : dm9000
20000304-20000307 : dm9000
[root@FriendlyARM /]# cat /proc/interrupts
CPU0
30: 340140 s3c S3C2410 Timer Tick
32: 0 s3c s3c2410-lcd
37: 0 s3c s3c-mci
42: 86 s3c ohci_hcd:usb1
51: 39 s3c-ext eth0 //for dm9000
60: 0 s3c-ext s3c-mci
70: 44 s3c-uart0 s3c2440-uart
71: 147 s3c-uart0 s3c2440-uart
79: 0 s3c-adc s3c2410_action
80: 0 s3c-adc adc, s3c2410_action
83: 0 - s3c2410-wdt
5.LDATA0-LDATA15 数据总线
16位
6.SA*:不是地址线。dm9000的地址信息和数据信息都是通过数据总线获取的。