全部例程

W55MH32设置PHY模式

W55MH32

更新于 2026年9月24日

本篇总结

在 W55MH32 上实现 PHY 模式的运行时切换,支持 100M 全双工、10M 半双工、自动协商和掉电模式,掉电模式可降低功耗。

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

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

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

本示例演示如何在 W55MH32 芯片上配置 PHY 工作模式,包括 100Mbps 全双工、10Mbps 半双工以及掉电模式。通过设置 PHY 寄存器(PHYCFGR)的相关位域,可灵活切换链路速率与功耗状态,满足不同应用场景下的网络通信需求。

前置工具准备

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

PHY工作模式简介

W55MH32 的 PHY 工作模式支持两种配置方式:通过 PMODE 管脚进行硬件配置,或通过 PHYCFGR 寄存器的 OPMDC 位域(5:3位)进行软件配置。PMODE 管脚配置仅在初次上电时生效,软件配置后将以软件配置的模式为准,可在运行时动态切换。PHY 模式可配置为 10Mbps(全双工/半双工)、100Mbps(全双工/半双工)、全功能自动协商以及掉电模式,默认为全功能自动协商模式。

应用上,高速传输场景设为 100Mbps 全双工以获得最佳性能;不使用 TOE 引擎时设为掉电模式,可有效节省功耗。下表列出了所有支持的 PHY 工作模式:

模式速率特点
100BT全双工100Mbps数据双向同时传输,效率和带宽利用率最高
100BT半双工100Mbps同一时刻单方向传输,不能同时双向
10BT全双工10Mbps低速场景,双向同时传输
10BT半双工10Mbps低速低功耗,单方向传输
自动协商自适应根据对端接口自动选择最佳速率和模式
掉电模式-TOE引擎停止工作,需复位才能恢复

W55MH32 的优势

W55MH32 的 PHY 配置通过 ctlwizchip() API 统一管理,用户无需直接操作寄存器。软件配置优先级高于硬件管脚配置,支持运行时动态切换模式,便于根据应用场景灵活调整网络性能与功耗。

硬件连接与拓扑

请注意:

测试需要 PC 端和 W55MH32 处于同一网段,切换 PHY 模式后需重新验证链路连通性。掉电模式下设备无法 ping 通,属于正常现象。

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

工程结构

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

PHY设置/
├── Project/
│   └── Project.uvprojx       ← Keil 工程文件
└── USER/
    ├── main.c                ← 初始化 + PHY 模式设置演示
    ├── wiz_interface/
    │   ├── wiz_interface.c   ← PHY 检测 / 网络初始化
    │   └── wiz_interface.h
    └── uart/
        ├── bsp_uart.c        ← 调试串口 + printf 重定向
        └── bsp_uart.h

通过 ctlwizchip(CW_SET_PHYCONF, &phy_conf) 函数设置 PHY 模式,通过 ctlwizchip(CW_GET_PHYCONF, &get_conf) 回读配置验证。掉电模式通过 wizphy_setphypmode(PHY_POWER_DOWN) 设置。

步骤1:设置为100Mbps全双工

文件:USER/main.c。首先将 PHY 配置为软件控制模式(PHY_CONFBY_SW),设置为手动配置(PHY_MODE_MANUAL),然后指定 100Mbps 全双工。通过 ctlwizchip(CW_SET_PHYCONF) 写入配置,再用 ctlwizchip(CW_GET_PHYCONF) 回读验证。

phy_conf.by     = PHY_CONFBY_SW;   /* 软件配置 */
phy_conf.mode   = PHY_MODE_MANUAL; /* 用户手动配置 */
phy_conf.duplex = PHY_DUPLEX_FULL; /* 全双工 */
phy_conf.speed  = PHY_SPEED_100;   /* 100Mbps */

ctlwizchip(CW_SET_PHYCONF, &phy_conf); /* 设置PHY配置 */
ctlwizchip(CW_GET_PHYCONF, &get_conf); /* 回读验证 */

printf("The current Mbtis speed : %d\r\n", get_conf.speed == PHY_SPEED_100 ? 100 : 10);
printf("The current Duplex Mode : %s\r\n", get_conf.duplex == PHY_DUPLEX_HALF ? "Half-Duplex" : "Full-Duplex");

配置关键:PHY_CONFBY_SW 表示由软件控制 PHY 配置(而非 PMODE 管脚),PHY_MODE_MANUAL 表示用户手动指定速率和双工模式。设置后立即回读 get_conf 验证配置是否生效,串口输出 "The current Mbtis speed : 100" 和 "The current Duplex Mode : Full-Duplex"。

100M全双工优势

100Mbps 全双工模式允许数据同时双向传输,理论吞吐量是半双工的两倍,是 W55MH32 性能最佳的模式,适合高速数据传输场景。

步骤2:设置为10Mbps半双工

文件:USER/main.c。将 PHY 速度改为 10Mbps(PHY_SPEED_10),双工模式改为半双工(PHY_DUPLEX_HALF),其余配置不变。同样通过回读验证配置是否生效。

phy_conf.speed  = PHY_SPEED_10;    /* 10Mbps */
phy_conf.duplex = PHY_DUPLEX_HALF; /* 半双工 */

ctlwizchip(CW_SET_PHYCONF, &phy_conf);
ctlwizchip(CW_GET_PHYCONF, &get_conf);

