W55MH32-iperf3测速
更新于 2026年2月5日
iperf3 测试工具简介
iperf3 是跨平台、开源免费的专业网络性能测试工具,支持 TCP/UDP 协议,可精准测量带宽、丢包率等核心指标,通过简单命令行即可启动测试,支持 Windows、Linux 操作系统,并可与 W55MH32 嵌入式芯片进行数据交互,能直观反映嵌入式以太网设备通信性能,为硬件验证、固件优化提供可靠量化数据,是网络调试与性能评估的高效工具。
iperf3特点
双协议速率采集:支持 TCP、UDP 协议测试,可精准测量带宽吞吐率。
轻量易用高效:支持 Windows、Linux、Mac 等桌面系统,同时适配 ARM/STM32 等嵌入式平台,完美契合嵌入式以太网设备性能测试场景。
跨平台兼容:无图形化冗余操作,仅通过简单命令行指令即可启动测试,无需复杂配置,新手也能快速上手完成测试。
开源精准可靠:基于 BSD 开源协议免费使用,无版权限制,测试结果贴合实际网络传输场景,为网络调试、硬件验证提供量化数据支撑。
影响速率的几点原因
MCU主频
Socket缓存大小
单次传输数据长度
以太网测数流程
1.打开iperf3,例程文件夹里有程序

2.进入文件夹,在上方地址栏输入cmd,打开命令行窗口

3.目前已经打开iperf3文件夹的cmd窗口

4.接下来我们配置W55MH32端
实现过程
接下来,我们在W55MH32上实现以太网测速功能。
步骤1:设置W55MH32和电脑的基本网络参数,使其处于同一网段内
/* network information */
wiz_NetInfo default_net_info = {
.mac = {0x00, 0x08, 0xdc, 0x12, 0x22, 0x12}, //User-defined MAC address
.ip = {192, 168, 2, 30},
.gw = {192, 168, 2, 1},
.sn = {255, 255, 255, 0},
.dns = {8, 8, 8, 8},
.dhcp = 1
};
uint8_t ethernet_buf_tx[ETHERNET_BUF_MAX_SIZE] = {0};
uint8_t ethernet_buf_rx[ETHERNET_BUF_MAX_SIZE] = {0};
uint8_t dest_ip[4] = {192, 168, 2, 44};
uint16_t dest_port = 8080;
步骤2:初始化socket缓存
uint8_t tx_size[_WIZCHIP_SOCK_NUM_] = {8, 8, 0, 0, 0, 0, 0, 0};
uint8_t rx_size[_WIZCHIP_SOCK_NUM_] = {8, 8, 0, 0, 0, 0, 0, 0};步骤3:主循环
while (1)
{
stats_init(&stats, 1000);
socket_status = getSn_SR(SOCKET_CTRL);
if (socket_status == SOCK_ESTABLISHED)
{
handle_param_exchange(SOCKET_CTRL, &reverse, &udp);
handle_create_streams(SOCKET_CTRL, udp, remote_ip, &remote_port);
start_iperf_test(SOCKET_CTRL, SOCKET_DATA, &stats, reverse, udp, remote_ip, &remote_port);
close(SOCKET_DATA);
disconnect(SOCKET_CTRL);
}
else if (socket_status == SOCK_CLOSE_WAIT)
{
disconnect(SOCKET_CTRL);
}
else if (socket_status == SOCK_CLOSED)
{
socket(SOCKET_CTRL, Sn_MR_TCP, PORT_IPERF, Sn_MR_ND);
listen(SOCKET_CTRL);
printf("The iperf3 test is ready. Please enter the following command for testing:\r\n");
printf("The iperf3 test is ready. Please enter the following command for testing:\r\n");
printf("TCP RX: iperf3 -c %d.%d.%d.%d -p 5007\r\n",net_info.ip[0],net_info.ip[1],net_info.ip[2],net_info.ip[3]);
printf("TCP TX: iperf3 -c %d.%d.%d.%d -p 5007 -R\r\n",net_info.ip[0],net_info.ip[1],net_info.ip[2],net_info.ip[3]);
printf("UDP RX: iperf3 -c %d.%d.%d.%d -p 5007 -u -b 100M -l 4000\r\n",net_info.ip[0],net_info.ip[1],net_info.ip[2],net_info.ip[3]);
printf("UDP TX: iperf3 -c %d.%d.%d.%d -p 5007 -u -b 100M -R\r\n",net_info.ip[0],net_info.ip[1],net_info.ip[2],net_info.ip[3]);
}
}
}核心代码:接收前序协商的测试参数(TCP/UDP/ 接收 / 发送),通过独立的控制 / socket完成测速数据的高速收发,实时统计传输字节数、吞吐量等核心数据,响应客户端启停指令,最终将标准化测速结果回传客户端,是实现网络速率精准测试的核心环节。
void start_iperf_test(uint8_t socket_ctrl, uint8_t socket_data, Stats *stats, bool reverse, bool udp, uint8_t *remote_ip, uint16_t *remote_port)
{
bool running = true;
uint8_t cmd = 0;
uint32_t pack_len = 0;
uint16_t sent_size, recv_size;
printf("[iperf] Starting data stream test...\n");
// Start test
cmd = TEST_START;
send(socket_ctrl, &cmd, 1);
// Running test
cmd = TEST_RUNNING;
send(socket_ctrl, &cmd, 1);
stats_start(stats);
while (running)
{
if (getSn_RX_RSR(SOCKET_CTRL) > 0)
{
recv(SOCKET_CTRL, &cmd, 1);
if (cmd == TEST_END)
{
printf("[iperf] TEST_END command received. Stopping test...\n");
running = false;
break;
}
}
if (reverse)
{
if(udp)
{
sent_size = sendto(socket_data, ethernet_buf_tx, ETHERNET_BUF_MAX_SIZE, remote_ip, *(remote_port));
}
else
{
sent_size = send(socket_data, ethernet_buf_tx, ETHERNET_BUF_MAX_SIZE / 2);
}
stats_add_bytes(stats, sent_size);
}
else
{
getsockopt(socket_data, SO_RECVBUF, &pack_len);
if (pack_len > 0)
{
if(udp)
{
recv_size = recvfrom(socket_data, (uint8_t *)ethernet_buf_rx, ETHERNET_BUF_MAX_SIZE, remote_ip, remote_port); // more fast
}
else
{
recv_size = recv(socket_data, (uint8_t *)ethernet_buf_rx, ETHERNET_BUF_MAX_SIZE); // more fast
}
stats_add_bytes(stats, recv_size);
}
else if (pack_len == 0)
{
stats_update(stats, false);
}
else
{
printf("[iperf] Error during data reception\n");
break;
}
}
stats_update(stats, false);
}
stats_stop(stats);
exchange_results(SOCKET_CTRL, stats);
}运行结果
1.烧录例程运行后,首先进行了PHY链路检测,然后打印网络地址信息,最后打印iperf3命令行。
注意:此时要关闭防火墙。

