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

文章目录

  • 1. 前言
  • 2. 相关简介
    • 2.1 简述
    • 2.2 原理
    • 2.3 优点&应用
  • 3. WIZnet以太网芯片
  • 4. PHY模式配置测试
    • 4.1 程序流程图
    • 4.2 测试准备
    • 4.3 连接方式
    • 4.4 相关代码
    • 4.5 测试现象
  • 5. 注意事项
  • 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 主流硬件协议栈以太网芯片参数对比

ModelEmbedded CoreHost I/FTX/RX BufferHW SocketNetwork Performance
W5100STCP/IPv4, MAC & PHY8 bit BUS, SPI16 KB4Max 25 Mbps
W6100TCP/IPv4/IPv6, MAC & PHY8 bit BUS, Fast SPI32 KB8Max 25 Mbps
W5500TCP/IPv4, MAC & PHYFast SPI32 KB8Max 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阻塞,如下所示:

/* 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 cachestaticstatic uint8_t breakout_flag = 0; // Define the DHCP acquisition flagint main()
{struct repeating_timer timer; // Define the timer structurewiz_NetInfo get_info;         // Stores the read configuration informationwiz_PhyConf phy_conf, get_conf;/* MCU init */stdio_init_all();              // Initialize the main control peripheralwizchip_initialize();          // Initialize the chip interfacewizchip_setnetinfo(&net_info); // Configure once first/*dhcp init*/DHCP_init(SOCKET_ID, ethernet_buf);                                   // DHCP initializationadd_repeating_timer_ms(1000, repeating_timer_callback, NULL, &timer); // Add DHCP 1s Tick Timer handlerprintf("wiznet chip low power example.\r\n");network_init(&net_info);              // Configuring Network Informationprint_network_information(&get_info); // Read back the configuration information and print it/* config init massage */phy_conf.by = PHY_CONFBY_SW;        // Use software configphy_conf.mode = PHY_MODE_MANUAL;    // User config mode phy_conf.duplex = PHY_DUPLEX_FULL;  // Full duplexphy_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");
#endifwhile (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官方库链接

    本章例程链接

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/171306.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 ref 与shallowRef reactive与shallowReactive

ref 给数据添加响应式&#xff0c;基本类型采用object.defineProperty进行数据劫持&#xff0c;对象类型是借助reactive 实现响应式&#xff0c;采用proxy 实现数据劫持&#xff0c;利用reflect进行源数据的操作 let country ref({count:20,names:[河南,山东,陕西],objs:{key…

C/C++交换输出 2021年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C交换输出 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C交换输出 2021年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 输入两个整数a,b&#xff0c;将它们交换输出 2、输入输…

概率论和数理统计(三)数理统计基本概念

前言 “概率论”是给定一个随机变量X的分布F(x),然后求某事件A概率 P ( x ∈ A ) P(x \in A) P(x∈A)或者随机变量X的数字特征.“统计”是已知一组样本数据 { x 1 , x 2 , . . . x n } \{x_1,x_2,...x_n\} {x1​,x2​,...xn​},去求分布F(x) 统计的基本概念 在统计中&#x…

Android framework添加自定义的Product项目,lunch目标项目

文章目录 Android framework添加自定义的Product项目1.什么是Product&#xff1f;2.定义自己的Product玩一玩 Android framework添加自定义的Product项目 1.什么是Product&#xff1f; 源码目录下输入lunch命令之后&#xff0c;简单理解下面这些列表就是product。用于把系统编…

飞天使-template模版相关知识

遇到报错django.template.exceptions.TemplateSyntaxError: ‘staticfiles’ is not a registered tag library. Must ROOT_URLCONF TEMPLATES [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [os.path.join(BASE_DIR, templates)],APP_DIRS: True,OPTI…

c++四种类型转换

首先我们要先引入上行转换和下行转换的概念 所谓上行转换&#xff0c;即将原来的子类指针转换成父类指针&#xff1b; 下行转换即将原来的父类指针转换成子类指针 由于子类对象的空间较大&#xff0c;所以把子类强制转换父类给父类指针赋值时&#xff0c;父类指针对象能读取…

ISP图像处理Pipeline

参考&#xff1a;1. 键盘摄影(七)——深入理解图像信号处理器 ISP2. Understanding ISP Pipeline3. ISP图像处理流程介绍4. ISP系统综述5. ISP(图像信号处理)之——图像处理概述6. ISP 框架7. ISP(图像信号处理)算法概述、工作原理、架构、处理流程8. ISP全流程简介9. ISP流程介…

1.jvm基本知识

目录 概述jvm虚拟机三问jvm是什么&#xff1f;java 和 jvm 的关系 为什么学jvm怎么学习为什么jvm调优?什么时候jvm调优调优调什么 结束 概述 相关文章在此总结如下&#xff1a; 文章地址jvm类加载系统地址双亲委派模型与打破双亲委派地址运行时数据区地址 jvm虚拟机三问 j…

Python 日志记录器logging 百科全书 之 日志回滚

Python 日志记录器logging 百科全书 之 日志回滚 前言 在之前的文章中&#xff0c;我们学习了关于Python日志记录的基础配置。 本文将深入探讨Python中的日志回滚机制&#xff0c;这是一种高效管理日志文件的方法&#xff0c;特别适用于长时间运行或高流量的应用。 知识点&…

NFTScan | 11.06~11.12 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2023.11.06~ 2023.11.12 NFT Hot News 01/ 《辛普森一家》提及 NFT 及区块链&#xff0c;相关 NFT 地板价涨至 0.35 ETH 11 月 6 日&#xff0c;据 Coindesk 报道&#xff0c;美国时间周…

数据分析-numpy

numpy numpy numpy简介优点下载ndarray的属性输出数据类型routines 函数ndarray对象的读写操作ndarray的级联和切分级联切分 ndarray的基本运算广播机制&#xff08;Broadcast&#xff09;ndarry的聚合操作数组元素的操作numpy 数学函数numpy 查找和排序 写在最后面 简介 nump…

RabbitMQ实战

文章目录 1、简介2、MQ优点缺点MQ的应用场景AMQP工作原理市面上常见的MQ 3、Linux安装RabbitMQ3.1 版本对应3.2 安装socat3.3 下载 Erlang/OTP、安装、验证 erlang方法一&#xff1a;1. 下载2. 将下载的Erlang服务上传到服务器上面3. 解压4. 编译erlang的依赖环境5. 安装Erlang…