Zynq中lwip“自动协商失败(Auto negotiation error)”的解决办法

博主今天在将lwIP以太网程序移植到RedPitaya(火龙果)开发板上时,发现了一个问题。

我们一般都会使用SDK自带的“lwIP Echo Server”例程测试以太网硬件是否正确。然而在Redpitaya开发板上测试时出现了“自动协商失败(Auto negotiation error)”的问题,如下图。或者自动协商完成了,但以太网链路速度检测错误,如“autonegotiation complete; link speed for phy address 1: 0”,也完全没法用。

Zynq中lwip“自动协商失败(Auto negotiation error)”的解决办法_第1张图片
其实这是由于硬件的PHY芯片不支持自动协商导致的。《学会Zynq》系列第12篇详细介绍了lwIP库的配置,其中有个选项:phy_link_speed,其值默认为“AUTO”,表示由物理层自动协商链路速度,lwIP据此配置TEMAC/GigE,某些PHY可能不支持自动检测,此时这个值必须设置正确。

Zynq中lwip“自动协商失败(Auto negotiation error)”的解决办法_第2张图片
RedPitaya开发板的PHY芯片支持100M/1000M以太网,因此手动将其设置为1000Mbps。此时lwIP便不会自动协商,直接连接成功。

Zynq中lwip“自动协商失败(Auto negotiation error)”的解决办法_第3张图片
博主去年在第一次使用RedPitaya开发板时,使用以太网也出现了这个问题。但当时对lwIP了解的不多,百度也没有找的任何信息,毫无头绪,因此只好暂时放下。

今日重新拿起这个板子,使用时又出现了这个问题,然而博主已经对lwIP、TCP、UDP等有了较深的理解,有了一定的理论知识储备,马上也有了解决思路。

所以写代码前,最好不要直接上手修改别人的代码。有时间的情况下,还是先对理论知识有清晰的了解。这也是博主在总结《学会Zynq》系列时的总体方法。

你可能感兴趣的:(FPGA,Zynq)