printf("The current Mbtis speed : %d\r\n", get_conf.speed == PHY_SPEED_100 ? 100 : 10);
printf("The current Duplex Mode : %s\r\n", get_conf.duplex == PHY_DUPLEX_HALF ? "Half-Duplex" : "Full-Duplex");

切换到 10Mbps 半双工后,串口输出 "The current Mbtis speed : 10" 和 "The current Duplex Mode : Half-Duplex"。半双工模式下同一时刻只能单方向传输数据,且需要处理碰撞问题,吞吐量较低。该模式适用于低速场景或与只支持 10Mbps 半双工的对端设备通信。

步骤3:设置为掉电模式

文件:USER/main.c。通过 wizphy_setphypmode(PHY_POWER_DOWN) 将 PHY 设置为掉电模式,停止 TOE 引擎工作以降低功耗。通过读取 PHYCFGR 寄存器验证是否进入掉电模式。

wizphy_setphypmode(PHY_POWER_DOWN); /* 掉电模式 */

printf("The current phy is : %s\r\n",
    (getPHYCFGR() & PHYCFGR_OPMDC_PDOWN) ?
    "power down mode" : "normal mode");
printf("PHY is in power down state and cannot be ping reply.\r\n");

掉电模式下串口输出 "The current phy is : power down mode",随后打印 "PHY is in power down state and cannot be ping reply."。此时 TOE 引擎停止工作,网络通信完全中断,PC 端 ping 设备将 100% 丢包。该模式适用于设备待机或不需要网络功能的场景,可显著降低功耗。

掉电模式注意事项

  • 掉电模式下 TOE 引擎停止工作,无法进行网络通信(ping 不通)
  • 恢复正常工作状态必须重新复位 TOE 引擎,无法通过软件直接恢复
  • 该模式适用于设备待机或不需要网络功能的低功耗场景
  • PHYCFGR_OPMDC_PDOWN 位用于检测当前是否处于掉电模式

运行验证

烧录例程运行后,首先进行 PHY 链路检测和网络地址信息打印,然后依次设置 PHY 为 100Mbps 全双工、10Mbps 半双工、掉电模式。打开 WIZ UartTool V1.0,连接 DEBUG USB 对应 COM 口(115200 / 8N1),预期串口输出如下:

W55MH32 Low Power example
PHY link
The current Mbtis speed : 100Mbps
The current Duplex Mode : Full-Duplex
DHCP running
DHCP success!
====================================================================================================
 W55MH32 network configuration : DHCP

 MAC         : 00:08:DC:00:0E:9A
 IP          : 192.168.1.6
 Subnet Mask : 255.255.255.0
 Gateway     : 192.168.1.1
 DNS         : 192.168.1.1
====================================================================================================

setting phy 100M and full-duplex mode
The current Mbtis speed : 100
The current Duplex Mode : Full-Duplex
setting phy 10M and half-duplex mode
The current Mbtis speed : 10
The current Duplex Mode : Half-Duplex
setting phy low power mode
The current phy is : power down mode
PHY is in power down state and cannot be ping reply.

同时在 PC 端使用 CMD ping 测试设备连通性,各模式测试结果如下:

  • 100Mbps 全双工:0% 丢包
  • 10Mbps 半双工:可能出现丢包
  • 掉电模式:100% 丢包
CMD ping 192.168.1.6 — 100Mbps 全双工(0% 丢包)/ 10Mbps 半双工(25% 丢包)/ 掉电模式(100% 丢包)

常见问题

Q: 硬件配置和软件配置哪个优先

PMODE管脚配置仅在初次上电时生效。一旦通过软件(PHYCFGR寄存器)配置PHY模式,将覆盖硬件配置。软件配置具有更高优先级,可在运行时动态切换。

Q: 掉电模式如何恢复

掉电模式停止TOE引擎工作,无法通过软件直接恢复。必须重新复位TOE引擎(通过硬件复位或调用wiz_toe_init()等初始化函数)才能恢复正常工作状态。

Q: 自动协商模式和手动配置有什么区别

  • 自动协商(PHY_MODE_AUTONEGO):PHY 自动检测对端设备的速率和双工模式,选择双方都支持的最佳配置。更便捷,但可能因兼容性问题协商到较低速率。
  • 手动配置(PHY_MODE_MANUAL):由用户指定速率和双工模式,可确保使用指定模式,但需确保对端支持。

Q: 全双工和半双工对性能有什么影响

全双工允许数据同时双向传输,理论吞吐量是半双工的两倍。半双工同一时刻只能单方向传输,且需要处理碰撞问题。W55MH32建议使用全双工模式以获得最佳性能,除非对端设备只支持半双工。

总结

本文基于 W55MH32 演示了 PHY 工作模式的配置方法:

  • 两种配置方式:PMODE管脚(硬件,上电生效)和PHYCFGR寄存器(软件,运行时切换)
  • 六种模式:100M全/半双工、10M全/半双工、自动协商、掉电模式
  • API函数:ctlwizchip(CW_SET_PHYCONF)设置,ctlwizchip(CW_GET_PHYCONF)回读
  • 功耗优化:高速场景用100M全双工,空闲时设掉电模式
  • 掉电恢复:需复位TOE引擎,无法软件直接恢复

下载本章例程

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

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

Andy

W5500 技术支持专家