在/include/configs/smdk2440.h文件中修改添加对DM9000的支持,屏蔽CS8900:
//#define
CONFIG_DRIVER_CS8900
1
//#define
CS8900_BASE
0x19000300
//#define
CS8900_BUS16 1
#define
CONFIG_DRIVER_DM9000 1
#define
CONFIG_DM9000_BASE 0x20000300
#define
DM9000_IO
CONFIG_DM9000_BASE
#define
DM9000_DATA
(CONFIG_DM9000_BASE+4)
#define
CONFIG_DM9000_USE_16BIT
在这里#define
CONFIG_DM9000_BASE 的定义最为重要。不同的板子只要修改这个参数即可。友善之臂的mini2440的DM9000在BANK4上所以定义为“0x20000000”,即网卡的访问基址为0x19000000,在这里这所以再偏移0x300是由经的特性决定的。
这样定义完之后,重新编译主可以实现对DM9000的支持。ping和tftp都可以实现。但是有些问题:
(1)网卡的MAC地址与你设置的不一样
(2)会有“could not establish
link” 的提示,而且在显示MAC地址后很久后才响应。
这两个问题参考了别人的资料,认为是U-Boot的DM9000源码的BUG。追踪源码可以知道:这些都是发生在int eth_init(bd_t * bd)初始化时的错误。
修正BUG(修改/drivers/dm9000x.c文件)
(1)网卡MAC地址错误的解决方法:
修改后的内容如下:
int
eth_init(bd_t * bd)
{
......
for (i = 0; i < 6; i++)
((u16 *) bd->bi_enetaddr)[i] =
read_srom_word(i);
char *tmp = getenv ("ethaddr");
char *end;
for (i=0; i<6; i++) {
bd->bi_enetaddr[i] = tmp ? simple_strtoul(tmp,
&end, 16) : 0;
if
(tmp)
tmp = (*end)
? end+1 : end;
}
printf("MAC:
%02x:%02x:%02x:%02x:%02x:%02x\n",
bd->bi_enetaddr[0],
bd->bi_enetaddr[1],
bd->bi_enetaddr[2],
bd->bi_enetaddr[3],
bd->bi_enetaddr[4],
bd->bi_enetaddr[5]);
......
红色的字符是所做的修改后内容:功能是屏蔽原有获取MAC地址的语句,替换成从U-Boot的参数区读取数据并存到bd->bi_enetaddr[i]中。
(2)“could not
establish link” 提示和慢响应的解决方法:
int
eth_init(bd_t * bd)
{
......
DM9000_iow(DM9000_RCR, RCR_DIS_LONG | RCR_DIS_CRC |
RCR_RXEN);
DM9000_iow(DM9000_IMR,
IMR_PAR);
#if 0
i = 0;
while
(!(phy_read(1) & 0x20))
{
udelay(1000);
i++;
if (i ==
10000) {
printf("could not establish link\n");
return
0;
}
printf("
link=%d\n",i);
}
lnk =
phy_read(17) >> 12;
printf("operating at ");
switch (lnk)
{
case
1:
printf("10M
half duplex ");
break;
case
2:
printf("10M
full duplex ");
break;
case
4:
printf("100M
half duplex ");
break;
case
8:
printf("100M
full duplex ");
break;
default:
printf("unknown: %d ", lnk);
break;
}
printf("mode\n");
#endif
return
0;
}
红色的字符是要修改的内容:功能是屏蔽无用的语句。其实被屏蔽的语句是MII接口用的,放在这显然是错误的,无端的浪费了10秒钟。通过改完上面就可以实现ping和tftp了,呵感觉真好!下载大文件超快
到这为止,U-BOOT已经可以支持NOR
Flash,DM9000,接下来的目标是要实现支持NAND Flash,支持烧写yaffs文件系统映象。
阅读(847) | 评论(0) | 转发(0) |