本篇总结
在 W6300-EVB-M4 平台上通过 QSPI 接口驱动 W6300,完成网络地址配置、W6300 初始化并 Ping 测试验证连通性。
🔑 MH2457、QSPI、UART调试、硬件TOE引擎
硬件平台:本例程基于 W6300-EVB-M4 开发板运行。
采购推荐:点击前往 WIZnet 官方淘宝店铺 选购 W6300-EVB-M4 开发板
本示例演示 MH2457 通过 QSPI 接口驱动 W6300 的网络初始化流程:定义网络地址信息(MAC/IP/GW/SN/DNS)→ 硬件初始化(串口、GPIO、QSPI)→ W6300 初始化与网络地址设置 → 回读 IP 并通过 PC 端 Ping 测试验证连通性。
前置工具准备
开始本例程前,请确认以下工具已安装:
- WIZ UartTool V1.0:串口调试工具:点击下载
W6300 以太网控制器简介
W6300 是一款嵌入式全硬件双协议栈 TCP/IP 以太网控制器,集成 10/100M MAC 与 PHY,单芯片即可拓展网络连接。
它原生支持 IPv4 / IPv6 双协议栈,涵盖 TCP、UDP、ICMP、ARP、PPPoE 等协议,并支持 Socket 级别双栈通信。内嵌 64KB 片上 SRAM(32KB TX / 32KB RX,支持弹性分配),可同时使用 8 个硬件 Socket。仅需简单的 Socket 编程即可实现以太网应用,比其他嵌入式方案更加快捷简便。
W6300 核心优势
全硬件协议栈无需软件开销,CPU 占用率极低。8 个 Socket 独立工作,支持 IPv4 / IPv6 双栈通信,并提供免套接字指令(ARP、PINGv4、PINGv6 等)用于网络监控与 IPv6 自动配置。
网络地址信息简介
网络地址信息是计算机网络中用于标识和定位设备的数字标识符,通常由 IP 地址、子网掩码、网关地址及 DNS 地址等组成。
| 地址类型 | 说明 | 示例 |
| IP地址 | 唯一标识网络设备的地址,4个点分十进制数(0-255) | 192.168.1.50 |
| 子网掩码 | 划分网络部分和主机部分,1对应网络地址,0对应主机地址 | 255.255.255.0 |
| 网关地址 | 访问不同网络时数据包经过的设备IP(通常是路由器) | 192.168.1.1 |
| DNS地址 | 将域名转换为IP地址的服务器地址 | 8.8.8.8 |
| MAC地址 | 数据链路层唯一标识符,6字节16进制,前3字节为厂商OUI | 00:08:DC:12:22:12 |
注意事项
MAC 地址首字节必须为偶数,奇数则为组播地址。WIZnet 设备的 OUI 前缀为 00 08 DC。IP 地址冲突和 MAC 地址冲突都会导致网络无法通信。
硬件连接与拓扑
请注意:
测试需要 PC 端和 W6300 处于同一网段。
- Micro USB 线连接 DEBUG USB 口到 PC(供电 + 调试串口)
- 网线连接开发板 RJ45 网口 到路由器 LAN 口
- 确保 W6300 与 MH2457 之间的 QSPI 连线正确(CSn、SCK、DATA0~DATA3)
┌─────────────────────────────────┐
│ 路由器(DHCP Server) │
│ 192.168.1.1 │
└────┬──────────────────┬───────────┘
│ │
┌────┴──────┐ ┌────┴──────┐
│ W6300 │ │ PC │
│ TOE引擎 │ │ CMD Ping │
│ IP:静态 │ │ IP: DHCP │
└────┬──────┘ └───────────┘
│ QSPI ↑
┌────┴──────┐ DEBUG USB
│ MH2457 │──────────→ WIZ UartTool
│ MCU │
└───────────┘
网络拓扑:MH2457 通过 QSPI 驱动 W6300,开发板与 PC 在同一局域网内,通过路由器互通
工程结构
工程核心文件如下:
Project/
├── main.c ← 系统入口:串口、GPIO、QSPI 初始化 + user_run()
└── USER/
├── user_main.c/h ← 网络地址定义 + user_run() 主流程
├── wiz_platform.c/h ← 平台适配:debug_usart_init、wizchip_gpio_init、hspi_init
├── wiz_interface.c/h ← W6300 驱动接口:wizchip_initialize、network_init
└── wizchip_conf.h ← WIZnet 配置与 wiz_NetInfo 定义
步骤1:定义网络地址信息
文件:USER/user_main.c
/* network information */
wiz_NetInfo default_net_info = {
.mac = {0x00, 0x08, 0xDC, 0x12, 0x22, 0x12},
.ip = {192, 168, 1, 50},
.gw = {192, 168, 1, 1},
.sn = {255, 255, 255, 0},
.dns = {8, 8, 8, 8},
.ipmode = NETINFO_STATIC_V4,
.dhcp = NETINFO_STATIC
};
使用 wiz_NetInfo 结构体定义 MAC、IP、网关、子网掩码、DNS 地址,并设置 DHCP 模式为静态地址模式(NETINFO_STATIC)。本例使用静态 IP 192.168.1.50,请确保与 PC 处于同一网段。
步骤2:初始化硬件
文件:main.c
debug_usart_init(115200U);
wizchip_gpio_init();
hspi_init();
printf("\r\nMH2457 W6300 QSPI example start\r\n");
user_run();
初始化调试串口(115200)、W6300 相关 GPIO 以及 HSPI(QSPI)接口。初始化完成后打印启动信息并进入 user_run() 应用流程。
MH2457 与 W6300 的 QSPI 引脚连接
W6300 QSPI 与 MH2457 HSPI(GPIOI AF6)连接关系如下:CSn → PI10,SCK → PI9,DATA0 → PI4,DATA1 → PI5,DATA2 → PI6,DATA3 → PI7;RSTn → PA0,INTn → PC0。
步骤3:初始化TOE引擎并检测PHY状态
文件:USER/user_main.c
/* w6300 init */
wizchip_initialize();
wiz_phy_link_check();
wizchip_initialize() 初始化 W6300 的 QSPI 接口和寄存器,wiz_phy_link_check() 通过读取 PHY 寄存器检测物理连接状态,每秒检测一次直到链路建立。
步骤4:初始化 W6300 并设置网络地址
文件:USER/user_main.c | 函数:user_run()
void user_run(void)
{
wiz_NetInfo net_info;
printf("%s Network Install example\r\n", _WIZCHIP_ID_);
wizchip_initialize();
network_init(ethernet_buf, &default_net_info);
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]);
while (1)
{
}
}
wizchip_initialize() 初始化 W6300 的 QSPI 接口和寄存器,network_init() 将网络地址信息设置到 W6300 中。本例使用静态模式,直接将 default_net_info 写入 W6300 寄存器。
步骤5:回读IP地址并打印PING提示
文件:USER/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() 从 W6300 寄存器回读实际设置的网络地址,并打印 Ping 提示。在 PC 端命令行执行 ping 192.168.1.50 即可验证连通性。
如果你想自定义
- 改用 DHCP 动态获取 IP → 在
user_main.c 的 wiz_NetInfo default_net_info 结构体中将 .dhcp 改为 NETINFO_DHCP,并调用 DHCP 流程
- 修改 IP 地址 → 修改
.ip 字段为你所在网段的地址,确保与 PC 同网段
运行验证
打开 WIZ UartTool V1.0,连接 DEBUG USB 对应 COM 口(115200 / 8N1),观察开发板串口输出。典型输出如下:
MH2457 W6300 QSPI example start
W6300 Network Install example
=================================================================
W6300 network configuration : STATIC
MAC : 00:08:DC:12:22:12
IP : 192.168.1.50
Subnet Mask : 255.255.255.0
Gateway : 192.168.1.1
DNS : 8.8.8.8
=================================================================
please try ping 192.168.1.50
确认串口输出正常后,在 PC 端打开命令提示符(CMD),执行 ping 192.168.1.50,应收到 4 包回复,0% 丢包。
WIZ UartTool V1.0 显示 — 网络初始化(静态 IP 配置)
PC 端 ping 192.168.1.50 测试 — 4 包全通,0% 丢包
常见问题
Q: W6300 和软件TCP/IP协议栈有什么区别
W6300 是全硬件协议栈,TCP/UDP/IP 等协议处理由硬件完成,CPU 只需读写 Socket 寄存器即可,占用率极低。软件协议栈(如 lwIP)需要 CPU 运行协议代码,占用大量 RAM 和 CPU 资源。W6300 还提供 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: W6300支持多少个硬件Socket
W6300 支持 8 个独立硬件 Socket,每个 Socket 可以独立配置为 TCP 客户端、TCP 服务器、UDP 或 IPRAW/MACRAW 模式。32KB 片上缓存可在 8 个 Socket 间灵活分配。
总结
本文基于 MH2457 + W6300 QSPI 完成了网络初始化:
- W6300引擎:全硬件双协议栈(IPv4/IPv6)+ MAC + PHY,8 个独立 Socket,32KB 片上 SRAM(16KB TX / 16KB RX),QSPI 吞吐量可达 90Mbps+,All-in-One 以太网方案
- 网络地址:IP(设备标识)、子网掩码(网络划分)、网关(跨网通信)、DNS(域名解析)、MAC(物理地址)
- 初始化流程:定义地址信息 → 硬件初始化(串口/GPIO/QSPI)→ W6300 初始化 → 设置网络地址 → 回读 IP
- DHCP模式:NETINFO_STATIC 静态配置,NETINFO_DHCP 动态获取
- 验证方法:PC 端 Ping W6300 的 IP 地址,需确保同一网段