STM32H7 LAN8742 LwIP只有上电后才能正常工作,复位后不行
Posted
技术标签:
【中文标题】STM32H7 LAN8742 LwIP只有上电后才能正常工作,复位后不行【英文标题】:STM32H7 LAN8742 LwIP only works fine after power-up, not after reset 【发布时间】:2019-08-11 03:45:56 【问题描述】:我手头有一个奇怪的问题,我以前从未见过。 然而,我仍在试图找出问题所在。 我有一个 STM32H753VIT 和一个 LAN8742 以太网控制器连接到它。 我在 NO-SYS 模式下运行 LwIP。 它仅在冷启动后才能正常工作,但在硬件重置(按钮或 ST-LINK 探头)后不能正常工作。 它运行一个简单的 TCP 回显服务器。如果它运行,我可以 ping 它,它会响应 TCP 客户端。
但在硬件重置后,我无法再 ping 它,并且它没有作为回显服务器响应。 我注意到接口上的绿色(链接)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的电容接地。我有一个复位开关,我尝试了一个上拉电阻,但运气不好。 我添加了一个重置按钮,这发现更长的硬件重置也不起作用。
我正在考虑时间或内存内容的方向。 有没有人见过这样的启动行为?
【问题讨论】:
您是否查看了 LAN8742A 的数据表以了解所需的最小复位脉冲时间?过去我遇到过这个确切的问题,我有相同的硬件布局 - STM 的 nRST 和 PHY 的 RST 已连接,并且它们已连接到调试器连接器。就我而言,PHY 需要比 STM 更长的复位脉冲,这会导致它有时“锁定”,除非完成更长的复位脉冲。 您可能还想检查所需的最小复位脉冲时间,并将其与 STM 在执行“软件”复位(看门狗、内核复位,例如通过NVIC_SystemReset
)时在 nRST 上生成的脉冲进行比较.如果它比 STM 的输出长,您以后可能会在现场遇到问题,例如执行固件升级和执行软件重置。
感谢您的回复!是的,我也想过这个,加了个reset按钮,发现再长的硬件reset也不行。只是为了测试,虽然没有它复位会变高,但我尝试了各种值的上拉电阻,但没有运气。
我终于解决了。这是一个软件问题。或者实际上 HW 中的皮带似乎是错误的,我在 SW 中解决了这个问题。通过在代码中添加一行。 LAN8942A 软件复位后,我在 BCR (0x00) 寄存器中设置了自动协商位(位 12)。我会在github上更新代码,给有兴趣的人。
请不要在标题中添加 SOLVED。见meta.stackexchange.com/questions/116101/…。相反,请在下面回答您的问题。
【参考方案1】:
已解决,在执行 LAN8942A 软件复位的代码后,我添加了一行来设置 BCR (0x00) 寄存器中的自动协商位(第 12 位)。
pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, LAN8742_BCR_AUTONEGO_EN);
我会在github上更新代码,给有兴趣的人。
【讨论】:
欢迎来到 Stack Overflow。在时间限制过去(我认为是 2 小时)后,您将能够接受自己的答案并获得一些免费代表。同时,请点赞,欢迎来到 SO。以上是关于STM32H7 LAN8742 LwIP只有上电后才能正常工作,复位后不行的主要内容,如果未能解决你的问题,请参考以下文章
《嵌入式 - Lwip开发指南》第2章 LWIP开发环境简介