当前位置: 首页 > news >正文

W5500-EVB-PICO主动PING主机IP检测连通性(十)

前言

        上一章我们用W5500_EVB_PICO 开发板做UDP组播数据回环测试,那么本章我们进行W5500_EVB_PICO Ping的测试。

什么是PING?

        Ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序  。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet 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 cnt=0;for(i = 0; i<=3;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(req>=4){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成功。

相关连接:

本章例程链接

http://www.lryc.cn/news/149863.html

相关文章:

  • 解释基本的3D理论
  • C# 练习题
  • 解决Linux报错:Swap file “xxxxxx.swp“ already exists
  • 基于飞桨图学习框架的空间异配性感知图神经网络
  • Springboot整合JWT
  • 如何使用Python和正则表达式处理XML表单数据
  • LA@方阵相似@相似矩阵的性质
  • ZLMediaKit 各种推拉流
  • 行业追踪,2023-08-29
  • 【简单】228. 汇总区间
  • Mysql高级语句
  • Python中 re.compile 函数的使用
  • 【分布式搜索引擎es】
  • 单片机的ADC
  • 如何把pdf文件合并?分享最新pdf合并方法
  • 笙默考试管理系统-MyExamTest----codemirror(11)
  • Spring MVC 五 - Spring MVC的配置和DispatcherServlet初始化过程
  • Ramp 有点意思的题目
  • 算法通关村14关 | 堆在数组中找第k大的元素应用
  • Unity 顶点vertices,uv,与图片贴图,与mesh
  • Shell编程之函数
  • 10.物联网LWIP之TCP状态转变
  • Img标签的src地址自动拼接本地域名(localhost:8080)导致图片不显示问题
  • 数据结构入门 — 栈
  • Unity Android 之 在Unity 中引入 OkHttp的操作注意(OKHttp4.xx- kotlin 的包)简单记录
  • 内嵌功能强大、低功耗STM32WB55CEU7、STM32WB55CGU7 射频微控制器 - MCU, 48-UFQFN
  • 【测试】笔试03
  • JavaScript的while和for循环
  • mqtt安卓客户端
  • pdf怎么删除其中一页?