记录一次imx6网卡速率低的调试经历,硬件方案是imx6加2片rpc8201f(两个以太网口),网口采用RMII的连接方式,配置dts编译内核,烧写后用iperf3测试发现两个网口速率都特别低,ping包也是丢的一塌糊涂,因为之前同样的内核在另一块不同PHY的板子上用过没啥问题。所以问题最大可能出在dts配置或硬件上。排查发现两个PHY(rpc8201f)的phy_id在硬件上都配置成了0。rpc8201f的phy_id是通过24和25引脚的上下来控制的,范围是0x00~0x11。
参考书册中的介绍对phy_id做了调整,配置成0和1(注:DTS中也需要按照这个配置修改)。再利用iperf测试时发现phy_id=1的网卡正常,phy_id=0的网卡速率还和之前一样。试着把两个地址掉换了一下,故障的网口也跟着发生了变化,也就是说phy_id=0的网口一直不正常。这样看这个问题肯定是出在phy_id上,于是对照手册中排查但没有发现什么不对的,本想把Id换一个试试结果偷了个懒没试,却把PHY外围的电路一顿折腾,结果就是要么故障照旧要么直接就不工作。后来在网上查RTL8201和这个是pin2pin的,找了个RTL8201替换上去居然好了。这不是说明rpc8201f有问题吧?于是把问题反馈给芯片厂家,得到的回复:0地址默认是广播地址。看来上面的偷懒,让我误入歧途呀。重新调整phy_id为1和2再测试速率一切OK,不过后来查了一下手册确实没有发现对广播地址的说明(可能是个人英文水平问题),只说“Up to 4 PHY device valid,The PHY address are: 00,01,10 and 11”。现在看来这个4是有限制的,需要通过寄存器关闭广播地址功能才能满足最大4个PHY的要求。
总结:
不要偷懒,不要放过任何一个可能的小细节。