dm9000 driver 2


micro2440

1.EINT7 中断
2.LnoE 读选通
3.LnwE 写选通
4.LnGCS4  片选
网卡和sdram,norflash都是统一编址到2440的bank区间。dm9000的片选信号接到了2440的LnGCS4,所以dm9000的bank空间应该是bank4,范围是2千万-2千8百万


所以在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的地址信息和数据信息都是通过数据总线获取的。

posted on 2011-12-17 15:56  _song  阅读(263)  评论(0编辑  收藏  举报