W5500芯片使用bug及注意事项

  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);

}
}
加了一个指示的,方便确定是这里
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值