我为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,连接关闭。我还有什么重要的遗忘吗?插座为什么关闭?
非常感谢您提供任何提示!
答案 0 :(得分:0)
最终,我自己找到了答案。问题不是基于我的代码,而是基于EMC:Wiznet芯片重置。但是复位本身并不是时间相关的,但是当我从椅子上站起来时总是出现..复位引脚非常敏感,因此站立切换复位引脚;