我正在尝试使用'TFTP'服务器和'U-boot'菜单将'rfsNV.gz'和'uImageNV'下载到ARM板。我正在使用由deramCatcher开发的板,Windows 7上的tftp服务器和'tftp32.exe',Hyperterminal,交叉etherenet线缆和USB串行线缆。我使用Hyperterminal连接到电路板,最后到U-boot菜单。我将服务器IP设置为192.168.0.123,将目标板IP设置为192.168.0.1。然后我启动'tftp32.exe'来设置TFTP服务器和Hyperterminal写
tftp 20410000 rfsNV.gz
但是Hyperterminal以
回应 PHY not connected!!
MAC: error during MII initialization
TFTP from server 192.168.0.123; our IP address is 192.168.0.1
Filename 'rfsNV.gz'.
Load address: 0x20410000
Loading: T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T
Retry count exceeded; starting again
这是否意味着我没有正确设置以太网连接?我的本地区域连接表示没有像figure那样的网络访问权限。 但在板上以太网连接LED指示电缆已连接。我是嵌入式Linux的新手,无法弄清楚为什么我无法下载电路板上的文件。谁能弄明白什么是错的?
当U-boot启动控制台显示时
Low Level Init performed
boot 1.0 (Nov 25 2003 - 23:08:05)
Uncompressing image...
U-Boot 2008.10.ARM9(NV) (Aug 6 2009 - 23:52:44)
DRAM: 32 MB
Atmel: AT49BV163D (16Mbit)
Flash: 2 MB
DataFlash:AT45DB161
Nb pages: 4096
Page Size: 528
Size= 2162688 bytes
Logical address: 0xC0000000
Area 0: C0000000 to C0007FFF (RO) ARM9 Bootstrap
Area 1: C0008000 to C001FFFF
Area 2: C0020000 to C0027FFF (RO)
Area 3: C0028000 to C020FFFF
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
U-Boot>
'mii info'的输出是:
U-Boot> mii info
PHY 0x00: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x01: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x02: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x03: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x04: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x05: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x06: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x07: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x08: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x09: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x0A: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x0B: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x0C: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x0D: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x0E: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x0F: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x10: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x11: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x12: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x13: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x14: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x15: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x16: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x17: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x18: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x19: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x1A: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x1B: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x1C: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x1D: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x1E: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
PHY 0x1F: OUI = 0x0000, Model = 0x00, Rev = 0x00, 10baseT, HDX
U-Boot>
答案 0 :(得分:4)
来自U-Boot的唯一重要消息似乎是
PHY not connected!!
以太网(EMAC)外围设备恰好集成在您的Atmel ARM9 SoC中
因此,知道SoC是Atmel AT91RM9200,U-Boot中的以太网驱动程序必须是cpu/arm920t/at91rm9200/ether.c
,这是生成该警告消息的代码:
if (!PhyOps.IsPhyConnected (p_mac))
printf ("PHY not connected!!\n\r");
以太网PHY外设通常位于SoC外部,通过MII或RMII总线连接到EMAC。
Atmel AT91RM9200参考设计和评估板使用Davicom DM9161 PHY
U-Boot中的一个Davicom PHY驱动程序是cpu/arm920t/at91rm9200/dm9161.c
,包含
unsigned int dm9161_IsPhyConnected (AT91PS_EMAC p_mac)
{
unsigned short Id1, Id2;
at91rm9200_EmacEnableMDIO (p_mac);
at91rm9200_EmacReadPhy (p_mac, DM9161_PHYID1, &Id1);
at91rm9200_EmacReadPhy (p_mac, DM9161_PHYID2, &Id2);
at91rm9200_EmacDisableMDIO (p_mac);
if ((Id1 == (DM9161_PHYID1_OUI >> 6)) &&
((Id2 >> 10) == (DM9161_PHYID1_OUI & DM9161_LSB_MASK)))
return TRUE;
return FALSE;
}
这段代码并不复杂。无论插入RJ45端口或以太网链路条件或MAC地址的值如何,此例程都应成功。因此,此代码序列(产生PHY警告消息)的失败似乎表明:
a)硬件出现故障或已损坏。 (你有没有观察到适当的防静电预防措施?)但是
但是在板上以太网连接LED表示电缆已连接。
似乎表明PHY并未完全死亡。
b)或固件与硬件不匹配。您应该验证电路板编号,版本号和序列号。获取电路板原理图和/或BOM(物料清单),然后确认PHY的部件号匹配(即您的电路板设计可能不使用DM9161,而是使用其他PHY芯片)。您应该获得适用于您的主板的U-Boot源代码。验证是否为电路板上实际安装的PHY配置了U-Boot。验证您正在执行的U-Boot二进制文件是否与手头的源代码版本相同。
如果您真的喜欢冒险,那么您可以“玩电脑”并使用U-Boot的内存写入和读取或mii命令手动执行上述IsPhyConnected()
例程的操作。如果您是一名专业工程师,试图提出您的新电路板设计,那么这将是下一个可能的步骤。
U-Boot > mii
Usage:
mii - MII utility commands
U-Boot > help mii
mii device - list available devices
mii device <devname> - set current device
mii info <addr> - display MII PHY info
mii read <addr> <reg> - read MII PHY <addr> register <reg>
mii write <addr> <reg> <data> - write MII PHY <addr> register <reg>
mii dump <addr> <reg> - pretty-print <addr> <reg> (0-5 only)
Addr and/or reg may be ranges, e.g. 0-31.
U-Boot >
<强>更新强>
鉴于mii info
的输出,您的电路板似乎已损坏或损坏,即EMAC未与PHY通信或未连接到PHY。您可以尝试在明亮的灯光下用放大镜检查电路板是否损坏。我试着换另一个板。
更新II
事实证明,你的主板上mii info
的输出有点虚假,因为U-Boot中有一个错误。 mii info
命令将使用以下代码在32个可能的地址中的每一个上扫描MII上的每个可能的PHY:
int at91rm9200_miiphy_read(char *devname, unsigned char addr,
unsigned char reg, unsigned short * value)
{
at91rm9200_EmacEnableMDIO (p_mac);
at91rm9200_EmacReadPhy (p_mac, reg, value);
at91rm9200_EmacDisableMDIO (p_mac);
return 0;
}
但请注意,此例程中从不使用addr
参数(包含PHY地址)。结果是AT91RM9200板的该例程始终读取地址0处的PHY,mii info
命令不报告所有地址的准确扫描。
收集的一个项目是PHY返回零,这澄清了dm9161_IsPhyConnected()
未能通过比较测试的原因。零应该减轻任何关注和替代的关注。已安装无法识别的PHY。
从我的电路板(地址1处有一个PHY)(在U-Boot中没有上述错误):
U-Boot> mii info
PHY 0x01: OUI = 0x80017, Model = 0x09, Rev = 0x00, 100baseT, FDX
U-Boot> mii dev
MII devices: 'at91phy'
Current device: 'at91phy'
U-Boot>
答案 1 :(得分:0)
听起来以太网接口尚未初始化。 您的U-Boot版本中是否有命令启用以太网接口? 是否已配置U-Boot环境变量hwaddr(要查看“printenv hwaddr”) - 此环境变量是电路板以太网接口的MAC地址。 电路板是否有任何指示链路状态的LED(这些LED通常位于插入以太网的插座旁边)。