二十四、W5100S/W5500+RP2040树莓派Pico<PHY的状态模式控制>

文章目录

  • [1. 前言](#1. 前言)
  • [2. 相关简介](#2. 相关简介)
    • [2.1 简述](#2.1 简述)
    • [2.2 原理](#2.2 原理)
    • [2.3 优点&应用](#2.3 优点&应用)
  • [3. WIZnet以太网芯片](#3. WIZnet以太网芯片)
  • [4. PHY模式配置测试](#4. PHY模式配置测试)
    • [4.1 程序流程图](#4.1 程序流程图)
    • [4.2 测试准备](#4.2 测试准备)
    • [4.3 连接方式](#4.3 连接方式)
    • [4.4 相关代码](#4.4 相关代码)
    • [4.5 测试现象](#4.5 测试现象)
  • [5. 注意事项](#5. 注意事项)
  • [6. 相关链接](#6. 相关链接)

1. 前言

W5100S/W5500不仅支持自动PHY自动协商,而且支持用户自定义PHY模式,有10M/100M、半双工/全双工、掉电模式等。

本章节将用 W5100S/W5500 + 树莓派RP2040 进行逐一配置和测试 。

W5100S/W5500是一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,同时也是一颗工业级以太网控制芯片。在以太网应用中使用 W5100S/W5500 让用户可以更加方便地在设备之间实现远程连接和通信。

2. 相关简介

2.1 简述

​ PHY的10M和100M是指网络传输速率,分别表示每秒传输10兆比特(Mbit)和100兆比特(Mbit)的数据速率。这些速率通常用于描述局域网(LAN)和广域网(WAN)连接的性能。

​ 半双工和全双工是指网络连接的工作模式。半双工意味着数据连接双方在同一时刻只能执行一方发送数据而另一方接收数据的操作模式。而全双工则是指数据连接双方在同一时刻都能发送和接收数据的操作模式。全双工方式无需进行方向的切换,因此没有切换操作所产生的时间延迟,这对那些不能有时间延误的交互式应用(例如远程监测和控制系统)十分有利。

​ PHY的掉电模式是指PHY芯片在遇到异常情况或需要节能时,会自动进入掉电模式,关闭不必要的设备和功能,以减少能源消耗和延长设备使用寿命。在掉电模式下,一些设备的运行会受到影响,如屏幕亮度降低、处理器频率降低等。掉电模式是一种节能技术,可以在保证设备正常运行的同时,实现能源的高效利用。

2.2 原理

​ 根据实际需要可以通过写入 PHYCR0 和 PHYCR1 寄存器参数,从而配置PHY为不同的模式。

2.3 优点&应用

  • 节能:低功耗PHY芯片在保持高性能的同时,能够有效地降低功耗,对于电池供电的设备来说,可以大大延长设备的工作时间。

  • 热设计优化:低功耗PHY芯片在设计时已经考虑到了热性能的优化,能够在高负载情况下保持良好的散热性能,从而保证芯片的高效稳定运行。

  • 延长设备使用寿命:由于低功耗PHY芯片能够有效地降低功耗,因此可以减少设备的热量积累和损耗,从而延长设备的使用寿命。

  • 符合绿色环保要求:随着人们对环保意识的提高,电子设备的高效节能也成为了关注的重点。低功耗PHY芯片能够更好地符合绿色环保的要求,为电子设备的绿色发展做出贡献。

  • 应用广泛:低功耗PHY芯片在各种领域都有广泛的应用,如物联网、智能家居、医疗设备等,这些领域都需要长时间的工作和高效的表现,低功耗PHY芯片恰好能够满足这些需求。

​ 总之,PHY低功耗的优点主要表现在节能、热设计优化、延长设备使用寿命、符合绿色环保要求和应用广泛等方面,这些优点使得低功耗PHY芯片在各种领域中都得到了广泛的应用和推广。

3. WIZnet以太网芯片

WIZnet 主流硬件协议栈以太网芯片参数对比

Model Embedded Core Host I/F TX/RX Buffer HW Socket Network Performance
W5100S TCP/IPv4, MAC & PHY 8 bit BUS, SPI 16 KB 4 Max 25 Mbps
W6100 TCP/IPv4/IPv6, MAC & PHY 8 bit BUS, Fast SPI 32 KB 8 Max 25 Mbps
W5500 TCP/IPv4, MAC & PHY Fast SPI 32 KB 8 Max 15 Mbps
  1. W5100S/W6100 支持 8 bit数据总线接口,网络传输速度会优于W5500。
  2. W6100 支持IPv6,与W5100S 可以Pin to Pin兼容,若已使用W5100S的用户需要支持IPv6,则可直接换用。
  3. W5500 拥有比 W5100S更多的 socket数量以及发送与接收缓存

4. PHY模式配置测试

4.1 程序流程图

4.2 测试准备

软件

  • Visual Studio Code
  • WIZnet UartTool

硬件

  • W5100SIO模块 + RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板
  • Micro USB 接口的数据线
  • TTL 转 USB
  • 网线

4.3 连接方式

  • 通过数据线连接PC的USB口(主要用于烧录程序,也可以虚拟出串口使用)
  • 通过TTL串口转USB,连接UART0 的默认引脚:
    • RP2040 GPIO 0(UART0 TX) <----> USB_TTL_RX
    • RP2040 GPIO 1(UART0 RX) <----> USB_TTL_TX
  • 使用模块连接RP2040进行连线时
    • RP2040 GPIO 16 <----> W5100S MISO
    • RP2040 GPIO 17 <----> W5100S CS
    • RP2040 GPIO 18 <----> W5100S SCK
    • RP2040 GPIO 19 <----> W5100S MOSI
    • RP2040 GPIO 20 <----> W5100S RST
  • 通过网线直接连接PC网口(或:PC和设备都通过网线连接交换机或路由器LAN口)

4.4 相关代码

​ 打开low_power.c文件(路径:examples/low_power/low_power.c)看下具体实现:

​ 可以看到这里是以dhcp模式配置网络信息的,因此在主控和W5100S初始化完成后,会进行DHCP初始化,然后增加一个定时器初始化,用来做dhcp过程中的计时以进行超时处理;接着进入dhcp配置网络信息,失败则用静态配置信息,之后依次配置PHY为10M模式、100M模式、掉电模式并回读打印配置,最后进入while阻塞,如下所示:

cpp 复制代码
/* Network information to be configured. */
wiz_NetInfo net_info = {
    .mac = {0x00, 0x08, 0xdc, 0x11, 0x22, 0x33}, // Configured MAC address
    .ip = {192, 168, 1, 10},                     // Configured IP address
    .sn = {255, 255, 255, 0},                    // Configured subnet mask
    .gw = {192, 168, 1, 1},                      // Configured gateway
    .dns = {8, 8, 8, 8},                         // Configured domain address
    .dhcp = NETINFO_DHCP};                       // Configured dhcp model,NETINFO_DHCP:use dhcp; NETINFO_STATIC: use static ip.

static uint8_t ethernet_buf[ETHERNET_BUF_MAX_SIZE] = {
    0,
}; // Send and receive cachestatic

static uint8_t breakout_flag = 0; // Define the DHCP acquisition flag

int main()
{
    struct repeating_timer timer; // Define the timer structure
    wiz_NetInfo get_info;         // Stores the read configuration information
    wiz_PhyConf phy_conf, get_conf;

    /* MCU init */
    stdio_init_all();              // Initialize the main control peripheral
    wizchip_initialize();          // Initialize the chip interface
    wizchip_setnetinfo(&net_info); // Configure once first

    /*dhcp init*/
    DHCP_init(SOCKET_ID, ethernet_buf);                                   // DHCP initialization
    add_repeating_timer_ms(1000, repeating_timer_callback, NULL, &timer); // Add DHCP 1s Tick Timer handler

    printf("wiznet chip low power example.\r\n");
    network_init(&net_info);              // Configuring Network Information
    print_network_information(&get_info); // Read back the configuration information and print it

    /* 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 mode */
    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");

    /* setting phy 10M mode */
    phy_conf.speed = PHY_SPEED_10;
    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");

    /* setting phy low power mode */
#if (_WIZCHIP_ == W5100S)
    wizphy_setphypmode(PHY_POWER_DOWN);
    printf("The current phy is : %s\r\n", (read_phy_pwdn(PHYCR1) & (1 << 5)) ? "normal mode" : "power down mode");
    printf("FHY is in power down state and cannot be ping reply.\r\n");
#elif (_WIZCHIP_ == W5500)
    setPHYCFGR((uint8_t) PHYCFGR_RST);
    setPHYCFGR(PHYCFGR_OPMDC_PDOWN);
    printf("The current phy is : %s\r\n", (getPHYCFGR() & PHYCFGR_OPMDC_PDOWN) ? "power down mode" : "normal mode");
    printf("FHY is in power down state and cannot be ping reply.\r\n");
#endif


    while (true)
    {
        
    }
}

4.5 测试现象

​ 硬件连接无误后,编译烧录程序,打开WIZ UartTool,选择对应的COM口,填入参数:波特率115200,8位数据位,1位停止位,无校验位,无流控,填完参数后点击open打开,观察串口打印的信息以获取设备运行状态;可以看到回读的信息:PHY根据配置依次进入对应模式,如下图所示:

5. 注意事项

  • 进入掉电模式后是不能进行数据收发的,并且不会进行ping请求的回复;
  • 如果想用WIZnet的W5500来实现本章的示例,我们只需修改两个地方即可:
  1. 在library/ioLibrary_Driver/Ethernet/下找到wizchip_conf.h这个头文件,将_WIZCHIP_ 宏定义修改为W5500。

  2. 在library下找到CMakeLists.txt文件,将COMPILE_SEL设置为ON即可,OFF为W5100S,ON为W5500。

    6. 相关链接

    WIZnet官网

    WIZnet官方库链接

    本章例程链接

    想了解更多,评论留言哦!

相关推荐
WIZnet 中国社区官方博客20 天前
第五章 GPIO示例
程序设计·wiznet·高性能以太网单片机·w55mh32·单片机外设·寄存器描述·gpio介绍
WIZnet 中国社区官方博客21 天前
【第二十三章 IAP】
嵌入式硬件·wiznet·高性能以太网单片机·w55mh32·单片机外设·iap简介·iap程序设计
WIZnet 中国社区官方博客23 天前
第二章 开发板与芯片介绍
嵌入式硬件·wiznet·高性能以太网单片机·w55mh32·系统框架·开发板介绍·硬件资源
WIZnet 中国社区官方博客23 天前
第十三章 RTC 实时时钟
嵌入式硬件·wiznet·高性能以太网单片机·w55mh32·单片机外设·rtc简介·寄存器描述
WIZnet 中国社区官方博客24 天前
第二十章 BKP
wiznet·高性能以太网单片机·w55mh32·单片机外设·bkp简介·bkp特性·rtc校准
WIZnet 中国社区官方博客24 天前
第十六章 I2C
嵌入式硬件·wiznet·高性能以太网单片机·w55mh32·单片机外设·i2c通讯·i2c主从模式
WIZnet1 个月前
第二十八章 RTC——实时时钟
嵌入式硬件·时间戳·wiznet·高性能以太网单片机·w55mh32·rtc实时时钟·时钟分频
WIZnet1 个月前
第十九章 ADC——电压采集
嵌入式硬件·wiznet·高性能以太网单片机·w55mh32·adc电压采集·adc模数转换·嵌入式学习教程
WIZnet8 个月前
W55RP20芯片介绍
树莓派·wiznet·w55rp20
WIZnet8 个月前
W55RP20-EVB-Pico评估板介绍
单片机·嵌入式硬件·wiznet·w55rp20·以太网开发板