0

我正在尝试使用“TFTP”服务器和“U-boot”菜单将“rfsNV.gz”和“uImageNV”下载到 ARM 板上。我正在使用由deramCatcher开发的板,Windows 7 上带有“tftp32.exe”的 tftp 服务器、超级终端、跨以太网电缆和 USB 串行电缆。我使用超级终端连接到开发板并最终进入 U-boot 菜单。我将服务器 ip 设置为 192.168.0.123,目标板 ip 设置为 192.168.0.1。然后我启动“tftp32.exe”来设置 TFTP 服务器并在超级终端上写入

tftp 20410000 rfsNV.gz

但超级终端回应

    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

这是否意味着我没有正确设置以太网连接?我的本地连接显示 No network access like this 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>
4

2 回答 2

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 源代码。验证 U-Boot 是否针对实际安装在您的板上的 PHY 进行了配置。验证您正在执行的 U-Boot 二进制文件是否与手头的源代码版本相同。

IsPhyConnected()如果你真的很爱冒险,那么你可以“玩电脑”,使用 U-Boot 的内存读写或 mii 命令手动执行上述例程的操作。如果您是一名专业工程师,试图提出您的新电路板设计,那么这将是下一个可能的步骤。

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。您可以尝试在强光下用放大镜检查电路板是否损坏。我会尝试将板换成另一个。

更新二

事实证明,mii info你的电路板的输出有点假,因为 U-Boot 中有一个错误。该mii info命令将使用以下代码扫描 MII 上 32 个可能地址中每个可能的 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> 
于 2013-03-13T23:17:29.063 回答
0

听起来以太网接口尚未初始化。您的 U-Boot 版本中是否有任何命令可以启用以太网接口?是否配置了 U-Boot 环境变量 hwaddr(“printenv hwaddr”查看) - 这个环境变量是板子以太网接口的 MAC 地址。电路板是否有任何 LED 指示链路状态(这些通常位于插入以太网的插座旁边)。

于 2013-03-11T12:23:40.870 回答