PHY
本篇文章,我们将详细介绍如何在W55MH32芯片上设置不同的PHY模式。并通过实战例程,为大家讲解如何通过软件配置PHY模式,根据不同的传输场景灵活切换相应的模式,以此来降低功耗。
该例程用到的其他网络协议,例如DHCP,请参考相关章节。有关W55MH32的初始化过程,请参考Network Install章节,这里将不再赘述。
PHY工作模式简介
W55MH32的PHY工作模式支持两种配置方式,一种是通过PMODE管脚进行配置(硬件配置),另一种则是通过PHYCFGR寄存器的5:3位进行配置(软件配置), PHY工作模式可以配置为10Mbps(全双工/半双工),100Mbps(全双工/半双工),全功能自动协商以及掉电模式,默认为全功能自动协商模式。


请注意:
通过PMODE管脚配置仅在初次上电时生效,当使用软件进行配置后,将更改为软件配置的模式。
PHY不同模式的特点
-
速率
- 10BT:传输速率为10Mbps
- 100BT:传输速率为100Mbps
-
工作模式
- 全双工:允许数据在两个方向上同时传输,提高了网络的效率和带宽利用率。
- 半双工:在同一时刻,数据只能在一个方向上传输,不能同时双向传输。
- 掉电模式:TOE引擎停止工作,若想恢复正常工作状态,必须重新复位TOE引擎。
- 全功能,自动协商:将根据对端接口设置对应速率及工作模式。
不同PHY模式的功耗
下表为不同PYH模式下的功耗对比:

应用场景
当我们期望降低 TOE 引擎的功耗时,可依据不同的传输场景灵活切换相应的速率,以此来实现功耗的降低。比如, 在高速传输的场景下,将其设置为 100Mbps 全双工模式;而当不使用 TOE 引擎时,则将其设置为掉电模式,从而有效节省功耗。
实现过程
接下来,我们看看在代码上如何设置PHY工作模式。
步骤1:设置为100Mbps全双工模式
/* config init massage */
phy_conf.by = PHY_CONFBY_SW; // Use software config
phy_conf.mode = PHY_MODE_MANUAL; // User config mode
phy_conf.duplex = PHY_DUPLEX_FULL; // Full duplex
phy_conf.speed = PHY_SPEED_100; // Speed
/* setting phy 100M and full-duplex mode */
printf("setting phy 100M and full-duplex mode\r\n");
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");
delay_ms(10000);
步骤2:设置为10Mbps半双工模式
/* setting phy 10M and half-duplex mode */
printf("setting phy 10M and half-duplex mode\r\n");
phy_conf.speed = PHY_SPEED_10;
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");
delay_ms(10000);
步骤3:设置为掉电模式
/* setting phy low power mode */
printf("setting phy low power mode\r\n");
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");
运行结果
请注意:
测试实例需要PC端和W55MH32处于同一网段。
烧录例程运行后,首先可以看到进行了PHY链路检测,然后打印了设置的网络地址信息, 依次设置PHY为100Mbps全双工模式,然后设置PHY为10Mbps半双工模式,最后设置为PHY为掉电模式,打印信息如下图所示:

掉电模式时,无法ping通。

总结
本文讲解了如何在 W55MH32 芯片上设置不同的 PHY 模式,通过实战例程展示了根据不同传输场景,将 PHY 模式在 100Mbps 全双工、10Mbps 半双工和掉电模式之间切换以降低功耗的过程。文章详细介绍了 PHY 工作模式的配置方式、不同模式的特点、功耗差异和应用场景,帮助读者理解如何在实际应用中优化设备的网络性能与功耗。 下一篇文章将讲解如何在W55MH32上实现MQTT协议并连接阿里云平台,并实现与阿里云物模型的数据交互,敬请期待!