1、开发环境
虚拟机:Ubuntu16.04
内核版本:kernel4.1.15
驱动:driver/net/phy/dp83848.c
driver/net/ethernet/freescale/fec_main.c
2、问题
在同一个固件的情况下,有部分板子无法识别到网线的插拔动作。
3、问题初步分析
驱动能成功识别加载,然后系统起来后,插拔网线,系统却没有打印信息。感觉是没有信号传输到PHY控制器上,一开始我是还以底板上的差分信号线的问题,然后看了下原理图,看到了DP83848芯片中X1引脚是使用外部晶振的同时还用了CPU内部输出时钟频率,有可能导致了两个频率冲突了。
4、解决问题
首先是用示波器测量一下X1处的时钟频率,发现虽然有50MHZ输出,但是波形却有点杂乱,更加让我觉得是这个影响了网口通信。
然后将外部晶振拆除,再次用示波器测量得出的波形是稳定的,因为imx6ul默认是让MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2引脚输出50MHZ时钟频率的。
最后,就是在MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2替换成MX6UL_PAD_ENET2_TX_CLK__ENET2_TX_CLK。然后测试一下是否还有频率输出?如果没有,把外部晶振再焊接回去。然后网口就可以检测到了。
如下图&#