一. 查看datasheet确认物理信息
1. 查看原理图确认物理基地址
下图是dm9000a的引脚图,从图可知dm9000a是CSN1
CSN1连在了cpu的XMOCSN1上即BANK1
从可知BANK1的基地址是0x1800_0000
2. 确认地址线与数据线的地址
dm9000的cmd引脚是控制数据还是地址的,它连在了6410的addr2上
同时在中有:
当cmd是高,访问的是数据
当cmd是低,访问的是地址
访问不同的地址,ADDR2的值是不同的,即:
0x1800 0000 ADDR2=0 地址线
0x1800 0004 ADDR2=1 数据线
3. 确认dm9000a的位数
中16bit的连线图如下图所示.
16bit的连线图与ok6410中dm9000a的连线图是一样的,
所以ok6410中dm9000a的位数是16bit
4. 中断号的确认
a. 从中可以看出dm9000的中断引脚是IRQ_LAN,
IRQ_LAN与CPU的连线如下图所示
IRQ_LAN连到了XEINT7上面,所以
dm9000的中断号是EINT_7.
b. 下面看一下它是上升沿触发还是下降沿触发
EECS, EECK EED_IO这三个引脚都悬空,即都是低电平
在的datasheet中有如下描述
EECK --> 控制中断是高触发还是低触发; high-->低有效;
low-->中断高有效
this pin is also used as the strap pin of the polarity of the INT pin
EECS --> 控制总线是8bit还是16bit; high-->8bit;
low-->16bit
this pin is also used as the strap pin of the polarity of the internal memory data bus width
二. 移植过程
1. 在arch/arm/mach-s3c64xx/mach-smdk6410.c中添加dm9000的设备信息
-
static struct resource smdk6410_dm9000_resource[] = {
-
[0] = {
-
.start = SMDK6410_PA_DM9000,
-
.end = SMDK6410_PA_DM9000 + 3,
-
.flags = IORESOURCE_MEM,
-
},
-
[1] = {
-
.start = SMDK6410_PA_DM9000 + 4,
-
.end = SMDK6410_PA_DM9000 + 4 + 500,
-
.flags = IORESOURCE_MEM,
-
},
-
[2] = {
-
.start = IRQ_EINT(7),
-
.end = IRQ_EINT(7), //中断号是7
-
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_HIGH, //上升沿触发
-
},
-
};
-
-
static struct dm9000_plat_data smdk6410_dm9000_pdata = {
-
.flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM), //16bit,没有eeprom
-
};
-
-
static struct platform_device smdk6410_device_eth = {
-
.name = "dm9000",
-
.id = -1, //-1说明只有dm9000这个名,没有dm9000.12等
-
.num_resources = ARRAY_SIZE(smdk6410_dm9000_resource),
-
.resource = smdk6410_dm9000_resource,
-
.dev = {
-
.platform_data = &smdk6410_dm9000_pdata,
-
},
-
};
在arch/arm/mach-s3c64xx/include/map.h中
-
#define SMDK6410_PA_DM9000 (0x18000000)
阅读(3662) | 评论(0) | 转发(2) |