3. WiFi协议栈功耗行为解析

要理解WiFi物联网终端的功耗,不能只看“WiFi开着还是关着”,而必须把功耗拆到协议栈的物理层(PHY)与MAC层行为上。终端的平均电流,本质上是各射频状态(发射、接收、空闲监听、睡眠)的时间占比与对应电流的加权和。802.11标准在MAC层定义了一整套节能机制,让终端在“不通信”时尽可能关闭射频,只在约定时刻醒来。本节围绕PSM、U-APSD、WMM-PS、TWT四种机制,以及Beacon监听、DTIM周期、省电轮询对功耗的影响展开,并说明如何用抓包与功耗同步采集来定位能耗来源。

一、物理层状态与MAC层节能的关系

从物理层看,WiFi射频主要有四种状态:发射(TX)、接收(RX)、空闲监听(Idle/Listen)、睡眠(Sleep/Doze)。发射和接收电流通常在100~300mA量级,空闲监听约在几十mA,而睡眠可低至几十µA到几百µA。MAC层节能机制的核心目标,就是压缩“空闲监听”时间,把终端尽量推进睡眠状态,只在Beacon、DTIM或协商好的服务窗口醒来。

因此,评估任何节能机制,都应回答三个问题:终端多久醒一次?每次醒多久?醒来时是否必须收发?这三个问题分别对应唤醒周期、唤醒持续时间和唤醒期间的射频活动,直接决定平均功耗。

二、PSM:传统省电模式与DTIM周期

PSM(Power Save Mode)是最基础的机制。终端在关联请求或管理帧中把Power Management位置1,通知AP自己进入省电状态。此后终端周期性醒来监听Beacon。Beacon中携带TIM(Traffic Indication Map)字段,指示AP是否缓存了发给该终端的数据。若TIM中对应AID位为0,终端可立即回到睡眠;若为1,终端需发送PS-Poll帧向AP索取缓存数据。

Beacon周期通常为100ms(约10个Beacon/秒)。DTIM(Delivery Traffic Indication Message)是特殊的Beacon,每隔若干个Beacon出现一次,DTIM周期由AP配置,常见为1、3或10。DTIM用于指示组播/广播缓存,终端必须在每个DTIM醒来。若DTIM周期为3、Beacon周期100ms,则终端每300ms必须醒来一次接收DTIM Beacon,这是PSM下无法避免的底噪功耗。

PSM的功耗模型可近似为:平均电流 ≈ (唤醒时间 × 监听/收发电流 + 睡眠时间 × 睡眠电流) / 唤醒周期。例如唤醒周期300ms、每次醒来2ms、监听电流60mA、睡眠电流0.2mA,则平均电流约为 (2×60 + 298×0.2)/300 ≈ 0.6mA。可见缩短唤醒时间、拉长唤醒周期是降功耗的两个杠杆,但拉长周期会增加下行时延。

三、U-APSD与WMM-PS:按需唤醒的省电轮询

PSM的PS-Poll是“一问一答”,每次取一帧,效率低。U-APSD(Unscheduled Automatic Power Save Delivery)允许终端在触发帧中一次性触发AP发送多个缓存帧,AP连续发送,终端连续接收,减少轮询次数。WMM-PS(Wi-Fi Multimedia Power Save)是U-APSD在WMM(802.11e)下的实现,支持按AC(接入类别)区分,语音、视频等不同业务可独立触发。

U-APSD的关键参数是触发帧与EOSP(End of Service Period)位。终端发送触发帧后进入服务期,AP发送缓存帧,直到EOSP置1表示服务期结束,终端才可回到睡眠。相比PSM,U-APSD减少了PS-Poll的往返开销,适合有周期性小数据下发的场景,如传感器上报后的确认、配置下发等。

四、TWT:目标唤醒时间与协商式节能

TWT(Target Wake Time)是802.11ax引入的机制,允许终端与AP协商一个或多个唤醒时间点,终端只在约定的TWT服务期内醒来,其余时间完全睡眠。TWT分为个体TWT和广播TWT:个体TWT由终端与AP单独协商,广播TWT由AP统一调度多个终端。TWT的粒度可到毫秒级,且支持长周期(如数秒、数十秒),非常适合低功耗物联网终端。

