网站建设团队介绍,阿里巴巴官网首页1688下载,seo计费系统开发,太原网站建设公司5858前言 上一章我们用W5500_EVB_PICO 开发板做UDP组播数据回环测试#xff0c;那么本章我们进行W5500_EVB_PICO Ping的测试。
什么是PING#xff1f; Ping #xff08;Packet Internet Groper#xff09;是一种因特网包探索器#xff0c;用于测试网络连接量的程序 。Ping是…前言 上一章我们用W5500_EVB_PICO 开发板做UDP组播数据回环测试那么本章我们进行W5500_EVB_PICO Ping的测试。
什么是PING Ping Packet Internet Groper是一种因特网包探索器用于测试网络连接量的程序 。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令 主要是向特定的目的主机发送 ICMPInternet Control Message Protocol 因特网报文控制协议Echo 请求报文测试目的站是否可达及了解其有关状态。
连接方式
使开发板和我们的电脑处于同一网段
开发板设备通过交叉线直连主机PC开发板和主机都接在路由器LAN口
测试工具
串口调试工具任意
测试
1.相关代码
我们打开例程中库文件的w5500_ping.c文件我们先找到ping.c头文件下面看下可以看到几个函数我们需要用到如下所示几个函数Ping_auto要我们传入一个socket端口号和需要Ping的对象IP信息函数里面用一个Switch状态机对socket端口状态轮询并进行相应的处理当状态在SOCK_IPRAW,就开始Ping的工作成功则返回Ping的信息Ping失败则打印失败的信息。
void ping_auto(uint8_t s, uint8_t *addr)
{uint8_t i;int32_t len 0;uint8_t cnt0;for(i 0; i3;i) {sleep_ms(10); switch(getSn_SR(s)) {case SOCK_CLOSED: close(s);IINCHIP_WRITE(Sn_PROTO(s), IPPROTO_ICMP); if(socket(s,Sn_MR_IPRAW,3000,0)!0) { }while(getSn_SR(s)!SOCK_IPRAW);sleep_ms(1000); sleep_ms(1000); break;case SOCK_IPRAW: ping_request(s, addr); req;while(1){if ( (len getSn_RX_RSR(s) ) 0){ping_reply(s, addr, len); sleep_ms(50); rep;break;}else if(cnt 200){printf( Request Time out. \r\n);cnt 0;break;}else{cnt;sleep_ms(50); /*wait 50ms*/}// wait_time for 2 seconds, Break on fail}break;default:break;}#ifdef PING_DEBUGif(rep!0){printf(Ping Request %d, PING_Reply %d\r\n,req,rep);if(rep req)printf( PING SUCCESS\r\n );elseprintf( REPLY_ERROR\r\n );} else{} #endif }}
主函数还是和之前一样先配置好网络信息然后配置好所要Ping的IP添加do_ping()函数来执行Ping_auto函数并将do_ping放在while循环中运行。
#define SOCKET_ID 0
#define ETHERNET_BUF_MAX_SIZE (1024 * 2)void do_ping(void);
void network_init(void);
wiz_NetInfo net_info {.mac {0x00, 0x08, 0xdc, 0x16, 0xed, 0x2e},.ip {192, 168, 1, 10},.sn {255, 255, 255, 0},.gw {192, 168, 1, 1},.dns {8, 8, 8, 8},.dhcp NETINFO_STATIC};
wiz_NetInfo get_info;
static uint8_t ethernet_buf[ETHERNET_BUF_MAX_SIZE] {0,};
static uint8_t destip[4]{192, 168, 1, 1};
static uint16_t destport 8080;
static uint16_t local_port 8000;
int main()
{ stdio_init_all();sleep_ms(2000);network_init();while(true){// loopback_udpc(SOCKET_ID, ethernet_buf, destip, destport);do_ping();if(req4){close(0); break;} }}void network_init(void)
{uint8_t temp;wizchip_initialize();printf(W5500 ping test.\r\n);sleep_ms(2000);wizchip_setnetinfo(net_info);print_network_information(get_info);sleep_ms(2000);
}
void do_ping(void)
{ printf(------------PING_TEST_START-----------------------\r\n);sleep_ms(1000); // wait 1000msping_auto(0,destip);
}
2.烧录现象
我们编译烧录后打开串行监视器按下复位键会打印网络配置信息和所要Ping的ip当Ping成功后串口会打印Ping的信息出现PING SUCCESS 表示Ping成功。 相关连接
本章例程链接