一. 查看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
![](https://i-blog.csdnimg.cn/blog_migrate/224e9d04fa2142e3d5e3268dd7fc088c.png)
CSN1连在了cpu的XMOCSN1上即BANK1
![](https://i-blog.csdnimg.cn/blog_migrate/b2c52e1beb6d24d73f8d46536e65e9e6.png)
从可知BANK1的基地址是0x1800_0000
![](https://i-blog.csdnimg.cn/blog_migrate/01f6b0063eccf422094bc47b272ffe01.png)
2. 确认地址线与数据线的地址
dm9000的cmd引脚是控制数据还是地址的,它连在了6410的addr2上
同时在中有:
![](https://i-blog.csdnimg.cn/blog_migrate/f71da3075d1e28246f7e077ce964b216.png)
当cmd是高,访问的是数据
当cmd是低,访问的是地址
访问不同的地址,ADDR2的值是不同的,即:
0x1800 0000 ADDR2=0 地址线
0x1800 0004 ADDR2=1 数据线
3. 确认dm9000a的位数
中16bit的连线图如下图所示.
![](https://i-blog.csdnimg.cn/blog_migrate/6cbc83f54fb7390bc510890b22998abb.png)
16bit的连线图与ok6410中dm9000a的连线图是一样的,
所以ok6410中dm9000a的位数是16bit
4. 中断号的确认
a. 从中可以看出dm9000的中断引脚是IRQ_LAN,
IRQ_LAN与CPU的连线如下图所示
![](https://i-blog.csdnimg.cn/blog_migrate/33bcdb89965356763468fceadc6be96c.png)
IRQ_LAN连到了XEINT7上面,所以 dm9000的中断号是EINT_7.
b. 下面看一下它是上升沿触发还是下降沿触发
![](https://i-blog.csdnimg.cn/blog_migrate/5a988d9280ffb5fec6e6775ed460dbc8.png)
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)