全部例程

开始使用TOE引擎

W55MH32

更新于 2026年8月19日

本篇总结

在 W55MH32 上实现网络初始化,完成网络地址配置、TOE 引擎初始化、PHY 链路检测并 Ping 测试。

🔑 KEIL MDK、UART调试、硬件TOE引擎

硬件平台:本例程基于 W55MH32L-EVB 开发板运行。

采购推荐:点击前往 WIZnet 官方淘宝店铺 选购 W55MH32L-EVB

前置工具准备

开始本例程前,请确认以下工具已安装:

TCP/IP卸载引擎(TOE)简介

TCP/IP 卸载引擎(TOE)是一个嵌入式全硬件 TCP/IP 以太网控制器,提供更简洁的嵌入式网络接入方案。它集成了 10/100M 以太网数据链路层(MAC)及物理层(PHY),用户使用单芯片即可拓展网络连接。

久经市场考验的 WIZnet 全硬件 TCP/IP 协议栈支持 TCP、UDP、IPv4、ICMP、ARP、IGMP 以及 PPPoE 协议。内嵌 32KB 字节片上缓存以供以太网包处理,用户可同时使用 8 个硬件 Socket 独立通讯。仅需简单的 Socket 编程就能实现以太网应用,比其他嵌入式以太网方案更加快捷简便。

TOE 核心优势

全硬件协议栈无需软件开销,CPU 占用率极低。8 个 Socket 独立工作,支持 WOL 网络唤醒和掉电模式以降低能耗。关于 TOE 的寄存器信息请参考"W55MH32 参考手册"第9章。

网络地址信息简介

网络地址信息是计算机网络中用于标识和定位设备的数字标识符,通常由 IP 地址、子网掩码、网关地址及 DNS 地址等组成。

地址类型说明示例
IP地址唯一标识网络设备的地址,4个点分十进制数(0-255)192.168.1.30
子网掩码划分网络部分和主机部分,1对应网络地址,0对应主机地址255.255.255.0
网关地址访问不同网络时数据包经过的设备IP(通常是路由器)192.168.1.1
DNS地址将域名转换为IP地址的服务器地址8.8.8.8
MAC地址数据链路层唯一标识符,6字节16进制,前3字节为厂商OUI00:08:DC:12:22:12

注意事项

MAC 地址首字节必须为偶数,奇数则为组播地址。WIZnet 设备的 OUI 前缀为 00 08 DC。IP 地址冲突和 MAC 地址冲突都会导致网络无法通信。

硬件连接与拓扑

请注意:

测试需要 PC 端和 W55MH32L 处于同一网段。

  1. Micro USB 线连接 DEBUG USB 口到 PC(供电 + 调试串口)
  2. 网线连接开发板 RJ45 网口 到路由器 LAN 口
┌─────────────────────────────────┐
│ 路由器(DHCP Server) │
│ 192.168.1.1 │
└────┬──────────────────┬───────────┘
│ │
┌────┴──────┐ ┌────┴──────┐
│ W55MH32L │ │ PC │
│ TOE引擎 │ │ CMD Ping │
│ IP:静态 │ │ IP: DHCP │
└───────────┘ └───────────┘
↑ ↑
DEBUG USB ──→ WIZ UartTool
网络拓扑:开发板与 PC 在同一局域网内,通过路由器互通

工程结构

工程位于 SDK 内 1.SDK\ModuleDemo\WZTOE\1.TOE\,核心文件如下:

1.TOE/
├── Project/
│   └── Project.uvprojx       ← Keil 工程文件
└── USER/
    ├── main.c                ← 网络地址定义 + 初始化主流程
    ├── wiz_phy.c/h           ← PHY 链路检测 wiz_phy_link_check()
    ├── network.c/h           ← network_init() 网络地址设置
    ├── uart/
    │   └── bsp_uart.c/h      ← 调试串口 + printf 重定向
    └── delay/
        └── delay.c/h          ← SysTick 毫秒延时

步骤1:定义网络地址信息

文件:USER/main.c


