编号:EB-00002
环境:
通信节点A:MCU STM32 + W5500网卡(百兆,支持自动协商,不支持MDI自动极性变换),
通信节点B: CPU Intel J1900(Debian 12操作系统)+ I211网卡(千兆,支持自动协商和MDI,驱动igb driver)
连接方式:网线直连
现象:
1.节点A和节点B直连后网口灯不亮,网络不通,ping失败。
2.更换网线为交叉线或者直连线,问题依旧。
3.节点A和节点B中间经过交换机如TLSF-1008,网络连接正常,可以ping通。
4.节点A与台式机、笔记本电脑、路由器等其他网络设备直连,没有问题。
5.节点B与台式机、笔记本电脑、路由器等其他网络设备直连,也没有问题。
6.节点B不变,节点A设置关闭网口自动协商,固定为100M 全双工,网络正常,可以ping通。
7.节点A不变,节点B设置关闭网口自动协商,固定为100M 全双工,网络正常,可以ping通。
解决:
节点A设置关闭网口自动协商,固定为100M 全双工(通过修改MCU程序配置网卡)。节点B也设置关闭网口自动协商,固定为100M 全双工(设置命令“sudo ethtool -s enp1s0 speed 100 duplex full mdix auto autoneg off”)。
分析:
网络不通时,查看节点B网口状态为 百兆半双工未连通(ethtool -d enp1s0),且无法识别对端(节点A)的网络能力(ethtool -d enp1s0 |grep "Link partner ability",寄存器值为全0)
扩展:
总结为两个网卡phy层兼容性问题,导致无法成功自动协商工作模式。
注意,虽然只设置通信一方为百兆全双工固定模式,网络可以ping通,但是这并不能作为最终解决方案,会导致另一方自动协商为半双工模式,双方后续通信存在问题,具体原因可参考FAQ-以太网自协商的详细过程
————————————————
版权声明:本文为CSDN博主「doonline」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/doonline/article/details/135640668