W5500的特点是用硬件逻辑实现了网络传输层及其以下各层的协议,其中就包括ICMP协议,所以如果想让配备W5500EVB能响应Ping,只需配置几个W5500的寄存器即可,如同配置电脑网卡的IP地址一样简单�
先简单看一下W5500几个常用的寄存器了解了W5500的这些寄存器之后,我们来看看如何把MAC地址等所必需的网络参数写入W5500。由于W5500和单片机的接口是SPI,因此W5500和单片机之间的数据交互都是通过SPI实现�
主循环代码如�:void main() { uint8 mac[6]={0x00,0x08,0xdc,0x01,0x02,0x03}; /*定义Mac变量*/ uint8 lip[4]={192,168,10,10}; /*定义lP变量*/ uint8 sub[4]={255,255,255,0}; /*定义subnet变量*/ uint8 gw[4]={192,168,10,1}; /*定义gateway变量*/ uint8ip[4]; RCC_Configuration(); /* 配置单片机系统时�*/ GPIO_Configuration(); /* 配置GPIO*/ NVIC_Configuration(); /* 配置嵌套中断向量*/ Systick_Init(72); /* 初始化Systick工作时钟*/ USART1_Init(); /*初始化串口通信:[email protected]*/ at24c16_init(); /*初始化eeprom*/ printf("W5500 EVB initialization over.\r\n"); Reset_W5500(); /*硬重启W5500*/ WIZ_SPI_Init(); /*初始化SPI接口*/ printf("W5500 initialized!\r\n"); setSHAR(mac); /*配置Mac地址*/ setSUBR(sub); /*配置子网掩码*/ setGAR(gw); /*配置默认网关*/ setSIPR(lip); /*配置IP地址*/ //Init. TX & RX Memory size of w5500 sysinit(txsize, rxsize); /*初始�8个socket收发缓存�*/ setRTR(2000); /*设置发送超时时间�*/ setRCR(3); /*设置最大重新发送次�*/ getSIPR (ip); printf("IP : %d.%d.%d.%d\r\n", ip[0],ip[1],ip[2],ip[3]); getSUBR(ip); printf("SN : %d.%d.%d.%d\r\n", ip[0],ip[1],ip[2],ip[3]); getGAR(ip); printf("GW : %d.%d.%d.%d\r\n", ip[0],ip[1],ip[2],ip[3]); printf("Network is ready.\r\n"); while(1) { //可以在电脑上Ping我啦 } }Ping的测试步骤如�
如图1所示,192.168.10.10并没有回复,下面让我们看一下原因。首先排除硬件连接等问题,之后我们看一下那些网络参数是否确实写到了W5500的寄存器里面� 之前在set_network()函数中已经读取W5500那几个寄存器的值,并通过串口打印了出来,输出结果如图2�
串口终端显示单片机的IP地址�192.168.10.10,与我们写入的地址相同,由此可以排除单片机硬件的问题。接下来再排查电脑的网卡配置,我们是把W5500EVB和电� 的网卡直接用网线连在一起的,中间没有经过任何交换机,所以如果电脑的IP地址和W5500的IP地址不在同一个内网网段里面,也是不能Ping通的。至于是不是同一网段� 可以简单地看一下IP地址的前三个字节,如果一样,那就基本上说明是一个网段的。有关这方面的知识,可以参考IP地址的定义。如果手头有网络交换机或路由器,可以把W5500EVB 和电脑连在同一个交换机或路由器上进行调试,具体调试方法与上述一致�
打开电脑的网络属性,发现原来电脑的IP地址�192.168.11.2,与W5500EVB地址192.168.10.10不在同一网段。这时我们将电脑IP地址改成192.168.10.2,把默认网关改成192.168.10.1� 点击确定。配置信息如�3所示�
然后再次Ping 192.168.10.10,终于收到来自W5500EVB的回复。结果如�4所示。通过这个程序,我们成功地配置了W5500,使其接入网络。并通过电脑成功地Ping通了W5500EVB,为我们下一步进行数据通信打下基础�
最后,在检查网络连接过程中,还可能出现的几个问题,这里总结一下。Ping后返回信息如下: