二十七、W5100S/W5500+RP2040树莓派Pico<iperf 测速示例>

文章目录

  • 1 前言
  • 2 简介
    • 2 .1 什么是网络测速技术?
    • 2.2 网络测速技术的优点
    • 2.3 网络测速技术数据交互原理
    • 2.4 网络测速应用场景
  • 3 WIZnet以太网芯片
  • 4 示例概述以及使用
    • 4.1 流程图
    • 4.2 准备工作核心
    • 4.3 连接方式
    • 4.4 主要代码概述
    • 4.5 结果演示
  • 5 注意事项
  • 6 相关链接

1 前言

  随着人工智能和大数据等技术的不断发展,网络测速技术也可以结合这些技术来进行更精准的测量和优化。例如,通过利用人工智能技术对网络流量进行分析和处理,可以更准确地识别和解决网络问题;通过利用大数据技术对网络测速数据进行存储和分析,可以更全面地了解网络性能和用户需求。

  W5100S/W5500是一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,同时也是一颗工业级以太网控制芯片。本教程将介绍使用测速工具对W5100S/W5500芯片进行测速。

2 简介

2 .1 什么是网络测速技术?

  网络测速技术是一种用于测量网络连接速度和性能的技术。它可以通过发送一定大小和指定时间的数据包来模拟真实的网络传输过程,并计算出网络的速度。同时,在测试过程中也会计算出网络的稳定性和可靠性等因素。

  网络测速技术主要包括Ping测试、下载速度测试和上传速度测试等。通过这些测试,用户可以了解其网络连接的速度和质量,以便采取必要的措施来优化网络性能。

2.2 网络测速技术的优点

  网络测速的优点主要包括:

  1. 实时性和高效性:网络测速可以实时地获取网络的运行状态,从而帮助网络管理员快速定位并解决网络问题。这种高效性十分重要,尤其在大规模网络环境中,能够迅速发现网络拥塞、带宽不足等问题,避免对用户产生不良影响。
  2. 提供客观数据支持:网络测速可以通过收集和分析大量的数据,为网络规划和决策提供客观的数据支持。通过对网络性能的测量和分析,可以了解用户需求、应对可能的网络峰值负载,并做出相应调整和优化。
  3. 优化网络设置:网络测速可以帮助用户了解网络的实时速度和稳定性,从而优化网络设置,提高网络性能。
  4. 监测网络质量:通过定期进行网络测速,用户可以监测网络的质量和稳定性,及时发现并解决网络问题。
  5. 检测网络安全性:网络测速可以帮助用户检测网络的安全性,及时发现并解决网络攻击和病毒等问题。

2.3 网络测速技术数据交互原理

在这里插入图片描述

测试原理是基于标准的TCP/IP协议栈,其工作流程如下:

  1. 客户端向服务器发出请求。
  2. 服务器收到请求后,创建一个数据流,并向客户端发送数据。
  3. 客户端收到数据后,计算数据传输速度、延迟和丢包率等指标。
  4. 测试结束后,客户端将测试结果返回给服务器。
  5. 服务器将测试结果汇总并发送给客户端。

2.4 网络测速应用场景

网络测速的应用场景非常广泛,以下是一些常见的应用场景:

  1. 网络故障排查:当网络出现故障时,网络测速可以帮助技术人员快速定位问题所在,例如测试网络连接的丢包率、延迟等参数,判断是否是网络设备故障或是网络线路问题。
  2. 网络性能评估:网络测速可以对网络性能进行评估,例如测试网络的吞吐量、带宽等参数,了解网络的整体性能水平,帮助技术人员优化网络结构、调整网络设备配置等。
  3. 网络安全监测:网络测速可以帮助监测网络的安全性,例如测试网络的防火墙性能、入侵检测系统(IDS)的性能等,及时发现并解决网络攻击和病毒等问题。
  4. 网络质量监测:网络测速可以监测网络的质量和稳定性,例如测试网络的丢包率、延迟等参数,及时发现并解决网络问题,保证网络的稳定性和可用性。
  5. 网络规划与设计:网络测速可以帮助进行网络规划和设计,例如测试网络的拓扑结构、带宽需求等参数,为新网络的构建提供数据支持。

