STM32F4 + Wiznet W5100 - 几分钟后> TCP 连接超时



我已经为Wiznet W5100以太网芯片编写了一个驱动程序(目前位于WIZ812MJ分线板上)。它通过 SPI1 连接。

一切正常 - ping,tcp客户端模式,接收和发送数据 - 但是,在随机时间(从1分钟到10分钟)之后,连接突然关闭!我试图调试发生的所有步骤,但我找不到任何有用的东西。有没有人遇到过类似的问题?

由于驱动程序是为我的公司编写的,我不能把所有代码都放在这里,但我尝试粘贴(对我来说)最重要的部分。其中大部分是伪代码,但您可以假设SPI通信工作正常,并且所有寄存器都设置为给定值!

流程图:

W5100_Init-通过SPI引脚配置并执行W5100初始化

Pass SPI configuration
Write reset-cmd to MR register
Write retry time-value to RTR register (0x07D0 = 2000ms)
Write retry count to RCR register (0x05)
Write socket memory information to TMSR/RMSR register (0x55)

W5100_NetworkInit-写入GW,MAC,子网掩码和IP地址

Write Gateway to GAR register
Write MAC to SHAR register
Write Subnet to SUBR register
Write IP to SIPR register

W5100_SocketInit-将重要的套接字寄存器映射到给定的套接字并初始化套接字

/*This maps all important/required ports to the socketConfig struct*/
if(socketX == SOCKET0)
{
socketConfig.PORT0 = W5100_ADDR_S0_PORT0;
socketConfig.PORT1 = W5100_ADDR_S0_PORT1;
socketConfig.MR = W5100_ADDR_S0_MR;
socketConfig.CR = W5100_ADDR_S0_CR;
socketConfig.SR = W5100_ADDR_S0_SR;
//...
}
Write protocol type to MR register
write Port to PORT register
Write CMD_OPEN to CR register

使用客户端模式:

Write server IP to DIPR register
Write server Port to DPORT register

现在我们已经在客户端模式下有了 tcp 连接,启动循环。

Check socket status from SR register
If there's any data on the line, call W5100_Socket_ReceiveData method

这在一段时间内工作正常(最近运行:10 分钟),但随后套接字状态突然返回0x00并且连接已关闭。还有什么重要的事情是我可能忘记的吗?为什么插座关闭?

非常感谢您提供任何提示!

最终,我自己找到了答案。问题不是基于我的代码,而是基于EMC:Wiznet芯片重置。但重置本身与时间无关,但总是在我从椅子上站起来时出现。复位引脚非常敏感,因此站立切换复位引脚;

最新更新