根据官方使用手册以及网上大神的一些文章,自己根据需要从头到尾写了一遍,如下:
一、下载好官方的W5500库函数文件,里面包括的文件如图所示
二、创建包含自定义的IP、MAC地址等信息的结构体(根据应用需求修改,也可输入,我这里直接固定
static wiz_NetInfo gWIZNETINFO = {{0x00, 0x08, 0xdc,0x00, 0xab, 0xcd},
{192, 168, 88, 11},
{255,255,255,0},
{192, 168, 88, 1},
{0,0,0,0},
NETINFO_STATIC }; //
三、注册回调函数:注册临界回调函数、注册片选回调函数、注册SPI读写回调函数。
四、网络初始化函数:设置网络配置。把之前的结构体信息写进去。回读网络配置,放进一个新的结构体中。写配置与读配置进行比较, 相同则是设置成功,不同则失败。
void network_init()
{
//uint32_t ret=0;
wiz_NetInfo conf;
// //ÉèÖÃÍøÂçÅäÖÃ
if(ctlnetwork(CN_SET_NETINFO, (void*)&gWIZNETINFO) == -1)
{
while(1);
}
//»Ø¶ÁÍøÂçÅäÖÃ
if(ctlnetwork(CN_GET_NETINFO, (void*)&conf) == -1)
{
while(1);
}
if(memcmp(&conf,&gWIZNETINFO,sizeof(wiz_NetInfo)) == 0)
{
u3_printf("network config success!\r\n");
}else
{
u3_printf("network config failed!\r\n");
}
五、步骤如下:
1、系统初始化、SPI初始化、注册回调函数。
2、W5500初始化并软重置。
3、网络初始化。
此时W5500已经运作。接下是应用层。
register_wizchip();
if(ctlwizchip(CW_INIT_WIZCHIP,(void*)memsize) == -1){
while(1);
}//³õʼ»¯w5500
if(ctlwizchip(CW_RESET_WIZCHIP,(void *)0) == -1)
{
while(1);
}//ÈíÖØÖÃw5500
do{
if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1){
u3_printf("Unknown PHY Link stauts.\r\n");
}
}while(tmp == PHY_LINK_OFF);
network_init();
4、采取轮询的方式建立TCP连接。
switch(getSn_SR(SOCK_TCPS)) /*»ñÈ¡socketµÄ״̬*/
{
case SOCK_CLOSED: /*socket´¦ÓڹرÕ״̬*/
socket(SOCK_TCPS ,Sn_MR_TCP,7000,Sn_MR_ND); /*´ò¿ªsocket*/
if(ret !=SOCK_TCPS )
{
u3_printf("socket failed!\r\n");
delay_ms(1000);
}
setSn_KPALVTR(SOCK_TCPS,2);
break;
case SOCK_INIT: /*socketÒѳõʼ»¯×´Ì¬*/
listen(SOCK_TCPS); /*socket½¨Á¢¼àÌý*/
break;
case SOCK_ESTABLISHED: /*socket´¦ÓÚÁ¬½Ó½¨Á¢×´Ì¬*/
if(getSn_IR(SOCK_TCPS) & Sn_IR_CON)
{
setSn_IR(SOCK_TCPS, Sn_IR_CON); /*Çå³ý½ÓÊÕÖжϱê־λ*/
}
len=getSn_RX_RSR(SOCK_TCPS); /*¶¨ÒålenΪÒѽÓÊÕÊý¾ÝµÄ³¤¶È*/
if(len>0)
{
recv(SOCK_TCPS,tcp_buff,len); /*½ÓÊÕÀ´×ÔClientµÄÊý¾Ý*/
command_analyze((char *)tcp_buff);
u3_printf("tcp_buff:%s\r\n",tcp_buff);
if(heart == 1)
{
tcp_buff[len]=0x00; /*Ìí¼Ó×Ö·û´®½áÊø·û*/
send(SOCK_TCPS,tcp_buff,len);
//u3_printf("tcp_buff:%s\r\n",tcp_buff);
heart=0;
}
}
break;
case SOCK_CLOSE_WAIT: /*socket´¦Óڵȴý¹Ø±Õ״̬*/
close(SOCK_TCPS);
break;
}