TWT协商通过TWT Setup帧完成,包含请求类型、目标唤醒时间、最小/最大唤醒时长、TWT组等字段。终端可根据业务需求申请“固定间隔”或“灵活间隔”。例如环境传感器每30秒上报一次,可申请30秒周期的TWT,每次服务期仅几十毫秒,其余时间射频关闭,平均电流可降到百µA级。

802.11 MAC层节能机制:唤醒时序与功耗关系 时间 → Beacon Beacon Beacon Beacon Beacon Beacon Beacon DTIM DTIM DTIM PSM 醒 醒 醒 睡眠(射频关闭) 睡眠(射频关闭) U-APSD 触发+收 触发+收 触发+收 睡眠 睡眠 TWT 服务期 服务期 服务期 深度睡眠(长周期) 深度睡眠(长周期) 电流 峰值 睡眠底电流 睡眠底电流 PSM唤醒 U-APSD服务期 TWT服务期 射频电流

五、Beacon监听、DTIM周期与省电轮询的功耗影响

Beacon监听是PSM和U-APSD的基础开销。终端必须按Beacon周期醒来,即使没有数据也要接收Beacon并解析TIM。Beacon周期越短,终端醒来越频繁,功耗越高;Beacon周期越长,下行时延越大。DTIM周期决定了组播/广播的唤醒频率,DTIM周期越长,终端醒来越少,但组播时延增加。省电轮询(PS-Poll或触发帧)则决定了有下行数据时的额外开销。

实际调优时,需要根据业务时延容忍度选择参数。例如,电池供电的温湿度传感器,时延容忍度高,可把DTIM周期设为10、Beacon周期100ms,终端每1秒才醒一次;而智能门锁需要较快响应,DTIM周期可设为1~3。TWT则更灵活,可把唤醒周期直接设为业务周期,避免无谓的Beacon监听。

六、抓包与功耗同步采集分析方法

要定位协议交互的能耗,最有效的方法是抓包与功耗同步采集。具体做法:用支持监控模式的网卡或AP侧抓包,记录空口帧的时间戳、帧类型、长度、重传次数;同时用高精度电流探头或功耗分析仪(如Otii、Joulescope)采集终端电流,采样率至少1kHz,保证能分辨毫秒级唤醒。两路数据用同一时间基准对齐,常用方法是让终端在特定时刻发送一个标记帧(如UDP包),在抓包和电流曲线上同时找到该标记。

分析时,把电流曲线上的“峰值段”与抓包中的帧一一对应:峰值对应TX/RX,平台对应空闲监听,低谷对应睡眠。统计每个Beacon周期内的唤醒次数、每次唤醒时长、收发帧数,即可算出各机制的功耗占比。例如发现终端每100ms醒来一次但无数据,说明Beacon监听开销过大,可考虑启用TWT或增大DTIM周期;发现每次醒来有多次PS-Poll往返,说明可改用U-APSD减少轮询。

同步采集时,建议在终端固件中增加一个GPIO翻转标记,在进入/退出睡眠时拉高/拉低,用示波器同时观察GPIO与电流,可精确测量睡眠时长和唤醒开销,比单纯依赖抓包时间戳更可靠。

七、机制选择与参数配置建议

四种机制并非互斥,实际产品常组合使用。PSM是基础,所有省电终端都应支持;U-APSD/WMM-PS适合有QoS需求且下行数据成簇的场景;TWT适合802.11ax终端且业务周期明确、时延容忍度高的场景。配置时优先确认AP是否支持对应机制,再根据业务周期和时延要求设定唤醒间隔。

机制唤醒依据典型唤醒周期适用场景主要开销
PSMBeacon/TIM + PS-Poll100ms~1s基础省电、低速率Beacon监听、PS-Poll往返
U-APSD/WMM-PS触发帧 + EOSP按业务触发下行成簇、QoS业务触发帧、服务期监听
TWT协商的TWT服务期数百ms~数十s802.11ax、周期上报协商开销、服务期收发

最后需要强调:协议栈节能机制只能压缩“不必要”的射频活动,无法消除业务本身所需的收发能耗。若终端业务数据量大、上报频繁,再好的节能机制也只能优化边际功耗。因此,低功耗设计应从业务模型出发,先减少通信次数和数据量,再用协议机制把剩余通信的能耗压到最低。