ping 测试实验
这里,我们首先进行 ping 测试实验,通过树莓派 Pico 控制 w5500 芯片使用用户设置的静态 IP 地址进行网络连接,然后我们在电脑上通过 ping 命令测试连接速度和延迟。
ping 测试是一种常用的网络诊断工具,用于检查网络连通性和延迟。Ping 测试的基本原理如下:
- 发送 ICMP 回显请求 :
ping工具发送一个ICMP(Internet Control Message Protocol)回显请求数据包到目标设备 - 等待响应:目标设备收到请求后,返回一个 ICMP 回显应答数据包
- 计算时间 :
ping工具记录从发送请求到收到响应的时间,通常以毫秒(ms)为单位
我们可以直接打开终端,在终端中使用 ping 命令完成 Ping 测试:
首先,我们使用 ipconfig 命令查看网络适配器的详细信息,包括 IP 地址、子网掩码、默认网关以及其他网络配置参数:

在**以太网适配器 以太网部分详细描述了计算机的以太网(有线网络)连接的网络配置,可以看到,我们电脑主机地址为 192.168.1.6,如果你是通过 ETH直连网线 将 W5500 以太网模块和电脑连接的话,那么该地址为主机地址;但如果你的电脑通过 WiFi 连接到与 W5500 以太网模块相同连接的路由器下,那么对应 无线局域网适配器 WLAN**部分的 IPv4 地址即为主机地址:
我们接下来对 W5500 模块配置的子网掩码和默认网关与主机地址相同。
我们尝试 ping 一下电脑主机,在 ping 命令后添加电脑主机的 IP 地址 ping 192.168.1.6:
可以看到,返回了几种类型的数据:
- 数据包大小:发送的数据包的大小,通常为 32 字节;
- **时间(
time)**:往返时间,即从发送请求到收到应答的时间; - **生存时间(
TTL,Time to Live)**:数据包在网络中传输的最大跳数,反映了数据包经过的路由器数量。
我们可以通过添加 -l data_size 来指定数据包大小为 data_size :
ping -l 64 192.168.1.6
也可以通过添加 -t 参数指定一直去 ping:
ping -t 192.168.1.6
以下代码可以在我们提供的资料包中 elegance-devkit v1\Demo\40 ETH_TCP_Ping 文件夹找到。
接下来我们初始化 W5500 网络芯片,并配置静态 IP 地址等网络参数,在终端通过 ping 命令不断测试网络连通:
Python
# Python env : MicroPython v1.23.0 on Wiznet W5500
# -*- coding: utf-8 -*-
# @Time : 2024/8/6 下午10:17
# @Author : 李清水
# @File : w5x00_Ping_Test.py
# @Description : 以太网类实验,进行ping测试
# ======================================== 导入相关模块 ========================================
# 导入套接字模块
from usocket import socket
# 导入硬件相关模块
from machine import Pin,SPI
# 导入网络相关模块
import network
# 导入时间相关模块
import time
# ======================================== 全局变量 ============================================
# ======================================== 功能函数 ============================================
# 初始化网络接口
def w5x00_init() -> network.WIZNET5K:
"""
初始化 network.WIZNET5K 实例,设置静态 IP 地址并进行网络连接。
Args:
None
Returns:
network.WIZNET5K: 初始化并连接成功的 network.WIZNET5K 实例。
Raises:
None
"""
# 初始化SPI对象
spi = SPI(0, 2_000_000, mosi=Pin(19), miso=Pin(16), sck=Pin(18))
# 实例化network.WIZNET5K类,传入使用的片选引脚CS和复位引脚RST
nic = network.WIZNET5K(spi, Pin(17), Pin(20))
# 激活网络接口
nic.active(True)
# 设置静态IP地址:主机地址、子网掩码、网关地址和DNS服务器地址
nic.ifconfig(('192.168.1.20', '255.255.255.0', '192.168.1.1', '8.8.8.8'))
# 若是没有连接网络,则循环执行
while not nic.isconnected():
time.sleep(1)
# 输出寄存器信息
print(nic.regs())
# 打印设置的IP地址
print("IP Address:", nic.ifconfig()[0])
print("Subnet Mask:", nic.ifconfig()[1])
print("Gateway:", nic.ifconfig()[2])
print("DNS:", nic.ifconfig()[3])
# 返回network.WIZNET5K实例
return nic
# ======================================== 自定义类 ============================================
# ======================================== 初始化配置 ==========================================
# 延时3s,等待器件上电
time.sleep(3)
# 打印调试信息
print("FreakStudio : Using W5x00 Ethernet to do Ping Test")
# 创建LED对象
led = Pin(25, Pin.OUT)
# 初始化网络接口
nic = w5x00_init()
# ======================================== 主程序 ===========================================
while True:
# 闪烁LED灯,表示代码还在运行
led.value(1)
time.sleep(1)
led.value(0)
time.sleep(1)
# 在终端使用Ping命令,测试连接
print("try ping", nic.ifconfig()[0])
在设置静态 IP 地址中主机地址时,我们可以使用 Advanced IP Scanner 软件扫描,看看当前网络上连接设备的主机地址,然后挑选没有被占用的主机地址来设置 w5500 芯片的主机地址:

这里,我们使用 192.168.1.20 作为 w5500 芯片的主机地址。烧录代码,打开远程终端:

可以看到首先输出 w5500 芯片寄存器的相关数据,可以用于调试,其中:
- Wiz CREG: 这是
W5x00芯片的通用寄存器,包含了芯片的基本配置信息,如硬件版本、MAC地址等,这些信息通常在初始化时被读取并保存 - Wiz SREG0-3: 这些是
W5x00的Socket寄存器,每个Socket都有一组相关的寄存器,这里展示了 4 个Socket的寄存器内容
然后输出了设置的静态 IP 地址,与电脑连接成功后,输出 try ping 192.168.1.20 调试信息:

我们打开另一个终端,输入 ping 192.168.1.20,可以看到 ping 测试验证成功通过。
