新年快乐!!lan8720设置自动协商后,100Mbps正常,10Mbps却ping不通

2019-07-20 18:15发布

本帖最后由 854619267 于 2016-2-12 23:44 编辑

首先祝大家新年快乐
  我这大过年的还在家里搞eth的代码。 板子是参考alientek后自己画的 芯片是f4vg,phy用的是lan8720A,用的lwip协议栈,程序里配置为自动协商模式,网线与电脑直连测试。
问题:
      当电脑的网口也设置为自动协商后,单片机与电脑可以正常通信,ping正常。
      当把电脑的网口设置为10Mps,不论是10M的半双工还是全双工,单片机与电脑不能通信,也ping不到。lan8720的link灯会闪烁。
求助大家,在10Mbps下为啥不能通信
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
marmot
2019-07-20 23:27
本帖最后由 marmot 于 2016-6-23 20:25 编辑

问题出在  ETH_Init 的调用者上。因为 ETH_Init 只是调用了一次,所以  ETH->MACCR 寄存器只是被初始化为首次协商时协商出来的mode与speed。
比如首次协商出来是 100M,全双工,那么相关ETH->MACCR的值就只能是这个值了。

解决这个问题需要监听LAN8720的LINK UP 以及 LINK DOWN状态,重新 LINK UP 时需要重新根据协商结果初始化。

一周热门 更多>