写在前面
移植瑞芯微px30 网卡RTL8363的时候,遇到了一些坑,为此理了一下GMAC的代码思路,所遇到的问题主要是没有识别到 phy,表象为启动日志里打印 no found phy,调试过程总结如下
一、调试思路
1 结合 《以太网排查文档》 和 《TRM手册》 确认 管脚复用关系
2 确认网卡芯片电源是否正常
3 示波器测量reset脚是否可控。
4 打开rtk_switch_reg1b03(); 通过串口打印看能否读取到 0x0432,如果能正确的读取,则 MDC/MDIO 通讯没有问题。
5 get_phy_device函数 正确的情况 RTL8367RB 读到的是 0x001cc942,RTL8363 读到的是 0x001cc943,如果能正确扫描到设备型号,网卡就成功被识别到了
二、复用关系确认
查看文档得知
黄色为 100M(RMII)单独使用的引脚,蓝色为 1000M(RGMII)单独使用的引脚,绿色为两者共同使用的引脚。
对比TRM文档
在终端中输入
io -4 -l 12 0xff140020
ff140020: 00002222
ff140024: 00002222
ff140028: 00000220
复用关系正常
三、确认电源管脚是否正常
查看RTL的芯片手册
对照引脚测量一下这几个引脚的电源是否正常
DVDDL | Digital Low Voltage Power. |
DVDDIO-1 | Digital I/O High Voltage Power for Extension Port 1 General Purpose Interface. |
AVDDH | Analog High Voltage Power. Including supply I/O power for INTERRUPT pin |
AVDDL | Analog Low Voltage Power. |
PLLVDDL | PLL Low Voltage Power. |
四、示波器测试reset脚是否正常
reset之后PHY才能正常启动,这里需要看一下设备树文件
&gmac {
phy-supply = <&vcc_3v3>;
clock_in_out = "output";
snps,reset-gpio = <&gpio2 RK_PB5 GPIO_ACTIVE_LOW>;
snps,reset-active-low;
snps,reset-delays-us = <0 20000 200000>;
status = "okay";
};
snps,reset-gpio :查找原理图,看一下是哪个引脚
snps,reset-active-low:表示低电平有效,复位信号就是高-低-高
snps,reset-delays-us:表示拉低20ms 然后拉高200ms
用示波器看一下是否能否正常控制到reset脚。
五、 打开rtk_switch_reg1b03()
这个函数会使用mdio接口去读取厂家出厂时写入的一个默认值,在RTL8363中,通过串口打印看能否读取到 0x0432,如果能正确的读取,则 MDC/MDIO 通讯没有问题,如果不能读取看后续的代码分析
六、确认扫描设备是否正常
get_phy_device函数 正确的情况 RTL8367RB 读到的是 0x001cc942,RTL8363 读到的是 0x001cc943,如果能正确扫描到设备型号,网卡就成功被识别到了。此时,应该应该就能使用了,如果没有扫描到,查看后续代码分析。
成功时的打印应该是
ibphy: lq@@@@@@@@@@@@@@@PHY addr[3] get phy_id[0x1cc943]