第二十一章 W55MH32 PHY配置示例

发布于:2025-07-27 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

1 PHY工作模式简介

2 PHY不同模式的特点

3 不同PHY模式的功耗

4 应用场景

5 实现过程

6 运行结果

7 总结


本篇文章,我们将详细介绍如何在W55MH32芯片上设置不同的PHY模式。并通过实战例程,为大家讲解如何通过软件配置PHY模式,根据不同的传输场景灵活切换相应的模式,以此来降低功耗

该例程用到的其他网络协议,例如DHCP,请参考相关章节。有关 W55MH32 的初始化过程,请参考 Network Install 章节,这里将不再赘述。

1 PHY工作模式简介

W55MH32的TOE引擎的PHY工作模式支持两种配置方式,一种是通过PMODE管脚进行配置(硬件配置),另一种则是通过PHYCFGR寄存器的5:3位进行配置(软件配置),PHY工作模式可以配置为10Mbps(全双工/半双工),100Mbps(全双工/半双工),全功能自动协商以及掉电模式,默认为全功能自动协商模式。

硬件配置示意图

软件配置示意图

注意:通过PMODE管脚配置仅在初次上电时生效,当使用软件进行配置后,将更改为软件配置的模式。

2 PHY不同模式的特点

  1. 速率
    1. 10BT:传输速率为10Mbps
    2. 100BT:传输速率为100Mbps
  2. 工作模式
    1. 全双工:允许数据在两个方向上同时传输,提高了网络的效率和带宽利用率。
    2. 半双工:在同一时刻,数据只能在一个方向上传输,不能同时双向传输。
  3. 掉电模式:TOE引擎停止工作,若想恢复正常工作状态,必须重新复位TOE引擎。
  4. 全功能,自动协商:将根据对端接口设置对应速率及工作模式。

3 不同PHY模式的功耗

下表为不同PYH模式下的功耗对比:

状态

最小

标准

最大

单位

100M Link

-

128

-

mA

10M Link

-

75

-

mA

Un-Link (Auto-negotiation mode)

-

65

-

mA

100M Transmitting

-

132

-

mA

10M Transmitting

-

79

-

mA

Power Down mode

-

13

-

mA

4 应用场景

当我们期望降低 TOE 引擎的功耗时,可依据不同的传输场景灵活切换相应的速率,以此来实现功耗的降低。比如,在高速传输的场景下,将其设置为 100Mbps 全双工模式;而当不使用 TOE 引擎时,则将其设置为掉电模式,从而有效节省功耗。

5 实现过程

接下来,我们看看在代码上如何设置PHY工作模式。

注意:测试实例需要PC端和W55MH32处于同一网段。

步骤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:设置为掉电模式

1. /* setting phy low power mode */

2.     printf("setting phy low power mode\r\n");

3.     wizphy_setphypmode(PHY_POWER_DOWN);

4.     printf("The current phy is : %s\r\n", (getPHYCFGR() & PHYCFGR_OPMDC_PDOWN) ? "power down mode" : "normal mode");

5.     printf("FHY is in power down state and cannot be ping reply.\r\n");

6.  

6 运行结果

烧录例程运行后,首先可以看到进行了PHY链路检测,然后打印了设置的网络地址信息,依次设置PHY为100Mbps全双工模式,然后设置PHY为10Mbps半双工模式,最后设置为PHY为掉电模式,打印信息如下图所示:

掉电模式时,无法ping通。

7 总结

本文讲解了如何在 W55MH32 芯片上设置不同的 PHY 模式,通过实战例程展示了根据不同传输场景,将 PHY 模式在 100Mbps 全双工、10Mbps 半双工和掉电模式之间切换以降低功耗的过程。文章详细介绍了 PHY 工作模式的配置方式、不同模式的特点、功耗差异和应用场景,帮助读者理解如何在实际应用中优化设备的网络性能与功耗。

下一篇文章将讲解如何在W55MH32上实现MQTT协议并连接阿里云平台,并实现与阿里云物模型的数据交互,敬请期待!


网站公告

今日签到

点亮在社区的每一天
去签到