问题分析:我们这边更换一种电平转换芯片,还是没调通。可能一个原因是这个芯片在开漏模式下速速最高到2M有关,您那边能帮忙协调一下,把内核PHY的MDC时钟改为2M以下,另把PHY的复位时间由现在的13MS左右调整到30MS左右我们试一下
在imx6qdl.dtsi中有
#include <dt-bindings/clock/imx6qdl-clock.h>
在dt-bindings/clock/imx6qdl-clock.h中定义了各种时钟,用到什么时钟只需写入对应宏即可
IMX6QDL_CLK_ENET_REF 190
IMX6QDL_CLK_ENET 117
内存映射后的绝对地址
从Memory Maps 里面找到ENET的地址
对应起来了
搜索MDC时钟,计算公式如下:
可以看到给的是25M时钟
所以ENET_MSCR寄存器的6-1应该写为15 10101 算得MDC为1.5M左右
原值为:0xd 1101 2.5M
改为: 0x15 10101 1.5M
ENET_MSCR=0x2A
drivers/net/ethernet/freescale/fec_main.c 中
都对上了,修改完成