第二十一章 W55MH32 PHY配置示例

目录

[1 PHY工作模式简介](#1 PHY工作模式简介)

[2 PHY不同模式的特点](#2 PHY不同模式的特点)

[3 不同PHY模式的功耗](#3 不同PHY模式的功耗)

[4 应用场景](#4 应用场景)

[5 实现过程](#5 实现过程)

[6 运行结果](#6 运行结果)

[7 总结](#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 全双工模式

cpp 复制代码
/* 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 半双工模式

cpp 复制代码
/* 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:设置为掉电模式

cpp 复制代码
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协议并连接阿里云平台,并实现与阿里云物模型的数据交互,敬请期待!

相关推荐
WIZnet2 天前
第二十七章 W55MH32 Interrupt示例
物联网·以太网·wiznet·中断·高性能以太网单片机·w55mh32·toe
WIZnet4 天前
第十一章 W55MH32 SMTP示例
arm开发·以太网·wiznet·smtp·高性能以太网单片机·w55mh32·网络邮件
WIZnet 中国社区官方博客1 个月前
第五章 GPIO示例
程序设计·wiznet·高性能以太网单片机·w55mh32·单片机外设·寄存器描述·gpio介绍
WIZnet 中国社区官方博客1 个月前
【第二十三章 IAP】
嵌入式硬件·wiznet·高性能以太网单片机·w55mh32·单片机外设·iap简介·iap程序设计
WIZnet 中国社区官方博客2 个月前
第二章 开发板与芯片介绍
嵌入式硬件·wiznet·高性能以太网单片机·w55mh32·系统框架·开发板介绍·硬件资源
WIZnet 中国社区官方博客2 个月前
第十三章 RTC 实时时钟
嵌入式硬件·wiznet·高性能以太网单片机·w55mh32·单片机外设·rtc简介·寄存器描述
WIZnet 中国社区官方博客2 个月前
第二十章 BKP
wiznet·高性能以太网单片机·w55mh32·单片机外设·bkp简介·bkp特性·rtc校准
WIZnet 中国社区官方博客2 个月前
第十六章 I2C
嵌入式硬件·wiznet·高性能以太网单片机·w55mh32·单片机外设·i2c通讯·i2c主从模式
宇努力学习2 个月前
浅谈未来汽车电子电气架构发展趋势中的通信部分
架构·can·以太网·汽车电子