/* network information */
wiz_NetInfo default_net_info = {
    .mac  = {0x00, 0x08, 0xdc, 0x12, 0x22, 0x12},
    .ip   = {192, 168, 1, 30},
    .gw   = {192, 168, 1, 1},
    .sn   = {255, 255, 255, 0},
    .dns  = {8, 8, 8, 8},
    .dhcp = NETINFO_STATIC
};

使用 wiz_NetInfo 结构体定义 MAC、IP、网关、子网掩码、DNS 地址,并设置 DHCP 模式为静态地址模式(NETINFO_STATIC)。本例使用静态 IP 192.168.1.30,请确保与 PC 处于同一网段。

步骤2:初始化硬件

文件:USER/main.c


/* hardware initialization */
rcc_clk_config();
delay_init();
console_usart_init(115200);
tim3_init();

初始化系统时钟、延时、串口(用于打印调试信息)和定时器。串口波特率 115200,用于后续输出网络初始化日志。

步骤3:初始化TOE引擎并检测PHY状态

文件:USER/main.c


/* wiztoe init */
wiz_toe_init();
wiz_phy_link_check();

wiz_toe_init() 初始化 TOE 引擎的 SPI 接口和寄存器,wiz_phy_link_check() 通过读取 PHY 寄存器检测物理连接状态,每秒检测一次直到链路建立:

文件:USER/wiz_phy.c | 函数:wiz_phy_link_check()


void wiz_phy_link_check(void)
{
    uint8_t phy_link_status;
    do
    {
        delay_ms(1000);
        ctlwizchip(CW_GET_PHYLINK, (void *)&phy_link_status);
        if (phy_link_status == PHY_LINK_ON)
        {
            printf("PHY link\r\n");
            wiz_print_phy_info();
        }
        else
        {
            printf("PHY no link\r\n");
        }
    } while (phy_link_status == PHY_LINK_OFF);
}

wiz_phy_link_check() 阻塞等待网线插入及 PHY 链路建立。建立后读取 PHYCFGR 寄存器获知协商的速率和双工模式。W55MH32L PHY 支持 10/100Mbps 自适应,通常协商至 100Mbps 全双工。

ctlwizchip(CW_GET_PHYLINK, ...) — PHY 链路检测

ctlwizchip() 是 WIZnet ioLibrary 的控制函数,CW_GET_PHYLINK 命令读取 PHY 链路状态。返回 PHY_LINK_ON 表示链路已建立,PHY_LINK_OFF 表示未连接。这是所有网络例程的第一步——没有物理链路,后续协议都无法工作。

步骤4:设置网络地址信息

文件:USER/network.c | 函数:network_init()


void network_init(uint8_t *ethernet_buff, wiz_NetInfo *conf_info)
{
    int ret;
    wizchip_setnetinfo(conf_info); // Configuring Network Information
    if (conf_info->dhcp == NETINFO_DHCP)
    {
        ret = wiz_dhcp_process(0, ethernet_buff);
        if (ret == 0)
        {
            conf_info->dhcp = NETINFO_STATIC;
            wizchip_setnetinfo(conf_info);
        }
    }
    print_network_information();
}

network_init() 函数将网络地址信息设置到 TOE 引擎中。若 DHCP 模式为 NETINFO_DHCP,则执行 DHCP 进程获取地址;若为 NETINFO_STATIC 则直接设置静态地址。本例使用静态模式,直接将 default_net_info 写入 TOE 寄存器。

如果你想自定义

  • 改用 DHCP 动态获取 IP → 在 main.cwiz_NetInfo default_net_info 结构体中将 .dhcp 改为 NETINFO_DHCP,详见《DHCP 动态获取地址
  • 修改 IP 地址 → 修改 .ip 字段为你所在网段的地址,确保与 PC 同网段

步骤5:回读IP地址并打印PING提示

文件:USER/main.c


wizchip_getnetinfo(&net_info);
printf("please try ping %d.%d.%d.%d\r\n",
    net_info.ip[0], net_info.ip[1], net_info.ip[2], net_info.ip[3]);

wizchip_getnetinfo() 从 TOE 寄存器回读实际设置的网络地址,并打印 Ping 提示。在 PC 端命令行执行 ping 192.168.1.30 即可验证连通性。

