随着网络应用的日益丰富和普及,网络PING的应用场景也将不断扩大。例如,网络安全领域的 发展对网络PING的需求将不断增加,通过网络安全领域的不断扩展和发展,网络PING将会获得更多的机会和挑战。同时,随着物联网的普及,网络PING也将更多的应用到物联网设备的远程管理和监控中。
W5100S/W5500是一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,同时也是一颗工业级以太网控制芯片。本教程将介绍W5100S/W5500以太网PING应用的基本原理、使用步骤、应用实例以及注意事项,帮助读者更好地掌握这一技术。
PING是一种计算机网络工具,用于测试主机之间的连通性。它通过发送ICMP(Internet Control Message Protocol)回显请求消息到目标主机,并等待目标主机发送回复消息。根据回复消息的接收情况,可以判断目标主机是否可达,以及从本地主机到目标主机的往返延迟时间、丢包率等网络性能指标。这些信息可以帮助程序员诊断网络问题、优化网络性能,以及确保网络连接的稳定性。
PING的优点主要有:
PING请求流程中主要有以下几个主要的步骤:
PING的应用场景广泛,以下是一些常见的例子:
WIZnet 主流硬件协议栈以太网芯片参数对比
Model | Embedded Core | Host I/F | TX/RX Buffer | HW Socket | Network Performance |
---|---|---|---|---|---|
W5100S | TCP/IPv4, MAC & PHY | 8bit BUS, SPI | 16KB | 4 | Max.25Mbps |
W6100 | TCP/IPv4/IPv6, MAC & PHY | 8bit BUS, Fast SPI | 32KB | 8 | Max.25Mbps |
W5500 | TCP/IPv4, MAC & PHY | Fast SPI | 32KB | 8 | Max 15Mbps |
程序的运行框图如下所示:
软件
硬件
我们使用的是WIZnet官方的ioLibrary_Driver库。该库支持的协议丰富,操作简单,芯片在硬件上集成了TCP/IP协议栈,该库又封装好了TCP/IP层之上的协议,我们只需简单调用相应函数即可完成协议的应用。
第一步:ping_client.c文件中加入对应的.h文件。
第二步:定义DHCP配置需要的宏。
第三步:网络信息的配置。
第四步:编写定时器回调处理函数,用于 DHCP 1s滴答定时器处理函数。
第五步:主函数先是对串口和SPI的初始化,然后写入W5100S的网络配置参数,初始化DHCP后开始DHCP获取IP,获取到就打印获取到的IP,获取次数超过最大获取次数时就使用静态IP,然后主循环进行的是PING网关IP的操作,需要传入的参数是所要执行的socket号和所要PING的目标IP。
#include
#include "pico/stdlib.h"
#include "pico/binary_info.h"
#include "hardware/spi.h"
#include "wizchip_conf.h"
#include "bsp_spi.h"
#include "socket.h"
#include "ping.h"
#include "dhcp.h"
#define SOCKET_DHCP 1
#define SOCKET_PING 0
#define ETHERNET_BUF_MAX_SIZE (1024 * 2)
#define DHCP_RETRY_COUNT 5 // DHCP retry times
wiz_NetInfo net_info = {
.mac = {0x00, 0x08, 0xdc, 0x16, 0xed, 0x2e}, // Define MAC variables
.ip = {192, 168, 1, 10}, // Define IP variables
.sn = {255, 255, 255, 0}, // Define subnet variables
.gw = {192, 168, 1, 1}, // Define gateway variables
.dns = {8, 8, 8, 8}, // Define DNS variables
.dhcp = NETINFO_DHCP}; // Define the DNCP mode
wiz_NetInfo get_info;
static uint8_t ethernet_buf[ETHERNET_BUF_MAX_SIZE] = {
0,
};
static uint8_t remote_ip[4] = {192, 168, 1, 1}; // The IP to be ping
static uint8_t dhcp_get_ip_flag = 0; // Define the DHCP acquisition flag
/**
* @brief Timer callback processing function, used for dhcp timing processing
* @param repeating :Timer structure
* @return bool
*/
bool repeating_timer_callback(struct repeating_timer *t);
/**
* @brief Initialization of chip network information
* @param conf_info :Static configuration information
* @return none
*/
void network_init(wiz_NetInfo *conf_info);
int main()
{
struct repeating_timer timer; // Define the timer structure
/*mcu init*/
stdio_init_all(); // Initialize the main control peripheral
wizchip_initialize(); // spi initialization
/*dhcp init*/
DHCP_init(SOCKET_DHCP, ethernet_buf); // DHCP initialization
add_repeating_timer_ms(1000, repeating_timer_callback, NULL, &timer); // Add DHCP 1s Tick Timer handler
printf("wiznet chip ping client example.\r\n");
network_init(&net_info); // Configuring Network Information
print_network_information(&get_info); // Read back the configuration information and print it
while (true)
{
do_ping(SOCKET_PING, remote_ip); // Ping the target IP
}
}
(1)在library/ioLibrary_Driver/Ethernet/下找到wizchip_conf.h这个头文件,将_WIZCHIP_ 宏定义修改为W5500;
(2)在library下找到CMakeLists.txt文件,将COMPILE_SEL设置为ON即可,OFF为W5100S,ON为W5500。
WIZnet官网
WIZnet官方库链接
本章例程链接
想了解更多,评论留言哦!