2.接着我们把打印出来的第一条指令iperf3 -c 192.168.2.30 -p 5007复制到电脑的命令行窗口,然后点击回车,开始进行TCP接收测试。此时可以看到命令行窗口和串口显示器上都打印出了测试结果,测试结果显示W55MH32的TCP接收速率约为27.9Mbps。

3.接着我们把打印出来的第二条指令iperf3 -c 192.168.2.30 -p 5007 -R复制到电脑的命令行窗口,然后点击回车,开始进行TCP发送测试。此时可以看到命令行窗口和串口显示器上都打印出了测试结果,测试结果显示W55MH32的TCP发送速率约为22.8Mbps。

4.然后我们把打印出来的第三条指令iperf3 -c 192.168.2.30 -p 5007 -u -b 100M复制到电脑的命令行窗口,然后点击回车,开始进行UDP接收测试。此时可以看到命令行窗口和串口显示器上都打印出了测试结果,测试结果显示W55MH32的UDP接收速率约为21.8Mbps。

5.最后我们把打印出来的第四条指令iperf3 -c 192.168.2.30 -p 5007 -u -b 100M -R -l 8192复制到电脑的命令行窗口,然后点击回车,开始进行UDP发送测试。此时可以看到命令行窗口和串口显示器上都打印出了测试结果,测试结果显示W55MH32的UDP发送速率约为24.5Mbps。

总结
本文以 W55MH32 芯片为核心,详解了通过 iperf3 工具开展以太网测速的实操方案:涵盖 iperf3 工具特性、测速关键影响因素,以及嵌入式端网络配置、代码实现、命令行测试等核心步骤。实测验证了 W55MH32 在 TCP/UDP 协议下的收发速率表现,所提供的完整例程与测试流程,可高效支撑 W55MH32 以太网性能验证与调试优化。