我是靠谱客的博主 强健自行车,最近开发中收集的这篇文章主要介绍通过WIFI唤醒终端设备,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

通过WIFI唤醒终端设备

简介

​ 本人第一次写博客,写博客的初衷为了更好的巩固所学知识和锻炼一下自己各方面能力、以及记录工作和学习中遇到的问题和解决方案,同时与各位志同道合的朋友一起学习和进步, 个人能力有限,如有不妥之处,望大家海涵和指正。

概述

​ 通过wifi唤醒终端设备是指在终端设备通过wifi连接到路由器(AP)从而加入局域网或者Internet,在同一个网络中,通过其它终端设备(如PC)给唤醒终端设备发送唤醒数据包,从而实现远程唤醒终端。

原理

在终端设备进入休眠的时候,唤醒终端设备常用的方法有按键、定时(RTC)、BT、电源、WIFI、以太网等唤醒方式,基本原理是给休眠的终端主控一个唤醒信号,使终端设备从休眠状态退出,从而达到节省终端功耗。

​ 本文主要介绍WIFI唤醒功能的原理以及ARP数据包对唤醒功能的影响。

​ wifi唤醒主机CPU的原理是在终端设备整机进入休眠后,WIFI模块监听到符合唤醒数据包时,wifi模块恢复部分工作,给CPU一个唤醒信号。唤醒信号由HOS_WKAE GPIO给出(博通、RTL wifi模块支持唤醒功能都具备该功能引脚)。从而实现WIFI 唤醒CPU或者终端设备。

你会在想WIFI模块下在什么时候会给出唤醒信号,这个是可以配置的,如配置TCP、ICMP数据包唤醒或者Deauth、漫游等事件唤醒等。

WIFI模块在进入休眠前设置beacon帧监听间隔T1,即T1个Beacon时间间隔,AP beacon 中才包含dtim元素.

其中T1的值在市场中设备中大部分不超过5,有部分设备为1. T1的大小决定了终端设备休眠时间和监听Beacon时间。T1的值越大功耗越低、反之值越小功耗越大。(更多的原理可以一起交流学习)

wifi唤醒遇到的问题

通过TCP请求包唤醒主机,概率性的出现TCP连接失败、甚至偶尔出现TCP请求包唤醒不了终端的现象,以及唤醒比较慢的现象。

上述问题除了环境以及网络的原因存在如下二个方面:

1.TCP客户端建立TCP连接超时时间较短,导致TCP连接失败,介于各种环境和网络情况,TCP客户端需做容错处理,如增加重试次数。

2.偶尔唤醒不了是因为客户端没有接收到WIFI模ARP应答数据,导致客户端没有发送TCP数据包请求,不能够唤醒终端,同时唤醒较慢的原因也是wifi模块应答ARP请求数据包慢的导致。

关于WIFI应答ARP请求慢的原因

下图为ARP应答较慢导致无法唤醒终端以及唤醒慢或者到致TCP连接超时的主要原因
在这里插入图片描述
下图为T1=3,beacon间隔为100ms时,wifi模块监听状态图

在这里插入图片描述

如上图所示当在0-300、300-600、600-900时间内WIFI模块是处于休眠状态的,无法接收和处理任何数据,假如此时ARP请求数据包的到来,WIFI模块无法感知,从而无法应答ARP数据包的原因或者应答较慢的原因。

如何解决ARP问题

ARP数据包为广播数据包,802.11关于低功耗的协议中,并未涉及到关于广播数据包在终端进入休眠时,路由器(AP)为终端缓存广播数据,也就是说广播数据包不会出现在beacon帧中TIM中,如果广播数据到来时,终端处于休眠状态,该数据包将会丢失。

知道ARP的原理的朋友都知道,在网络通信过程中,ARP是不可缺失的部分,然而在Windows系统中,一般默认ARP有效时间为2min,如果2min之内有数据交换,最大超时时间为10min(也就是说Windows ARP表将在2-10min钟内会失效,会重新发起ARP请求包进行确认).

也就是说ARP表失效后,PC机在下次进行数据通信或者超时时间到了的时候就会发送ARP请求数据包进行确认和更新。

解决和改善方案

​ 从上述描述中可以通过修改T1时间间隔,增加WIFI模块监听时间,减少广播数据的丢失,从而改善休眠唤醒功能的性能以及唤醒时间等。

​ 从PC机端修改ARP有效时间,减少ARP请求,从而减少因ARP请求的原因导致不能唤醒终端或者TCP连接超时或者唤醒慢的现象

PC端或者其它终端修改
1.设置Windows ARP有效时间。设置一个合适的时间减少或避免该问题的出现。修改Windows 注册表信息
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters
下增加如下键值(Windows 默认情况下没有)
键值1:ArpCacheLife,类型为Dword,单位为秒,默认值为120
键值2:ArpCacheMinReferencedLife,类型为Dword,单位为秒,默认值为600
注意:这些键值默认是不存在的,如果你想修改,必须自行创建;修改后重启计算机后生效

修改WIFI模块休眠参数T1,将T1设置为0或者1,WIFI模块监听图

在这里插入图片描述

总结

因时间的原因,只能简单阐述了问题原因和给出解决方案, 很多的原理都为进行说明,以后有时间在进行说明和研究,也其盼大家一起交流学习

总结

因时间的原因,只能简单阐述了问题原因和给出解决方案, 很多的原理都为进行说明,以后有时间在进行说明和研究,也其盼大家一起交流学习

最后

以上就是强健自行车为你收集整理的通过WIFI唤醒终端设备的全部内容,希望文章能够帮你解决通过WIFI唤醒终端设备所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部