嵌入式技术论坛
直播中

熊本熊

9年用户 1492经验值
擅长:处理器/DSP
私信 关注
[问答]

不插网线的情况下,rtthread卡住咋办?

hi

我配置lwip为静态ip地址, 启用 sal, fal和flashdb

发现板子上电的时候,如果没有插入网线,rtthread会卡在

\ | /

RT - Thread Operating System

/ | \ 4.0.3 build May 9 2022

2006 - 2020 Copyright by rt-thread team

lwIP-2.0.2 initialized!

这里

直到我插入网线程序就会继续进行:

\ | /

RT - Thread Operating System

/ | \ 4.0.3 build May 9 2022

2006 - 2020 Copyright by rt-thread team

lwIP-2.0.2 initialized!

[103581] I/sal.skt: Socket Abstraction Layer initialize success.

[103589] I/SFUD: Find a Winbond flash chip. Size is 16777216 bytes.

[103596] I/SFUD: W25Q128JV flash device is initialize success.

[103603] I/SFUD: Probe SPI flash W25Q128JV by SPI device spi10 success.

请问这是为啥。。如果不插网线系统就不能工作了吗。。

另外还有个诡异的问题,如果我在main里面初始化了 flashdb, 我发现网络就不通了, 抓包发现,设备可以发包,但是收不到包..

谢谢

回帖(3)

bigbangboom

2023-5-17 10:33:03
LwIP的初始化等级是INIT_PREV_EXPORT, 打印LwIP初始化成功是在lwip_system_init函数中调用的;

网卡的初始化rt_hw_stm32_eth_init的初始化等级是INIT_DEVICE_EXPORT,它的等级低于PREV。

卡住了的话,debug调试一下网卡,或者打开drv_eth.c的log输出为debug级别,即在drv_eth.c中取消屏蔽DRV_DEBUG即可,看看到底卡死在哪一步?从你的ulog输出来看,走了很多tick才到SAL部分,怀疑Eth硬件初始化的地方耗时太多。

#define DRV_DEBUG
另外,查看一下PHY_RESET_DELAY被配置成了多少?不清楚你的LwIP的具体配置,暂时只能想到这么多。

第二个问题,FlashDB没有用过,不清楚。建议在调试的时候,先不用这个包,减少问题的耦合程度,确认一下Lwip,eth的时间长的真实原因。然后再来解决flashdb引起的问题为好。
举报

熊本熊

2023-5-17 10:33:10
跟了一下。。发现亚特利的rtthread phy初始化居然卡在
do
{
timeout++;
} while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO));
phy不link就卡死在这里。。 草读了一遍原厂的程序,居然phy状态这些都不读也不设置的。。

我现在把 phy的协商速率关掉了。。目前不会卡死了。。不知道会不会有什么隐患..
举报

bigbangboom

2023-5-17 10:33:17
可以改的,改成监控PHY状态的方式,不管有没有网线都正常走。
网线连接上再上报link_up即可,网线断开再上报link_down。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分