3 WIZnet以太网芯片

WIZnet 主流硬件协议栈以太网芯片参数对比

ModelEmbedded CoreHost I/FTX/RX BufferHW SocketNetwork Performance
W5100STCP/IPv4, MAC & PHY8bit BUS, SPI16KB4Max.25Mbps
W6100TCP/IPv4/IPv6, MAC & PHY8bit BUS, Fast SPI32KB8Max.25Mbps
W5500TCP/IPv4, MAC & PHYFast SPI32KB8Max 15Mbps
  1. W5100S/W6100 支持 8bit数据总线接口,网络传输速度会优于W5500。
  2. W6100 支持IPv6,与W5100S 硬件兼容,若已使用W5100S的用户需要支持IPv6,可以Pin to Pin兼容。
  3. W5500 拥有比 W5100S更多的 Socket数量以及发送与接收缓存。

4 示例概述以及使用

4.1 流程图

  程序的运行框图如下所示:

在这里插入图片描述

4.2 准备工作核心

软件

  • Visual Studio Code
  • WIZnet UartTool
  • iperf测速工具

硬件

  • W5100SIO模块 + RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板
  • Micro USB 接口的数据线
  • TTL 转 USB
  • 网线

4.3 连接方式

  • 通过数据线连接PC的USB口(主要用于烧录程序,也可以虚拟出串口使用)

  • 通过TTL串口转USB,连接UART0 的默认引脚:

    • RP2040 GPIO0(UART0 TX) <----> USB_TTL_RX
    • RP2040 GPIO1(UART0 RX) <----> USB_TTL_TX
  • 使用模块连接RP2040 进行接线时

    • RP2040 GPIO16 <----> W5100S MISO
    • RP2040 GPIO17 <----> W5100S CS
    • RP2040 GPIO18 <----> W5100S SCK
    • RP2040 GPIO19 <----> W5100S MOSI
    • RP2040 GPIO20 <----> W5100S RST
  • 通过PC和设备都通过网线连接路由器LAN口

4.4 主要代码概述

  我们使用的是WIZnet官方的ioLibrary_Driver库。该库支持的协议丰富,操作简单,芯片在硬件上集成了TCP/IP协议栈,该库又封装好了TCP/IP层之上的协议,我们只需简单调用相应函数即可完成协议的应用。

第一步:velocity_measurement.c文件中加入对应的库文件。

第二步:定义DHCP配置需要的宏。

第三步:网络信息的配置,开启DHCP模式,设置连接的服务器IP和端口号。

第四步:编写定时器回调处理函数,用于 DHCP 1秒嘀嗒定时器处理函数。

第五步:主函数先是定义了一个定时器结构体参数用来触发定时器回调函数,对串口和SPI进行初始化,然后写入W5100S的网络配置参数,初始化DHCP后开始DHCP获取IP,获取到就打印获取到的IP,获取次数超过最大获取次数时就使用静态IP,主循环主要是对TCP服务器进行连接后,然后将数据发送给服务器,最后网络测试工具测速。

#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/binary_info.h"
#include "hardware/spi.h"

#include "wizchip_conf.h"
#include "bsp_spi.h"
#include "loopback.h"
#include "loopback.h" // Use loop test
#include "dhcp.h"     // Use dhcp
#include "socket.h"   // Use socket
#include "string.h"

#define SOCKET_ID 0                      // Socket number
#define SOCKET_DHCP 1                    // Socket number
#define ETHERNET_BUF_MAX_SIZE (1024 * 2) // Send and receive cache size
#define DHCP_RETRY_COUNT 5               // DHCP retry times

