W5300网络性能测试

使用W5300 TOE Shield测试W5300网络性能。

转发: W5300 Network Performance Test (wiznet.io)


项目介绍

本文档指导使用内置 W5300 - W5300 TOE Shield 的 WIZnet 以太网产品进行代码优化和网络性能测试的一系列流程。

我将使用 WIZnet 生产的 W5300-TOE-C 作为 W5300 TOE Shield 的示例。

1. 硬件准备

W5300 TOE Shield 是一款能够与 W5300 和 ST 的 Cortex MCU 进行高速总线通信的板。

更多详细信息可以在下面的链接中找到:

W5300 TOE Shield 是一款可以安装在 STM32 Nucleo-144 板上的板。

如果没有 STM32 Nucleo-144 板,则无法执行工作,目前支持 NUCLEO-F207ZG、NUCLEO-F429ZI、NUCLEO-F439ZI、NUCLEO-F722ZE、NUCLEO-F756ZG 和 NUCLEO-F767ZI 板。

由于重叠使用 FMC(灵活内存控制器)数据引脚来控制 W5300 TOE Shield 内置的 W5300 和 STM32 Nucleo-144 板的 ST-LINK 引脚,因此 ST-LINK 引脚发生了变化。

  • STLK_RX[STM32F103CBT6_PA3] : PD8 → PC10
  • STLK_TX[STM32F103CBT6_PA2] : PD9 → PC11

因此,为了使用STM32 Nucleo-144板的ST-LINK,需要对W5300 TOE Shield和STM32 Nucleo-144板进行少量设置。

① 从 STM32 Nucleo-144 板顶部拆下 SB5 和 SB6。

② 将W5300 TOE Shield 和STM32 Nucleo-144 板结合在一起,用跳线连接W5300 TOE Shield 的PC10、PC11 和STM32 Nucleo-144 板顶部的CN5 TX、RX。

  • W5300 TOE Shield : PC10 - STM32 Nucleo-144 board : RX
  • W5300 TOE Shield : PC11 - STM32 Nucleo-144 board : TX

我用的是NUCLEO-F429ZI,所以请参考一下, 按照以下步骤控制W5300 TOE Shield、固件上传和运行。

① 将 W5300 TOE Shield 与 STM32 Nucleo-144 板组合。

② 将以太网线连接到 W5300 TOE Shield 以太网端口。

③ 使用 5 针 micro USB 电缆将 STM32 Nucleo-144 板连接到台式机或笔记本电脑。

2. 软件准备

网络性能测试需要使用以下串口终端程序和网络性能测试工具,请从以下链接下载并安装。

我用的是AX2,所以请参考一下。

3. 时钟配置

为了发挥 NUCLEO-F429ZI 的最大性能,STM32F429ZI 内置 NUCLEO-F429ZI 的时钟设置为 180MHz,这是最大时钟。

4. 源码优化

为了发挥最大性能,应该进行优化,不要在发送/接收部分执行不必要的例程。

#include <stdint.h>

#include "wizchip_conf.h"
#include "w5x00_bus.h"

(...)

void WIZCHIP_WRITE(uint32_t AddrSel, uint16_t wb)
{
#if 1
  _W5300_DATA(AddrSel) = wb;
#else
  WIZCHIP_CRITICAL_ENTER();
  WIZCHIP.CS._select();

#if ((_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_))
#if (_WIZCHIP_IO_BUS_WIDTH_ == 8)
  WIZCHIP.IF.BUS._write_data(AddrSel, (uint8_t)(wb >> 8));
  WIZCHIP.IF.BUS._write_data(WIZCHIP_OFFSET_INC(AddrSel, 1), (uint8_t)wb);
#elif (_WIZCHIP_IO_BUS_WIDTH_ == 16)
  WIZCHIP.IF.BUS._write_data(AddrSel, wb);
#else
#error "Abnoraml _WIZCHIP_IO_BUS_WIDTH_. Should be 8 or 16"
#endif
#elif ((_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_))
#if (_WIZCHIP_IO_BUS_WIDTH_ == 8)
  WIZCHIP.IF.BUS._write_data(IDM_AR, (uint8_t)(AddrSel >> 8));
  WIZCHIP.IF.BUS._write_data(WIZCHIP_OFFSET_INC(IDM_AR, 1), (uint8_t)AddrSel);
  WIZCHIP.IF.BUS._write_data(IDM_DR, (uint8_t)(wb >> 8));
  WIZCHIP.IF.BUS._write_data(WIZCHIP_OFFSET_INC(IDM_DR, 1), (uint8_t)wb);
#elif (_WIZCHIP_IO_BUS_WIDTH_ == 16)
  WIZCHIP.IF.BUS._write_data(IDM_AR, (uint16_t)AddrSel);
  WIZCHIP.IF.BUS._write_data(IDM_DR, wb);
#else
#error "Abnoraml _WIZCHIP_IO_BUS_WIDTH_. Should be 8 or 16"
#endif
#else
#error "Unknown _WIZCHIP_IO_MODE_ in W5300. !!!"
#endif

  WIZCHIP.CS._deselect();
  WIZCHIP_CRITICAL_EXIT();
#endif
}

