结论边界

“开启 Power Save”不等于功耗一定下降。802.11 Power Save 是 STA 与 AP 之间的链路语义,不是终端本地一个私有开关。

先看边界:

  • STA 需要通过帧头里的 Power Management bit 告诉 AP 自己进入省电态。
  • AP 接受后,才会按省电 STA 的语义缓存单播数据。
  • STA 要按 Beacon/TIM/DTIM 节奏醒来检查缓存提示。
  • TIM 只是提示 AP 有缓存,不是数据已经交付。
  • 缓存领取可能走 PS-Poll,也可能走 U-APSD;两者抓包形态不同。
  • 功耗下不来,常见原因是频繁醒来、领取缓存低效、链路重传、AP/驱动省电语义不一致,而不只是应用层心跳太密。

排障不要只看 SDK 返回“power save enabled”。要看空口和设备日志是否真的形成省电交互。

先确认 PM bit

Power Management bit 的作用不是“让本机睡觉”,而是声明:

protocol trace
从这帧开始,AP 应按省电 STA 的规则处理我的下行数据。

抓包重点:

  • STA 是否稳定发送 PM=1 的帧;
  • 是否刚切到 PM=1 又很快回到 PM=0;
  • 上行业务、扫描、漫游、驱动策略是否频繁把 STA 拉回 active;
  • AP 是否在 STA 进入省电后改变单播下发行为。

如果驱动日志显示省电已开启,但空口上看不到稳定 PM bit 切换,这个“开启”对链路侧没有意义。

再看 TIM

AP 为省电 STA 缓存单播数据后,通过 Beacon 中的 TIM 提示缓存状态。

TIM 的语义:

protocol trace
AP 当前是否有与某些 AID 对应的缓存单播数据

它不是:

protocol trace
数据已经发给 STA
STA 已经收到数据
后续不需要额外 MAC 交互

排查 TIM 前先拿到目标 STA 的 AID。否则看 Partial Virtual Bitmap 很容易误判。

判断顺序:

  1. 确认目标 STA 的 AID。
  2. 看 Beacon 的 Bitmap Control 和 Partial Virtual Bitmap 是否覆盖该 AID。
  3. 判断目标 AID bit 是否置位。
  4. 观察 TIM 后 STA 是否醒来领取缓存。

常见误判:

  • 位图很短就认为 AP 没缓存;
  • 忽略 bitmap offset;
  • 把 DTIM 相关指示和单播 AID bit 混在一起看;
  • 看到 TIM 置位就认为数据已经交付。

DTIM 会影响平均功耗

DTIM 是 Delivery Traffic Indication Message。AP 按 DTIM 周期提示组播/广播缓存,也会影响 STA 必须醒来的节奏。

工程影响:

  • DTIM period 越小,STA 越频繁醒来;
  • DTIM period 越大,组播/广播下发延迟可能变高;
  • 有些 IoT 设备即使单播很少,也会因为 DTIM 频繁醒来;
  • AP 的 Beacon interval 和 DTIM period 要一起看。

记录时不要只写“DTIM=3”,还要写 Beacon interval:

protocol trace
Beacon interval = 100 ms
DTIM period     = 3
=> DTIM 间隔约 300 ms

缓存领取:PS-Poll 与 U-APSD

TIM 置位后,STA 需要领取缓存数据。

PS-Poll

传统 PS-Poll 路径:

protocol trace
AP Beacon/TIM: 有缓存
STA -> AP: PS-Poll
AP  -> STA: buffered DATA
STA -> AP: ACK

如果 AP 还有更多缓存,DATA 里可能设置 More Data bit,STA 继续领取。

问题点:

  • PS-Poll 往返多,缓存多时效率低;
  • 每领一批都要保持 awake;
  • 丢包或低速率会拉长活跃窗口;
  • More Data 判断错误会导致 STA 过早睡回去或长时间醒着。

U-APSD

WMM Power Save / U-APSD 通过 trigger frame 触发 AP 下发 service period 内的缓存帧。

典型判断字段:

  • trigger frame;
  • QoS Data;
  • More Data;
  • EOSP;
  • AC 是否启用 U-APSD。

EOSP 表示本次 service period 结束。若 EOSP 缺失或异常,STA 可能不敢睡回去,平均功耗会上升。

功耗下不来的常见原因

1. PM bit 不稳定

表现:

  • STA 频繁 PM=1 / PM=0 切换;
  • 后台扫描、保活、驱动队列让 STA 长时间 active;
  • 用户态以为省电已开,空口上没有稳定省电状态。

排查:

protocol trace
抓 STA 发出的 Data/QoS Null
看 Power Management bit
对照驱动电源状态日志

2. DTIM 过密

