本文的方法就是通过在uboot中读取phy寄存器的状态来判断网络,所以当前状况下必须保证MDIO总线没有问题,否则无法读取PHY寄存器
zynq-uboot> mdio
mdio - MDIO utility commands
Usage:
mdio list - List MDIO buses
mdio read <phydev> [<devad>.]<reg> - read PHY's register at <devad>.<reg>
mdio write <phydev> [<devad>.]<reg> <data> - write PHY's register at <devad>.<reg>
<phydev> may be:
<busname> <addr>
<addr>
<eth name>
<addr> <devad>, and <reg> may be ranges, e.g. 1-5.4-0x1f.
以上是uboot中的mdio的帮助说明。
zynq-uboot> mdio list
Gem.e000b000:
3 - Generic PHY <--> Gem.e000b000
根据mdio可以看到当前uboot中只有一个phy_dev为3的phy芯片
下一步便是读取寄存器
zynq-uboot> mdio read 3 0
3 is not a known ethernet
Reading from bus Gem.e000b000
PHY at address 3:
0 - 0x1140
zynq-uboot> mdio read 3 0-15
3 is not a known ethernet
Reading from bus Gem.e000b000
PHY at address 3:
0 - 0x1140
1 - 0x796d
2 - 0x22
3 - 0x1622
4 - 0x1e1
5 - 0xcde1
6 - 0xd
7 - 0x2001
8 - 0x4ae2
9 - 0x300
10 - 0x7800
11 - 0x0
12 - 0x0
13 - 0x0
14 - 0x0
15 - 0x3000
可以读取一个寄存器,也可以读取一个范围内的寄存器,我们关注的一般为0寄存器(基本控制寄存器Basic Control)和1寄存器(Basic status),来确定我们是否已经link up和当前的链接速率。这两个寄存器为标准IEEE 802.3 Specification中明确规定的