一. 查看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的设备信息
在arch/arm/mach-s3c64xx/include/map.h中
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,
- },
- };
- #define SMDK6410_PA_DM9000 (0x18000000)