运行验证

打开 WIZ UartTool V1.0,连接 DEBUG USB 对应 COM 口(115200 / 8N1),观察开发板串口输出。典型输出如下:

PHY link
The current Mbtis speed : 100Mbps
The current Duplex Mode : Full-Duplex
=================================================================
 W55MH32 network configuration : STATIC
 MAC         : 00:08:DC:12:22:12
 IP          : 192.168.1.30
 Subnet Mask : 255.255.255.0
 Gateway     : 192.168.1.1
 DNS         : 8.8.8.8
=================================================================
please try ping 192.168.1.30
W55MH32 串口输出 — TOE 引擎网络初始化(PHY 链路检测 + 静态 IP 配置)
W55MH32 串口输出 — TOE 引擎网络初始化(PHY 链路检测 + 静态 IP 配置)

确认串口输出正常后,在 PC 端打开命令提示符(CMD),执行 ping 192.168.1.30,应收到 4 包回复,0% 丢包。

PC 端 ping 192.168.1.30 测试 — 4 包全通,0% 丢包

Ping不通的排查步骤

1. 检查设置地址是否与 PC 同一网段;2. 确认网线连接正确,可尝试 PC 直连;3. 回读 IP、子网掩码、网关寄存器值是否正确;4. 关闭 PC 端防火墙。

常见问题

Q: TOE引擎和软件TCP/IP协议栈有什么区别

TOE 是全硬件协议栈,TCP/UDP/IP 等协议处理由硬件完成,CPU 只需读写 Socket 寄存器即可,占用率极低。软件协议栈(如 lwIP)需要 CPU 运行协议代码,占用大量 RAM 和 CPU 资源。TOE 还提供 8 个独立硬件 Socket,无需软件多路复用。

Q: NETINFO_STATIC 和 NETINFO_DHCP 有什么区别

NETINFO_STATIC 是静态地址模式,IP/网关/子网掩码/DNS 在代码中固定设置。NETINFO_DHCP 是动态地址模式,通过 DHCP 协议从 DHCP 服务器自动获取网络地址信息。DHCP 失败时会自动回退到静态模式。

Q: MAC地址可以随意设置吗

MAC 地址需要保证局域网内唯一。WIZnet 的 OUI 前缀为 00:08:DC,建议使用此前缀。首字节必须为偶数(如 0x00),奇数则为组播地址。MAC 地址冲突会导致网络无法通信。

Q: PHY链路检测一直显示"PHY no link"怎么办

检查网线是否插好、网线是否损坏。如果连接在交换机或路由器上,可尝试 PC 直连 W55MH32。确认 W55MH32 的以太网口 LED 指示灯是否正常(黄色灯亮表示链路建立)。

Q: W55MH32支持多少个硬件Socket

W55MH32 的 TOE 引擎支持 8 个独立硬件 Socket,每个 Socket 可以独立配置为 TCP 客户端、TCP 服务器、UDP 或 IPRAW/MACRAW 模式。32KB 片上缓存可在 8 个 Socket 间灵活分配。

总结

本文基于 W55MH32 硬件 TCP/IP 协议栈完成了网络初始化:

  • TOE引擎:全硬件 TCP/IP 协议栈 + MAC + PHY,8 个独立 Socket,32KB 缓存,All-in-One 以太网方案
  • 网络地址:IP(设备标识)、子网掩码(网络划分)、网关(跨网通信)、DNS(域名解析)、MAC(物理地址)
  • 初始化流程:定义地址信息 → 硬件初始化 → TOE初始化 + PHY检测 → 设置网络地址 → 回读IP
  • DHCP模式:NETINFO_STATIC 静态配置,NETINFO_DHCP 动态获取,失败自动回退静态
  • 验证方法:PC 端 Ping W55MH32 的 IP 地址,需确保同一网段

下载本章例程

我们提供完整的工程文件以及配套开发板,方便你随时测试,快速完成产品开发:

开发环境: Keil MDK5 配套开发板

Andy

W5500 技术支持专家