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

时间:2017-03-31 08:31:38

标签: sockets tcp stm32

我为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,SubnetMask和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,连接关闭。我还有什么重要的遗忘吗?插座为什么关闭?

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

1 个答案:

答案 0 :(得分:0)

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