二十四、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.mzph.cn/news/140463.shtml

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

相关文章

自动生成Form表单提交在苹果浏览器中的注意事项

以下是本人在公司旧系统中看到的该段代码 function Post(URL, PARAMTERS) {//创建form表单var temp_form document.createElement("form");temp_form.action URL;//如需打开新窗口&#xff0c;form的target属性要设置为_blanktemp_form.target "_blank"…

[EFI]技嘉 Z490 VISION G i5-10500 电脑 Hackintosh 黑苹果引导文件

硬件配置 硬件型号驱动情况主板技嘉 Z490 VISION G CLPC controller Z490芯片组&#xff09;处理器英特尔 Core i5-10500 3.10GHz 六核已驱动内存16GB&#xff08; 威到DDR42655MHz8GBx 2〕已驱动硬盘SSDSC2BB150G7R (150 GB/ 国态硬盘&#xff09;已驱动显卡AMD Radeon RX 58…

[论文阅读] CLRerNet: Improving Confidence of Lane Detection with LaneIoU

Abstract 车道标记检测是自动驾驶和驾驶辅助系统的重要组成部分。采用基于行的车道表示的现代深度车道检测方法在车道检测基准测试中表现出色。通过初步的Oracle实验&#xff0c;我们首先拆分了车道表示组件&#xff0c;以确定我们方法的方向。我们的研究表明&#xff0c;现有…

Python之字符串、正则表达式练习

目录 1、输出随机字符串2、货币的转换&#xff08;字符串 crr107&#xff09;3、凯撒加密&#xff08;book 实验 19&#xff09;4、字符替换5、检测字母或数字6、纠正字母7、输出英文中所有长度为3个字母的单词 1、输出随机字符串 编写程序&#xff0c;输出由英文字母大小写或…

ESP32 BLE特征值示例

键盘特征值初始化示例 void BleKeyboard::begin(void) {BLEDevice::init(deviceName);BLEServer* pServer BLEDevice::createServer();pServer->setCallbacks(this);hid new BLEHIDDevice(pServer);inputKeyboard hid->inputReport(KEYBOARD_ID); // <-- input R…

大洋钻探系列之二IODP 342航次是干什么的?(上)

本文简单介绍一下大洋钻探IODP 342航次&#xff0c;从中&#xff0c;我们一窥大洋钻探航次的风采。 IODP342的航次报告在网络上可以下载&#xff0c;英文名字叫《Integrated Ocean Drilling ProgramExpedition 342 Preliminary Report》&#xff0c;航次研究的主要内容是纽芬兰…

【Linux】第十五站:环境变量

文章目录 一、进程相关的一些概念1.一些常见的概念2.对于并发3.**进程切换** 二、环境变量1.PATH环境变量2.HOME环境变量3.SHELL环境变量4.env5.系统调用接口与环境变量6.什么是环境变量&#xff1f;7.命令行参数8.main函数的第三个命令行参数9.如何验证环境变量是可以被继承的…

前端面试之事件循环

什么是事件循环 首先&#xff0c; JavaScript是一门单线程的语言&#xff0c;意味着同一时间内只能做一件事&#xff0c;这并不意味着单线程就是阻塞&#xff0c;而是实现单线程非阻塞的方法就是事件循环 在JavaScript中&#xff0c;所欲任务都可以分为&#xff1a; 同步任务…

【RPC】前传

前传 本地程序用的go语言&#xff0c;想把main.go程序当中一些计算工作放到服务器上进行&#xff0c;而只需要把结果给我即可。由于平台上暂时不能运行Go代码&#xff0c;所以写的是python文件。 1、主要是使用ssh依赖进行连接&#xff0c;但是大概率是需要手动添加的&#xf…

带头+双向+循环链表

前言&#xff1a; 前面我们已经学习了单链表的结构及其功能特点&#xff0c;也了解了单链表在实现一些功能时出现的一些缺点&#xff0c;比如在删除某个节点前面一个节点时就需要再开一个变量来存放前面一个节点的信息&#xff0c;这样就显得不灵活&#xff0c;为了使链表实现功…

网络编程学习笔记

参考&#xff1a; 套接字通信部分 《TCP/IP 网络编程》以及《TCP/IP网络编程》学习笔记 socket 编程 1. 字节序 字节序&#xff0c;顾名思义字节的顺序&#xff0c;就是大于一个字节类型的数据在内存中的存放顺序&#xff0c;也就是说对于单字符来说是没有字节序问题的&…

蓝桥杯国一,非ACMer选手保姆级经验分享

目录 一、前言二、蓝桥杯简介三、0基础计算机新手小白&#xff0c;赛前如何准备提高自己的获奖率&#xff1f;3.1 每两周参加一次【蓝桥算法双周赛】3.2 多练真题3.3 参加每一场官方校内模拟赛 四、结语 一、前言 hello&#xff0c;大家好&#xff0c;我是大赛哥(弟)&#xff…

1000道精心打磨的计算机考研题,408小伙伴不可错过

提示&#xff1a;408考研人看过来&#xff0c;超精选计算机考研1000题&#xff01; 文章目录 前言1. 为什么是1000题&#xff1f;2. 有什么优势&#xff1f;【练学结合&#xff0c;助力强化】【难度适中&#xff0c;但不刁钻】【题目新颖&#xff0c;独具匠心】【考题预测&…

Minio

Minio学习 MinioMinio介绍安装window安装1.下载服务端和客户端文件[地址](https://min.io/download#/windows)2.创建minio相关目录3.启动minio服务方式一方式二4.查看minio版本5.访问minio控制台 linux安装docker安装 Minio Minio介绍 MinIO 是在 Apache License v2.0 下发布…

云课五分钟的一些想法

起源 自中学起&#xff0c;就积极学习和掌握互联网相关知识&#xff0c;到如今已经快30年了。 个人也全程经历了从信息时代的互联网&#xff08;硬&#xff09;到智能时代的大模型&#xff08;软&#xff09;。 整体信息到智能的基础设施&#xff0c;由硬到软&#xff0c;机…

安装表面应变计的方法及注意事项

安装表面应变计的方法及注意事项 表面应变计被广泛用于水利工程和混凝土结构中&#xff0c;用于测量埋设点的线性变形&#xff08;应变&#xff09;和应力&#xff0c;同时也可以测量温度。它们可以分为表面安装式和埋入式两种。 一、埋入式表面应变计 1、混凝土应变计的安装…

蓝桥杯每日一题2023.11.13

题目描述 蓝桥杯大赛历届真题 - C 语言 B 组 - 蓝桥云课 (lanqiao.cn) 题目分析 由于每次吹灭的蜡烛与年龄相同故我们想到使用前缀和可以让我们求出各个区间的和&#xff0c;我们将每个区间都枚举一遍&#xff0c;如果符合要求就输出区间开始的位置&#xff08;答案&#xff…

C语言—i++、++i、条件运算符、goto语句、注释

i和i #include <stdio.h> int main() {int i5,j;j i;printf("i%d,j%d\n", i, j);i 5;j i;printf("i%d,j%d\n", i, j);system("pause");return 0;}i6,j6 i6,j5 请按任意键继续. . .条件运算符 goto语句 #include <stdio.h> int …

SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对这篇博客也感兴趣o (ˉ▽ˉ&#xff1b;) &#x1f4dc;SpringIOC和DI的代码实现&#xff0c;Spring如何存取对象&#xff1f;Controller、Service、Repository、Component、Configuration、Bean DI详…

若依框架下载文件

若依下载的逻辑是指定文件存储的路径&#xff0c;在ruoyi-admin模块下的application.yml中配置路径结尾必须要加/或者\结尾。 他使用的是虚拟路径映射&#xff0c;所以文件名必须是配置路径下真实的文件名。 若依采用的是流的方式&#xff0c;前端必须要用bolb的方式去接收&am…