当前位置: 首页 > news >正文

第二十章 W55MH32 WOL示例

目录

1 WOL简介

2 WOL特点

3 WOL应用场景

4 WOL协议基本工作流程

5 实现过程

6 运行结果

7 总结


本篇文章,我们将详细介绍如何在W55MH32芯片上面实现网络唤醒(Wake-on-LAN)功能。

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

1 WOL简介

WOL即网络唤醒(Wake-on-LAN)是一种用于通过网络远程唤醒计算机的网络标准协议。它允许通过发送特定的网络数据包(即“魔术包”)来唤醒处于休眠或关机状态的设备。

2 WOL特点

  1. 简单性:WOL的核心是魔术包(Magic Packet),其格式非常简单且固定。魔术包由102个字节组成,前6

个字节固定为0xFF,后续是目标设备的MAC地址重复16次。

  1. 设备待机唤醒:WOL允许设备在不使用时进入低功耗状态,如待机、休眠或关机状态。当有远程唤醒需求时

设备能够通过接收魔术包快速恢复到正常运行状态,满足用户的使用需求。

  1. 广播机制:魔术包通常是通过UDP广播的形式发送,即使设备的IP地址未知或存在多台设备,也能通过广播包找到目标设备。
  2. 安全性高:WOL 协议基于 MAC 地址来识别目标设备,只有当魔术包中包含的 MAC 地址与网卡自身的 MAC 地

址匹配时,设备才会被唤醒。

3 WOL应用场景

接下来,我们了解下在W55MH32上,可以使用WOL协议完成哪些操作及应用呢?

  1. 远程唤醒嵌入式设备:设备在待机状态时,通过网络唤醒恢复工作状态,如工业设备和智能家居设备。
  2. 智能网关与家庭自动化:通过魔术包唤醒智能家居网关设备,实现控制和管理。
  3. 网络设备批量唤醒:管理员通过 WOL 技术批量唤醒多个设备进行维护和升级。
  4. 低功耗 IoT 设备唤醒:IoT 设备在低功耗模式下被唤醒执行任务,延长电池寿命。
  5. 嵌入式系统远程管理:设备在远程环境中被唤醒进行配置、管理或故障排除。目标设备匹配,则该设备将执

行唤醒操作,恢复到活动状态。

4 WOL协议基本工作流程

1.开启 WOL 功能:被唤醒设备需要在 BIOS 中开启 WOL 功能,或者在操作系统中启用此功能,确保网络接口卡支持并启用了 WOL。

2.开启 UDP Socket:被唤醒设备通常需要开启一个 UDP Socket 监听端口,用于接收来自网络的魔术包(Magic Packet)。

3.接收魔术包:当设备接收到一个符合标准的魔术包时,魔术包中包含了目标设备的 MAC 地址,设备通过比对 MAC 地址来判断是否应该被唤醒。

4.唤醒操作:如果魔术包中的 MAC 地址与目标设备匹配,则该设备将执行唤醒操作,恢复到活动状态。

5 实现过程

接下来,我们在 W55MH32上实现WOL远程唤醒测试。

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

wol_run()函数用于处理与UDP Socket相关的操作,以监听和处理网络唤醒魔术包。这个函数需要主循环中调用,如下所示:

    while (1){wol_run(SOCKET_ID, ethernet_buf, local_port);}

wol_run()函数内容如下:

void wol_run(uint8_t sn, uint8_t *buf, uint16_t local_port)
{     switch (getSn_SR(sn)){case SOCK_UDP:if (getSn_IR(sn) & Sn_IR_RECV){setSn_IR(sn, Sn_IR_RECV);}if (getIR() & 0x10) // Received WOL Magic packet based on UDP{printf("get wake on line\r\n");setIR(0x10);}break;case SOCK_CLOSED:socket(sn, Sn_MR_UDP, local_port, 0);setTIR(II_IR4); // Open WOL magic pack interruptsetIR(IR_WOL); // Receive WOL packetsprintf("%d:Opened, UDP WOL, port %d\r\n", sn, local_port);break;}
}

wol_run需要传入3个参数,分别是socket号,socket缓存以及源端口号。

wol_run()函数通过不断检查socket状态,当socket处于SOCK_CLOSED状态时,会创建一个UDP模式的socket,并开启WOL功能以及中断,当socket处于SOCK_UDP模式时,只需不断的监听中断寄存器,当W55MH32收到魔法包时,IR寄存器的MP位(0x10)生效,此时可以进行唤醒操作。

6 运行结果

烧录例程运行后,首先进行了PHY链路检测,然后通过DHCP设置网络信息,通过网络调试助手发送魔术包实现远程唤醒。使用sockettest网络助手发送hex格式数据需要勾选Enable $# command选项在每个数据前面加上$符号,注意不能有空格,空格会被转换为0X20。

注:(若使用其他网络调试助手发送HEX格式即可)

如下图所示:

7 总结

本文讲解了如何在 W55MH32 芯片上实现网络唤醒(WOL)功能,通过实战例程展示了从设置 UDP Socket 监听魔术包到接收并处理魔术包实现设备唤醒的完整过程。文章详细介绍了 WOL 的概念、特点、应用场景、基本工作流程,帮助读者理解其在远程设备管理和节能方面的实际应用价值。

下一篇文章将聚焦 Low Power模式,解析调节PHY 速率的方法,根据场景调节不同的 PHY 速率以达成低功耗目标,敬请期待!

http://www.dtcms.com/a/295274.html

相关文章:

  • B站 XMCVE Pwn入门课程学习笔记(5)
  • windows11通过wsl安装Ubuntu到D盘,安装docker及宝塔面板
  • 如何彻底清除服务器上的恶意软件与后门
  • 基础入门 [CMD] Windows SSH 连接服务器教程(系统自带方式)
  • Linux 下在线安装启动VNC
  • TCP 套接字--服务器相关
  • 杰理通用MCU串口+AT指令+485通讯工业语音芯片
  • PostgreSQL 跨库查询方法
  • Apache Flink 实时流处理性能优化实践指南
  • uniapp写app做测试手机通知栏展示内容
  • uni-appDay02
  • 从零用java实现 小红书 springboot vue uniapp(14) 集成阿里云短信验证码
  • 复盘—MySQL触发器实现监听数据表值的变化,对其他数据表做更新
  • 图片查重从设计到实现(2)Milvus安装准备etcd介绍、应用场景及Docker安装配置
  • 算法竞赛阶段二-数据结构(34)数据结构链表STL vector
  • 数据结构-4(常用排序算法、二分查找)
  • ​​GOFLY LIVE CHAT:Golang製オープンソース・ライブチャットシステム​
  • PHP文件下载
  • 嵌入式学习-(李宏毅)机器学习(2)-day29
  • 天线增益方向图是怎么绘制的?
  • 【ROS1】09-ROS通信机制——参数服务器
  • JavaSE:学习输入输出编写简单的程序
  • 从java到vue3:第二天
  • 字符串和对象的深拷贝和浅拷贝
  • 教务管理系统学员管理系统模块设计
  • Ubuntu-安装Epics教程
  • 从零构建 Node20+pnpm+pm2 环境镜像:基于 Dockerfile 的两种方案及持久化配置指南
  • NPM/Yarn完全指南:前端开发的“基石“与“加速器“
  • 用LangChain重构客服系统:腾讯云向量数据库+GPT-4o实战
  • AI风险治理“实战”落地:CISO如何将GenAI纳入GRC管控体系