ENC28J60比较复杂,W5500用了很久,这次做了一个转发服务模块,总是遇到各种现象。

1、W5500无论是TCP客户端还是服务端,通过自动或者手动KEEPALIVE来知道对方已经不在线,W5500的机制是双方必须都发送成功过数据,才会人为链路OK,才会发送心跳,否则抓包你是看不到的。这个其他地方都不一定说了。代码如下很简单,写寄存器

//keepalive 心跳 手动
void Send_KA(SOCKET s)
{
	Write_W5500_SOCK_1Byte(s,Sn_KPALVTR,0);
	Write_W5500_SOCK_1Byte(s,Sn_CR,SEND_KEEP);
}

//自动keeplive 1-7
void AUTO_KA(void)
{
U8 i=0;
	for(i=1;i<8;i++)
	{
		Write_W5500_SOCK_1Byte(i,Sn_KPALVTR,1);//1*5S
	}
}

2、接收网络数据函数,这个是普遍例程里面的
size=Read_SOCK_Data_Buffer(0, Rx_Buffer);
这个size可能是0,如果发送串口出去,恭喜,单片机就2了,使劲发送各种乱起八糟的东西,看门狗就重启了,然后就RST。

测试了很久,这个芯片还是不错的,前提是连上网之后,但是有时候初始化阶段就进不去下一步,就是在等待网线插入那个函数是死循环
while((Read_W5500_1Byte(PHYCFGR)&LINK)0)//等待以太网连接完成
{
if(debugflag
1)
{
LED=0;
Uart_Send_Byte(‘S’);
Uart_Send_Byte(‘Y’);
Uart_Send_Byte(‘:’);
Uart_Send_Byte(‘W’);
Uart_Send_Byte(‘A’);
Uart_Send_Byte(‘I’);
Uart_Send_Byte(‘T’);
Uart_Send_Byte(0x0d);
Uart_Send_Byte(0x0a);
delay_ms(100);
LED=1;
delay_ms(100);

}
}
加了一个指示的,方便确定是这里
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