/**
 * @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);

/* Network information to be configured. */
wiz_NetInfo net_info = {
    .mac = {0x00, 0x08, 0xdc, 0x1e, 0xed, 0x2e}, // Configured MAC address
    .ip = {192, 168, 1, 10},                     // Configured IP address
    .sn = {255, 255, 255, 0},                    // Configured subnet mask
    .gw = {192, 168, 1, 1},                      // Configured gateway
    .dns = {8, 8, 8, 8},                         // Configured domain address
    .dhcp = NETINFO_DHCP};                       // Configured dhcp model,NETINFO_DHCP:use dhcp; NETINFO_STATIC: use static ip.

wiz_NetInfo get_info;
static uint8_t ethernet_buf[ETHERNET_BUF_MAX_SIZE] = {
    0,
};                                            // Send and receive cache
static uint8_t des_ip[4] = {192, 168, 1, 18}; // Server IP address
static uint16_t des_port = 8080;              // Server port
static uint16_t local_port = 8000;            // Local port
static uint8_t dhcp_get_ip_flag = 0;          // Define the DHCP acquisition flag
uint8_t buffer[2048];
uint8_t buffer_txst[2024] = "1234567890";

int main()
{
    struct repeating_timer timer; // Define the timer structure
    uint16_t len = 0;

    /* MCU init */
    stdio_init_all();              // Initialize the main control peripheral
    wizchip_initialize();          // Initialize the chip interface
    wizchip_setnetinfo(&net_info); // Configure once first

    /*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 tcp server 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)
    {
        switch (getSn_SR(SOCKET_ID))
        {
        case SOCK_INIT:
            connect(SOCKET_ID, des_ip, des_port);
            printf("%d:Try to connect to the %d.%d.%d.%d : %d\r\n", SOCKET_ID, des_ip[0], des_ip[1], des_ip[2], des_ip[3], des_port);
            break;
        case SOCK_ESTABLISHED:
            if (getSn_IR(SOCKET_ID) & Sn_IR_CON)  Socket n interrupt register mask; TCP CON interrupt = connection with peer is successful
            {
                setSn_IR(SOCKET_ID, Sn_IR_CON); // this interrupt should be write the bit cleared to '1'
                printf("%d:Connected to - %d.%d.%d.%d : %d\r\n", SOCKET_ID, des_ip[0], des_ip[1], des_ip[2], des_ip[3], des_port);
            }
            send(SOCKET_ID, buffer_txst, strlen(buffer_txst)); // Data send process (User's buffer -> Destination through H/W Tx socket buffer)
            len = getSn_RX_RSR(SOCKET_ID);

            if (len >= sizeof(buffer)) // Sn_RX_RSR: Socket n Received Size Register, Receiving data length
            {
                recv(SOCKET_ID, buffer, len); // Data Receive process (H/W Rx socket buffer -> User's buffer)
                send(0, buffer, len);
            }
            else if (len > 0)
            {
                len = recv(SOCKET_ID, buffer, len);
                send(SOCKET_ID, buffer, len);
            }

            break;
        case SOCK_CLOSE_WAIT:
            disconnect(SOCKET_ID);
            break;
        case SOCK_CLOSED:
            socket(SOCKET_ID, Sn_MR_TCP, local_port, Sn_MR_ND);
            break;
        }
    }
}

4.5 结果演示

在这里插入图片描述

1.代码编译烧录完成之后,打开WIZnet UartTool串口调试工具,填入参数,按下复位,显示开发板的网络配置信息,并尝试连接服务器。

2.然后打开我们的iperf测速工具,创建服务器,当开发板连接上服务器是串口会打印连接成功,同时向服务器发送数据,然后iperf测速工具开始测速并对速率进行打印。

5 注意事项

  • 安装iperf测速工具需要电脑有java环境,否则打不开软件。
  • 如果想用WIZnet的W5500来实现本章的示例,我们只需修改两个地方即可:

​ (1)在library/ioLibrary_Driver/Ethernet/下找到wizchip_conf.h这个头文件,将_WIZCHIP_ 宏定义修改为W5500。

​ (2)在library下找到CMakeLists.txt文件,将COMPILE_SEL设置为ON即可,OFF为W5100S,ON为W5500。

6 相关链接

WIZnet官网

WIZnet官方库链接

本章例程链接

想了解更多,评论留言哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/141138.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Verilog语法】

Verilog语法 1. Verilog语法1.1 拼接运算符1.2 运算符优先级1.3 注释1.4 关键字1.5 模块结构1.6 结构语句1.7 赋值语句1.8 条件语句1.9 状态机1.10 OSI七层模型 1. Verilog语法 1.1 拼接运算符 1.2 运算符优先级 1.3 注释 1.4 关键字 1.5 模块结构 1.6 结构语句 1.7 赋值语句 …

libusb获取Windows设备实例路径DevicePath

libusb 当前版本&#xff08;1.0.26&#xff09;libusb.h 头文件提供的接口似乎没有办法获取 Windows 平台相关的设备实例路径&#xff0c;其形如&#xff1a; \\?\usb#vid_04ca&pid_7070#5&20d34a76&0&6#{a5dcbf10-6530-11d2-901f-00c04fb951ed} 只是提供了…

2023测试职业生涯必看系列:手写web自动化测试框架教程 涵盖框架源码+视频教程以及搭建流程

前言 ​ 测试行业现在70%是以手工测试为主&#xff0c;那么只有20%是自动化测试&#xff0c;剩下的10%是性能测试。 有人可能会说&#xff0c;我现在做手工&#xff0c;我为什么要学自动化呢&#xff1f;我去学性能更好性能的人更少&#xff1f; 其实&#xff0c;性能的要求比…

openssh升级9.3p2

openssh升级9.3p2 openssh-rpms目录安装编译其他机器使用 将生成的rpm包传入响应服务器 openssh-rpms目录 github上有就是总是连接不上存百度网盘了 安装编译 unzip openssh-rpms-main.zip cd openssh-rpms-main/ yum -y groupinstall "Development Tools" yum -…

零基础快速上手STM32开发(手把手保姆级教程)

零基础快速上手STM32开发&#xff08;手把手保姆级教程&#xff09; 1. 前言 作为一名嵌入式工程师&#xff0c;STM32 是必须要学习的一款单片机&#xff0c;同时这款单片机资料足够多&#xff0c;而且比较简单&#xff0c;非常适合初学者入门。 STM32 是一款由 STMicroelec…

数据结构 1、基本概念 动态数组实现

一、大O表示法 判断一个算法的效率 难点 二、线性表 1.定义 2.数学定义 线性表是具有相同类型的n&#xff08;n>0&#xff09;个数据元素的有限序列&#xff08;a0,a1,a2,...,an&#xff09;,ai是表项&#xff0c;n是表长度 3.性质 4.线性表的基本操作 1.创建线性表 2…

Redis集群,你真的学会了吗?

目录 1、为什么引入集群 1.1、先来了解集群是什么 1.2、哨兵模式的缺陷 引入集群解决了什么问题 1.3、使用集群&#xff0c;如何存储数据 2、三种主流的分片方式【经典面试题】 2.1、哈希求余算法 2.1.1、哈希求余算法的介绍 2.1.2、哈希求余算法如何扩容 2.2、一致性…

No193.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

(只需三步)虚拟机上vm的ubuntu不能联上网怎么办

第一步&#xff1a;重启虚拟网络适配器 第二步&#xff1a;删掉网络适配器&#xff0c;重新添加 第三步&#xff1a;重启虚拟机网络服务器 sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service network-manager start 再打…

eNSP-打开华为USG6000V1防火墙web管理页面方法

一、本地打开防火墙web管理页面 1.先在ensp中启动USG6000V1防火墙&#xff0c;启动后&#xff0c;需要输入原始username和password&#xff08;username&#xff1a;admin&#xff0c;password&#xff1a;Admin123&#xff09;&#xff0c;并修改原始密码后&#xff0c;才能配…

由浅入深学习统计学 -集中趋势的量度

由浅入深学习统计学 -集中趋势的量度 均值 &#xff08;通俗来说是平均数&#xff09; 计算公式 均值在对称数据中才有参考性。 异常数据会导致出现&#xff0c;向左偏移或者向右偏移 中位数 - &#xff08;也是属于平均数的一种&#xff09; 当偏移数据和异常数据使得均值产…

大手笔!吴恩达一口气开放了 3 个 AIGC 教程。。

一个月前&#xff0c;DeepLearning.ai 创始人吴恩达与 OpenAI 开发者 Iza Fulford 联手推出了一门面向开发者的技术教程&#xff1a;ChatGPT 提示工程。 该教程总共分为 9 个章节&#xff0c;总一个多小时&#xff0c;里面主要涵盖&#xff1a;提示词最佳实践、评论情感分类、…

Centos7安装Jenkins

Jenkins官方网址&#xff1a;https://www.jenkins.io/zh/ 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld && iptables -Fsed -i s/enforcing/disabled/ /etc/selinux/config && setenforce 0安装JDK 检索JDK可用包 yum sear…

威海广泰-002111 三季报分析(20231109)

威海广泰-002111 基本情况 公司名称&#xff1a;威海广泰空港设备股份有限公司 A股简称&#xff1a;威海广泰 成立日期&#xff1a;2002-08-30 上市日期&#xff1a;2007-01-26 所属行业&#xff1a;专用设备制造业 周期性&#xff1a;0 主营业务&#xff1a;航空产业、消防产业…

错误:FUNCTION simple_notebook.count does not exist.解决方法

0 引入问题 小王&#xff1a;你这个数据有问题啊&#xff0c;有时候还会报错 小腾&#xff1a;怎么会有问题呢&#xff0c;代码写的一点毛病也没有 小王&#xff1a;没问题怎么会报错&#xff0c;你赶紧看看&#xff0c;项目上线甲方看到了报给老板咱俩就寄了 小腾&#xff1a…

基于LangChain+ChatGLM2-6B+embedding构建行业知识库

目的&#xff1a;最近在探索大模型本地化部署知识库实现行业解决方案&#xff0c;安装过程记录&#xff0c;分享给需要的同学&#xff0c;安装前确定好各组件的版本非常重要&#xff0c;避免重复安装走老路。 经过查阅大量资料&#xff0c;目前可以分为以下两种方案 方案一&am…

【npm 错误】:npm ERR! code ERESOLVE、npm ERR! ERESOLVE could not resolve问题

用过npm的小伙伴都会有这么一个情况出现&#xff0c;就是npm install /npm install xxxx 会出现改一连串的错误&#xff0c;如下&#xff1a; 解决办法&#xff1a; 只要在npm install后面加上--legacy-peer-deps就可以解决问题,安装插件也一样 npm install --legacy-peer-dep…

二、数据运营:B-O价值模型

B - O 价值模型&#xff0c;即 Business - Operation 模型&#xff0c;业务一运营模型。这是一个非常成熟的概念&#xff0c;其变体 BOSS 系统&#xff0c;即 BSS 业务支撑系统和 OSS 运营支撑系统已经在通信运营上使用20多年之久。 B - O 价值模型试图建立起一种通用的业务经…

学习网络编程No.9【应用层协议之HTTPS】

引言&#xff1a; 北京时间&#xff1a;2023/10/29/7:34&#xff0c;好久没有在周末早起了&#xff0c;该有的困意一点不少。伴随着学习内容的深入&#xff0c;知识点越来越多&#xff0c;并且对于爱好刨根问底的我来说&#xff0c;需要了解的知识就像一座大山&#xff0c;压得…

高级运维学习(十六)Prometheus 监控

Prometheus概述 Prometheus是一个开源系统监控和警报工具包&#xff0c;最初由 SoundCloud构建。也是一款监控软件&#xff0c;也是一个时序数据库。Prometheus 将其指标收集并存储为时间序列数据&#xff0c;即指标信息与记录时的时间戳以及称为标签的可选键值对一起存储。主…