如果在使用官方lwip模板时出现自动协商失败,请先查看该帖子:https://www.corecourse.cn/forum.php?mod=viewthread&tid=29166
也可以用本帖提供的源文件直接替换,也可解决自动协商失败问题
xilinx官方提供的 LWIP_ECHO 的demo(vivado2018.3版本),在使用的过程中还发现一些小问题,在此提供解决方法
1、以太网设置固定速率的时候,会频繁打印link up/link down
2、开发板网口与电脑端连接时,会出现绿灯不亮
3、网线先不插,等待自协商结束后,再插上会无反应
这里针对上面3个bug,在这里提供一些解决方法:
(1)报错现象与分析
问题1:固定速率问题
现象如下图所示,设置固定速率为1000M后,插上网线就会不断提示link up/link down
分析:
① 笔者观察到在以太网物理层链路建立过程中,每次网线重新插入后,PHY状态寄存器的bit2(通常表示链路状态)初始会持续一段时间为0,然后才稳定为1。
在xemacpsif_physpeed.c文件下面configure_IEEE_phy_speed函数中,存在PHY复位操作(在828行左右,IEEE_CTRL_RESET_MASK是用于将bit15写入1)
根据数据手册的描述可见,在复位操作后,会导致链路的不稳定;例程中,在复位后,添加了延时操作,等待链路回复正常,但是这个时间是不够的;这也就是导致持续发送link up、link down的原因。
所以我们需要给它增加延时,如下图所示
② 经过修改后,如下图所示,插上网线后会提示一次Ethernet Link !
如下图所示,拔出网线会提示一次Ethernet Link down,不再重复打印
问题2:绿灯不亮问题
现象如下图所示,开发板网口与电脑端连接时,会出现绿灯不亮
分析:
① 这里主要是EEE寄存器和Reg16寄存器配置不对
② 先关闭LED1、LED2的 EEE 指示,再配置Reg 16寄存器;(代码位于xemacpsif_physpeed.c文件,phy_setup_emacps函数中)
③ 设置Reg16寄存器
问题3:网线先不插,自协商结束后,插入会无反应
现象如下图所示,网线先不插,等待自协商结束后,再插上会无反应;
分析:
①笔者在调试中发现xemacps_control.c文件中,XEmacPs_SetOperatingSpeed函数里面有速率相关的断言;这里将其屏蔽即可。
②自协商失败后,再插入网线,也会尝试连接
(2)快速解决方法
① 将帖子下方提供的三个C文件下载下来
② 打开工程下的bsp文件夹,找到对应的文件目录,进行替换即可
更新记录
24.10.24 更新固定速率,频繁打印link up/link down解决方法
文件下载: |