imx6ull网络接口eth不稳定的问题,fec 2188000.ethernet eth1:Link is down。

最近在调试lan8720+imx6ull双网卡,核心板使用的是正点原子的,方案也是参考其的。
调试了几天发现了一个问题就是eth1和eth0网卡经常掉线,情况就是出现(图1)
fec 2188000.ethernet eth1: Link is Up - 100Mbps/Full - flow control rx/tx
fec 2188000.ethernet eth1:Link is down
fec 2188000.ethernet eth1: Link is Up - 100Mbps/Full - flow control rx/tx
fec 2188000.ethernet eth1:Link is down

连接建立之后然后就立刻down了,但是eth1对应的fec0,我在uboot通过网络(fec0)加载的zImage和dtb的时候有是正常的,这就很怪了,应该是软件问题了。但是呢软件我在开发板上运行又比较正常,软件里面又经过了仔细对照了几遍,发现设置的都是一模一样的没有区别,这个问题就挺奇怪的。
后来我经过排查发现了问题所在,问题出在网络时钟源上,lan8720的时钟源由imx6ull产生供给,uboot加载时时钟源的幅值比较宽,幅值范围-1V - 4V,到了linux运行的时候时钟幅值只有0.6V - 2.5V(图2),明显感觉时钟的差异造成了连接的不稳定。需要修改时钟引脚的电气配置,正点原子设定的值为0x4001b009,其中引脚的驱动能力配置为001(R0),我将其修改为010(R0/2),寄存器值变为0x4001b011,然后时钟的情况好了许多网卡工作正常不再频繁掉线(图3)。
回过头总结下来就是,我自己的板子和正点原子的开发板在硬件pcb布线上有所区别,我的phy离主控芯片的距离比较远,走线的长度比较长,线间的分布电容也相对较大,所以管脚设置照搬就造成了管脚驱动能力不够的问题。
imx6ull网络接口eth不稳定的问题,fec 2188000.ethernet eth1:Link is down。

图1 网卡掉线提示

imx6ull网络接口eth不稳定的问题,fec 2188000.ethernet eth1:Link is down。

图2 修改前ent_clk

imx6ull网络接口eth不稳定的问题,fec 2188000.ethernet eth1:Link is down。

图3 修改后ent_clk