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

STM32H7 LAN8742 LwIP仅在通电后工作正常,而不是在复位后,stm32,ethernet,hal,lwip,Stm32,Ethernet,Hal,Lwip,我手头有个奇怪的问题,我以前从未见过。 然而,我仍在努力找出问题所在。 我有一个STM32H753VIT和一个LAN8742以太网控制器连接到它。 我在NO-SYS模式下运行LwIP。 它仅在冷通电后工作正常,但在硬件重置(按钮或ST-LINK探头)后工作不正常。 它运行一个简单的TCP echo服务器。如果它运行,我可以ping它,它会响应TCP客户端 但在硬件重置后,我再也不能ping它,它也不会作为echo服务器响应。 我注意到界面上的绿色(链接)LED在重置后将保持关闭状态 我可以看到L

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

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

我可以看到LAN8742_Init函数在硬件重置后成功执行,但它在函数低电平_输入中看不到可用的RX数据

在Nucleo-H743ZI上,我运行了相同的代码,这在硬件重置后也可以工作。 请注意,由于引脚映射略有不同,因此代码仅略有不同。 油井作业代码核子-H743ZI: 异常行为STM32H753VIT的代码:

MCU的nRST连接至LAN8742A的nRST,100nF的电容器用于接地。我有一个复位开关,我试了一个上拉电阻器,但没有运气。 我添加了一个重置按钮,这发现较长的硬件重置也不起作用

我在思考时间,或记忆内容的方向。
有人见过这样的启动行为吗?

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

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

我将为感兴趣的人更新github中的代码。

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

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

我将在github中为感兴趣的人更新代码。

您是否查看了LAN8742A的数据表以查看所需的最小重置脉冲时间?我在过去遇到过同样的问题,我有相同的硬件布局——STM的nRST和PHY的RST被连接,这些被连接到调试器连接器。在我的例子中,PHY需要比STM更长的重置脉冲,这会导致它有时“锁定”,除非执行更长的重置脉冲。您可能还想检查所需的最小重置脉冲时间,并将其与执行“软件”重置时STM在nRST上生成的脉冲进行比较(看门狗、磁芯复位,例如通过NVIC\U系统复位)。如果它比STM输出的时间长,则稍后在执行固件升级和软件重置时,您可能会在该字段中遇到问题。感谢您的响应!是的,我也想到了这一点,并添加了一个重置按钮,发现更长的硬件重置也不起作用。仅用于测试,尽管重置失败在没有它的情况下,我尝试使用各种值的上拉电阻器来设置高电平,但没有成功。最后我解决了它。这是一个软件问题。或者实际上,HW中的条带似乎错误,我在SW中解决了这个问题。通过在代码中添加一行。在LAN8942A的软件重置后,我在BCR(0x00)中设置了自动协商位(位12)注册。对于感兴趣的人,我将在github中更新代码。请不要在标题中添加已解决的问题。请参阅。而是回答下面的问题。您是否查看了LAN8742A的数据表以查看所需的最小重置脉冲时间?我在过去遇到过同样的问题,我有相同的硬件布局-nRST of ST已连接PHY的M和RST,并且它们已连接到调试器连接器。在我的情况下,PHY需要比STM更长的重置脉冲,这会导致它有时“锁定”,除非执行更长的复位脉冲。您可能还希望检查所需的最小复位脉冲时间,并将其与执行“软件”复位时STM在nRST上生成的脉冲进行比较(看门狗、堆芯复位,例如通过
NVIC\u系统复位
)。如果它比STM输出的时间长,则稍后在执行固件升级和软件重置时,您可能会在该字段中遇到问题。感谢您的响应!是的,我也想到了这一点,并添加了一个重置按钮,发现更长的硬件重置也不起作用。仅用于测试,尽管重置失败在没有它的情况下,我尝试使用各种值的上拉电阻器来设置高电平,但没有成功。最后我解决了它。这是一个软件问题。或者实际上,HW中的条带似乎错误,我在SW中解决了这个问题。通过在代码中添加一行。在LAN8942A的软件重置后,我在BCR(0x00)中设置了自动协商位(位12)注册。对于感兴趣的人,我将在github中更新代码。请不要在标题中添加已解决的问题。请参阅。而是回答下面的问题。欢迎使用堆栈溢出。在时间限制过后(我想2小时),您将能够接受自己的答案并获得一些免费代表。同时,进行一次向上投票,欢迎来到SO。欢迎来到Stack Overflow。在一个时间限制过后(我想2小时),您将能够接受自己的答案,并获得一些免费代表。同时,进行一次向上投票,欢迎来到SO。