经过分析,u-boot默认情况下是不初始化网口的,只有在执行ping或者tftp等命令时,才会触发初始化网口,这里是DM9000;
eth_init-->dm9000_reset--> DM9000_iow(DM9000_GPR, 0);
会将DM9000 internal PHY 上电,这个时候会发现网口灯link-up。执行完ping或者tftp等命令之后,NetLoop又会调用
eth_halt--> DM9000_iow(DM9000_GPR, 0x01); /* Power-Down PHY */
这个时候PHY 又会link down。
如果单板在执行ping的时候还是不能link-up(我的板子就出现了这种情况),打印“could not establish link”,我估计是DM9000自适应建立link时间太久了,等了10S还没有成功,可以尝试通过如下办法解决:
启动时将板子停在uboot里,执行下面命令,也就是实现DM9000_iow(DM9000_GPR, 0);
,先将DM9000的PHY power up,再执行ping或者tftp
nm.b 0x18000300 回车
1f回车
nm.b 0x18000304 回车
0 回车