STM32H7 LAN8742 LwIP仅在上电后工作正常,而不是在复位后工作

问题描述 投票:0回答:1

我手边有一个奇怪的问题,我以前从未见过它。然而,我仍然试图找出问题所在。我有一个STM32H753VIT和一个LAN8742以太网控制器连接到它。我在NO-SYS模式下运行LwIP。它只能在冷启动后正常工作,但在硬件复位(按钮或ST-LINK探头)后才能正常工作。它运行一个简单的TCP echo服务器。如果它运行,我可以ping它,它响应TCP客户端。

但是在硬件重置之后,我不再能够ping它,并且它不会作为echo服务器响应。我注意到重置后接口上的绿色(链接)LED将保持关闭状态。

我可以看到LAN8742_Init函数在硬件复位后执行成功,但它看不到函数low_level_input中可用的RX数据。

在Nucleo-H743ZI上,我运行相同的代码,这也可以在硬件复位后运行。请注意,代码只是略有不同,因为引脚映射略有不同。良好工作的代码Nucleo-H743ZI:https://github.com/bkht/Nucleo-H743ZI_LAN8742_LwIP_NO-SYS奇怪的行为代码STM32H753VIT:https://github.com/bkht/STM32H753VIT_LAN8742_LwIP_NO-SYS

MCU的nRST连接到LAN8742A的nRST,100nF的电容用于GND。我有一个复位开关,我尝试了一个上拉电阻,坚果没有运气。我添加了一个重置​​按钮,这发现更长的硬件重置也不起作用。

我正在考虑时间或内存的方向。有没有人见过这样的启动行为?

stm32 ethernet hal lwip
1个回答
2
投票

解决了,在执行LAN8942A软件复位的代码之后,我添加了一行来设置BCR(0x00)寄存器中的自动协商位(位12)。

pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, LAN8742_BCR_AUTONEGO_EN);

我将更新github中的代码,供有兴趣的人使用。

© www.soinside.com 2019 - 2024. All rights reserved.