天天看点

调试lan8720a遇到的奇葩问题,自动协商永远10M。

这里记录一下调试stm32f407+lan8720a遇到的奇葩问题,如果有朋友遇到了相同的问题,并且解决了的话欢迎评论或私信交流。

一、电路图

调试lan8720a遇到的奇葩问题,自动协商永远10M。

二、问题说明

lan8720采样自动协商模式,连接的是100M口的交换机,无论如何测试lan8720都工作在10M模式下,表现为speed led引脚输出高。

这时又会引来另一个问题,那就是由于speed led引脚输出高之后,由于speed led的初始电平决定了REFCLK/nINT引脚的功能,为高后该引脚默认作为INT功能,由于我的电路设计上将这个引脚配置为REFCLK输出,所以会出问题。表现出来的现象就是,上电后REFCLK输出正常,但是只要对芯片进行复位,则REFCLK会消失。还有就是不插网线的情况下,由于没有自动协商,无论怎么复位REFCLK都不会消失。这个问题后面通过减小speed led上的下拉电路解决。

后面为了将芯片强制设置到100M全双工模式,在csr_dv/mode2引脚上接了一个下拉电阻,设置mode[2:0]=011,此时禁止了自动协商功能,模式选择100M全双工模式,然后又出现了另一个问题,此时软件中读取phy的BSR寄存器bit2值为 0(link is down),软件中就会卡死在

do
    {
      timeout++;
    } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO));
           

复位多次发现还是一样的情况。看来100M模式是有问题了,认命了10M就10M吧。

之后又去掉了MODE2上的下拉电阻,软件倒是没有卡在哪个地方,lwip成功的跑起来了,然后我就想ping一下看看,是不是能ping通,结果还是ping不通啊。由于没有用过10M模式的情况,不知道是不是软件上的处理有需要注意的地方。