表现:

  • 单播不多,但 STA 仍频繁醒来;
  • Beacon/DTIM 节奏与电流波形对应明显。

排查:

protocol trace
记录 Beacon interval / DTIM period
看每个 DTIM 是否拉起 Wi-Fi 模组
检查是否有组播/广播缓存

3. TIM 后领取缓存低效

表现:

  • TIM 置位后,PS-Poll/trigger 往返多;
  • More Data 长时间为 1;
  • EOSP 不及时;
  • 活跃窗口被拖长。

排查:

protocol trace
TIM -> PS-Poll/trigger -> DATA -> ACK
统计一次缓存领取持续时间
统计期间 retry 和 rate

4. 链路质量差导致重传

低功耗设备常常只看平均流量,忽略重传 airtime。

表现:

  • 上下行数据量不大;
  • retry/ACK miss 多;
  • 每次醒来都因为重传多停留更久;
  • 电流波形显示短业务变成长活跃窗口。

排查:

protocol trace
RSSI/SNR
FCS/PHY error
Retry bit
MCS/rate fallback
ACK miss
CCA busy

5. AP 与 STA 省电能力不匹配

可能情况:

  • AP 对 PS-Poll/U-APSD 支持或策略不同;
  • 某些 AC 没启用 U-APSD;
  • AP 组播/广播策略保守;
  • AP 固件对 IoT STA 省电兼容性差。

排查:

protocol trace
关联能力协商
WMM/U-APSD 参数
AP 日志
换 AP 对比
固定 basic rates / DTIM / beacon interval 做 A/B 测试

抓包判断路径

1. 建立时间线

不要只截单帧。按时间线记录:

protocol trace
STA 关联
PM bit 切换
Beacon/TIM/DTIM
PS-Poll 或 U-APSD trigger
AP 下发缓存 DATA
More Data / EOSP
STA 回到省电状态

2. 对齐电流波形

如果有功耗仪,把电流波形与抓包时间对齐。

重点看:

  • Beacon/DTIM 是否对应周期性电流尖峰;
  • TIM 置位后活跃窗口持续多久;
  • retry 是否拉长活跃窗口;
  • STA 是否按预期回到 sleep。

3. 对照驱动日志

日志里至少要找:

protocol trace
power save enter / exit
listen interval
DTIM
U-APSD config
TX/RX queue
scan / roam
wake reason
firmware sleep state

空口和日志不一致时,以空口行为为准继续追驱动/固件原因。

常见误判

现象不能直接下的结论下一步确认
SDK 返回省电开启 链路已进入省电 必须看 PM bit 和 AP 缓存行为
TIM 置位 数据已经收到 TIM 只是缓存提示,后面还要领取
流量很小 功耗应该低 DTIM、重传、领取缓存效率会决定平均功耗
DTIM period 大 一定更省电 组播/广播延迟变大,部分业务可能被拖慢
看到 PS-Poll 省电流程正常 还要看 More Data、ACK、重传和领取耗时
U-APSD 开启 一定比 PS-Poll 省电 要看 AC 配置、trigger、EOSP 和 AP 实现

现场记录模板

protocol trace
设备 / 模组:
AP 型号 / 固件:
Beacon interval:
DTIM period:
Listen interval:
目标 STA AID:
Power Management bit:稳定 PM=1 / 频繁切换 / 未看到
TIM 是否覆盖目标 AID:
DTIM 是否触发周期唤醒:
领取方式:PS-Poll / U-APSD / 其他
More Data:
EOSP:
Retry / ACK miss:
RSSI/SNR:
CCA busy:
电流波形活跃窗口:
驱动日志 wake reason:
结论:
缺失证据:

来源与核验

  • IEEE Std 802.11:Power Management bit、TIM/DTIM、AID、PS-Poll、QoS/U-APSD、More Data、EOSP、ACK/retry 语义。
  • Wireshark/radiotap:PM bit、TIM bitmap、QoS Control、More Data、EOSP、Retry、rate、RSSI/SNR、FCS/PHY error。
  • 设备侧证据:驱动/固件 power save 状态、wake reason、scan/roam、TX/RX queue、电流波形。

最后结论

Wi‑Fi 省电排查按这条线走:

protocol trace
STA 是否稳定声明 PM=1?
AP 是否开始缓存单播?
TIM 是否正确覆盖目标 AID?
DTIM 是否过密?
缓存领取走 PS-Poll 还是 U-APSD?
More Data / EOSP 是否让 STA 能及时睡回去?
重传和低速率是否拉长活跃窗口?
电流波形是否与 Beacon/DTIM/TIM/领取缓存对应?

只有这些证据闭合,才能判断功耗下不来是应用层唤醒太多、AP 策略问题、链路质量问题,还是驱动/固件没有真正进入省电轨道。