uint16_t WIZCHIP_READ(uint32_t AddrSel)
{
#if 1
  return _W5300_DATA(AddrSel);
#else
  uint16_t ret;

  WIZCHIP_CRITICAL_ENTER();
  WIZCHIP.CS._select();

#if ((_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_))
#if (_WIZCHIP_IO_BUS_WIDTH_ == 8)
  ret = (((uint16_t)WIZCHIP.IF.BUS._read_data(AddrSel)) << 8) |
        (((uint16_t)WIZCHIP.IF.BUS._read_data(WIZCHIP_OFFSET_INC(AddrSel, 1))) & 0x00FF);
#elif (_WIZCHIP_IO_BUS_WIDTH_ == 16)
  ret = WIZCHIP.IF.BUS._read_data(AddrSel);
#else
#error "Abnoraml _WIZCHIP_IO_BUS_WIDTH_. Should be 8 or 16"
#endif
#elif ((_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_))
#if (_WIZCHIP_IO_BUS_WIDTH_ == 8)
  WIZCHIP.IF.BUS._write_data(IDM_AR, (uint8_t)(AddrSel >> 8));
  WIZCHIP.IF.BUS._write_data(WIZCHIP_OFFSET_INC(IDM_AR, 1), (uint8_t)AddrSel);
  ret = (((uint16_t)WIZCHIP.IF.BUS._read_data(IDM_DR)) << 8) |
        (((uint16_t)WIZCHIP.IF.BUS._read_data(WIZCHIP_OFFSET_INC(IDM_DR, 1))) & 0x00FF);
#elif (_WIZCHIP_IO_BUS_WIDTH_ == 16)
  WIZCHIP.IF.BUS._write_data(IDM_AR, (uint16_t)AddrSel);
  ret = WIZCHIP.IF.BUS._read_data(IDM_DR);
#else
#error "Abnoraml _WIZCHIP_IO_BUS_WIDTH_. Should be 8 or 16"
#endif
#else
#error "Unknown _WIZCHIP_IO_MODE_ in W5300. !!!"
#endif

  WIZCHIP.CS._deselect();
  WIZCHIP_CRITICAL_EXIT();
  return ret;
#endif
}

5. 设置示例

我使用环回示例来测试网络性能。

为了测试网络性能,需要在代码中进行一些小的设置。

① 设置FMC 时序配置。

设置 FMC 时序配置以使用“W5300-TOE-C/Projects/NUCLEO-F429ZI/Core/Src/”目录中 FMC“main.c”的最大速度。

Timing.AddressSetupTime = 1;
Timing.AddressHoldTime = 1;
Timing.DataSetupTime = 6;
Timing.BusTurnAroundDuration = 0;
Timing.CLKDivision = 2;
Timing.DataLatency = 2;
Timing.AccessMode = FMC_ACCESS_MODE_A;

② 选择演示应用程序。

要运行 Loopback 示例,您必须选择“W5300-TOE-C/Examples/”目录中“w5x00_demo.h”中的演示应用程序。

取消注释 APP_LOOPBACK 并注释其余定义的演示应用程序宏。

// ----------------------------------------------------------------------------------------------------
// The application you wish to use should be uncommented
// ----------------------------------------------------------------------------------------------------
//#define APP_DHCP
//#define APP_DNS
//#define APP_HTTP_SERVER
//#define APP_MQTT_PUBLISH
//#define APP_MQTT_SUBSCRIBE
//#define APP_MQTT_PUBLISH_SUBSCRIBE
//#define APP_SNTP
//#define APP_TCP_CLIENT_OVER_SSL
#define APP_LOOPBACK
// ----------------------------------------------------------------------------------------------------

③ 设置网络配置。

在“W5300-TOE-C/Projects/NUCLEO-F429ZI/Core/Src/”目录中的“main.c”中设置网络配置,例如 IP。

wiz_NetInfo net_info =
      {
          .mac = {0x00, 0x08, 0xDC, 0x12, 0x34, 0x56}, // MAC address
          .ip = {192, 168, 11, 2},                     // IP address
          .sn = {255, 255, 255, 0},                    // Subnet Mask
          .gw = {192, 168, 11, 1},                     // Gateway
          .dns = {8, 8, 8, 8},                         // DNS server
#ifdef APP_DHCP
          .dhcp = NETINFO_DHCP                         // Dynamic IP
#else
          .dhcp = NETINFO_STATIC                       // Static IP
#endif
      };

④ 设置环回配置。

在“W5300-TOE-C/Examples/loopback/”目录中的“w5x00_loopback.c”中设置环回服务器端口号。

#define PORT_LOOPBACK 5000

6. 构建和下载

① 完成 Loopback 示例配置后,在您使用的 IDE 中构建。

② 构建完成后,将固件下载到 STM32 Nucleo-144 板。

7. 网络性能测试

① 使用 Tera Term 连接到 STM32 Nucleo-144 板的串行 COM 端口。

② 重置主板。

③ 如果Loopback示例在STM32 Nucleo-144板上工作正常,可以看到STM32 Nucleo-144板的网络信息,并且Loopback服务器已打开。

④ 运行AX2,并初始化tick。

⑤ 使用 AX2 TCP 客户端连接到开放环回服务器。 连接环回服务器时,需要输入的是步骤5中配置的IP,端口默认为5000。

⑥ 连接后,如果向环回服务器发送数据,则可以看到正在测量的网络性能。

我发现吞吐量约为 60 ~ 62Mbps。

文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值