我按照某些论坛中的指导原则移植了 lwip 版本2.0.2。 除了一个例外,一切都可以正常工作:当断开网络电缆然后重新连接时,lwip 停止工作。
我正在调试系统、问题是、当电缆断开时、链路会下降(PHY_PHY_ADDR 寄存器中的 EPHY_STS_LINK、EMAC0_BASE)、这是正确的、但当电缆再次连接时、LINK 位永远不会返回到1、但保持为零。
发生这种情况时、tivaif_process_phy_interrupt 函数会调用 netif_set_link_down、而不会调用 netif_set_link_up (该函数在复位后仅调用一次)。 在 lwip 版本1.4.1中、这些函数似乎不执行任何操作、但在新版本中、TCP 堆栈不再接收数据包。
我修补了对 tivaif_process_phy_interrupt 中函数 netif_set_link_down 进行注释的代码。 此修补程序使系统正常工作。 但是、这种解决方案不是正确的、因为问题在于、由于某种原因、物理层无法检测到电缆已再次连接。