前言
海思3559的开发板网口是默认支持千兆/百兆的,这里的自适应,是从RJ45出来后和PC侧的自适应,而实际上3559对于网口的设置,默认都是RGMII模式,除了对应的软件配置,硬件部分需要通过上拉电阻的方法和phy芯片的的支持决定3559最终要选择那个模式,比如PHY芯片只支持到百兆,硬件部分就需要配置成RMII模式,对应的软件配置也需要对应的改为RMII,官方文档不知道是没有写还是太杂了没找到,这里补充完整的移植方法。此外,不同的SDK版本需要改不同的参数,这里给出Hi3559AV100_SDK_V2.0.3.1的改法用于参考
Uboot:
配置表格:
/Hi3559AV100_SDK_V2.0.3.1/osdrv/tools/pc/uboot_tools/Hi3559AV100-DMEB_8L_T-DDR4_2664M_4GB_16bitx4-A73_1608M.xlsm其中的IOCFG_REG87要从0x91改为0x94,具体含义参考pinout表格
头文件
/Hi3559AV100_SDK_V2.0.3.1/osdrv/opensource/uboot/u-boot-2016.11/include/configs/hi3559av100.h要把phy0(看具体使用情况)工作模式同样改为rmii
83 /*Network configuration* 84 #define CONFIG PHY GIGE 85 #ifdef CONFIG NET HIGMACV300 2 8786#define CONFIG GMAC NUMS#define CONFIG HIGMAC PHYO ADDR1 88 #define CONFIG HIGMAC PHY0 INTERFACE MODE 1 /* rgmii 2, rmii 1, mii 0 */ 3 89 #define CONFIG HIGMAC PHY1 ADDR. 90 #define CONFIG HIGMAC PHY1 INTERFACE MODE 2 /* rqmii 2, rmii 1, mii 0 */ 91 #define CONFIG HIGMAC DESC 4 WORD 92 #define CONFIG SYS FAULT ECHO LINK DOWN 1 93 #endif 94 Hx--1024
kernel
设备树:
Hi3559AV100_SDK_V2.0.3.1/osdrv/opensource/kernel/linux-4.9.y_multi-core/arch/arm64/boot/dts/hisilicon路径下
.hi3559av100-demb-flash.dtb.dts.tmp修改
&higmac { phy-handle =<ðphy>; phy-mode ="rmii";}; &higmac1{ phy-handle =<ðphy1>; phy-mode ="rmii"; :{ Hx--1024
hi3559av100-demb.dts修改
&higmac { phy-handle =<ðphy>; phy-mode ="rmii"; }; &higmac1{ phy-handle =<ðphy1>; phy-mode ="rmii"; }; Hx--1024
补充说明
phy的具体配置可以参考厂家提供的技术手册
软件到手后,最基本的可以在uboot阶段通过mii指令,读到phy寄存器正确的状态
mii
mii - MII utility commands Usage: mii device - list available devices mii device - set current device mii info - display MII PHY info mii read - read MII PHY register mii write - write MII PHY register mii dump - pretty-print (0-5 only)
mii device示例,会输出MDC/MDIO总线设备
uboot>mii device MII devices: 'FSL_MDIO0' 'FM_TGEC_MDIO' Current device: 'FSL_MDIO0'
mii info打印输出,PHY后面跟的就是addr
uboot> mii info PHY 0x00: OUI = 0x5043, Model = 0x1D, Rev = 0x01, 1000baseT, FDX 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
mii read - read MII PHY register mii write - write MII PHY register
上述两个命令,需要根据具体的芯片手册寄存器设置来进行配置。以下命令为示例
mii write 0 0 0x8000 向地址为0的phy芯片的0寄存器写入0x8000 mii read 0 0 读取地址为0的phy芯片的寄存器0的值
部分uboot也支持直接使用mdio指令,需要时自行查录
奇怪的问题:读寄存器状态不对
如果连读寄存器的状态都存在问题时,(博主遇到了读同样的寄存器,连着读读到的值竟然不一样,有00有ff有正常的0x7949)首先需要协调硬件工程师 就复位,时钟,电源挨个检查,大概率是硬件问题。最后果然检查到电源部分有个电阻阻值不对,导致工作电压不稳定进而影响了寄存器的配置