4、PSM(省电模式)深度解析:进入条件、唤醒流程、实际功耗数据。
PSM,全称 Power Saving Mode,中文叫省电模式。很多刚接触蜂窝模组的朋友,容易把它和休眠搞混。我刚开始做项目时也犯过这个错——以为模组睡了就是 PSM 了。其实差远了。
PSM 是 3GPP 在 R12 和 R13 里引入的“大招”。它的核心思路是:让模组在空闲时彻底“断网”,但保留注册信息。说白了,就是模组跟基站说:“我先关机睡会儿,有事你叫我。”基站记住了它的位置,等有数据下来,再把它唤醒。
这跟普通休眠最大的区别在哪?普通休眠时,模组还得定时醒来跟基站“报平安”(TAU,Tracking Area Update)。PSM 呢?它连这个都省了。你想想看,如果设备一天只上报一次数据,中间十几个小时都在做无谓的 TAU,那得多浪费电。
PSM 的核心价值: 在保持网络可达性的前提下,将模组的活动时间压缩到极致。实测下来,PSM 状态下的平均电流可以做到 3µA 以下,比休眠模式低一到两个数量级。
4.1 进入 PSM 的条件
不是你想进就能进的。模组要进入 PSM,得满足三个硬性条件:
- 网络支持: 基站得支持 PSM 特性。有些老旧的 4G 基站或者 Cat.1 网络,可能就没开这个功能。我遇到过几次,模组配置了 PSM,但死活进不去,一查日志,网络侧返回的 PSM 参数是空的。
- 模组配置: 你得在 AT 指令里把 PSM 使能,并且设置好两个关键定时器——T3324 和 T3412。这个后面细说。
- 无活动连接: 模组当前不能有正在进行的业务,比如正在发数据、正在做 TAU。必须处于空闲态。
满足这三个条件后,模组会在一次 TAU 或 Attach 流程中,跟基站协商 PSM 参数。协商成功,基站会给模组分配一个“活动时间”(Active Time,对应 T3324),和一个“周期性 TAU 时间”(对应 T3412)。
我个人习惯: 在调试 PSM 时,先用 AT+CPSMS? 查询当前配置,再用 AT+CEREG? 看网络注册状态。如果返回的 PSM 参数是 0,说明网络没给,得换个地方或者联系运营商。
4.2 两个关键定时器:T3324 和 T3412
这两个定时器是 PSM 的灵魂。搞懂了它们,你就搞懂了 PSM 的整个行为。
| 定时器 | 3GPP 编号 | 作用 | 典型值 |
|---|---|---|---|
| 活动时间 | T3324 | 模组从空闲态进入 PSM 前的等待时间。在这段时间内,模组仍可接收网络下发的寻呼。 | 0 ~ 6 分钟(常用 2 分钟) |
| 周期性 TAU | T3412 | 模组在 PSM 状态下,最长能“睡”多久。到期必须醒来做一次 TAU,否则网络会认为它失联了。 | 54 分钟 ~ 413 天(常用 24 小时) |
流程是这样的:模组进入空闲态 → 启动 T3324(活动时间)→ 期间可被寻呼 → T3324 超时 → 模组进入 PSM(深度睡眠)→ 启动 T3412(周期性 TAU)→ T3412 超时 → 模组醒来做 TAU → 重新进入空闲态,循环。
嗯,这里要注意:T3324 设得太短,模组很快就睡了,但如果有下行数据,网络来不及下发寻呼,数据就丢了。T3412 设得太长,虽然省电,但网络侧可能因为长时间没收到 TAU,把模组标记为“隐式分离”,导致下行数据无法送达。
我曾经踩过的坑: 在一个水表项目中,我把 T3412 设成了 413 天(最大值)。结果设备在井下待了两个月后,平台下发指令完全没反应。一查,网络侧早就把设备踢下线了。后来我改成了 24 小时,既省电又可靠。
4.3 唤醒流程:从 PSM 到正常工作
模组在 PSM 状态下,射频和大部分内部电路都断电了。要唤醒它,只有两种方式:
- 内部唤醒: T3412 超时,或者应用 MCU 通过 UART/GPIO 触发模组。
- 外部唤醒: 模组本身无法被网络直接唤醒(因为射频关了)。网络侧如果有下行数据,只能等模组下次 TAU 或发数据时,再捎带下来。
唤醒后的流程很固定:
- 上电启动: 模组内部电源管理单元(PMU)开始工作,给基带和射频供电。
- 网络同步: 模组重新搜索并同步到之前注册的小区。这个过程很快,因为 PSM 期间模组保存了小区信息。
- TAU 流程: 模组发起 Tracking Area Update,告诉网络“我醒了”。网络侧更新状态,并可能下发缓存的数据。
- 正常业务: TAU 完成后,模组进入空闲态或连接态,可以收发数据。
整个唤醒过程,从触发到可以发数据,我实测过大概需要 1~3 秒。具体取决于网络信号强度和小区负载。
4.4 实际功耗数据
光说理论没用,咱们看数据。下面是我在实验室用 NB-IoT 模组(BC95)和 Cat.M 模组(BG96)实测的功耗对比。测试条件:信号强度 -85dBm,室温 25°C。
| 模式 | BC95 (NB-IoT) | BG96 (Cat.M) | 说明 |
|---|---|---|---|
| 连接态(发数据) | ~220 mA | ~350 mA | 峰值电流,持续约 1~2 秒 |
| 空闲态(DRX) | ~1.5 mA | ~2.5 mA | 模组还在监听寻呼 |
| PSM 状态 | 2.8 µA | 3.5 µA | 深度睡眠,几乎不耗电 |
| PSM + 外部唤醒 | 3.1 µA | 3.8 µA | 保留 GPIO 唤醒功能 |
看到没?PSM 的电流比空闲态低了三个数量级。如果一个设备每天只发一次数据,每次耗时 2 秒,其余时间都在 PSM 里,那么平均电流可以做到:
(220mA × 2s + 2.8µA × 86398s) / 86400s ≈ 7.6 µA
用一节 2400mAh 的锂电池,理论续航可以达到 2400mAh / 7.6µA ≈ 315789 小时 ≈ 36 年。当然,这是理想情况,实际还要考虑电池自放电、温度影响、TAU 消耗等。但 PSM 的省电效果,确实非常惊人。
避坑指南: 我建议你在做功耗评估时,不要只看 PSM 的静态电流。一定要把 TAU 的消耗算进去。比如 T3412 设成 24 小时,每次 TAU 消耗约 5mAh,那么平均下来每天要多加 0.2mAh 的消耗。对于电池容量小的设备,这个比例不小。
4.5 PSM 状态机与核心流程
下面这张图,是我自己画的 PSM 状态机。它把整个生命周期串起来了。你对照着看,会清晰很多。
从图里能看出来,PSM 并不是一个“永久睡眠”的状态。它是有周期的。每次 TAU 醒来,模组会短暂进入空闲态,然后根据 T3324 的设置,决定是立刻再睡,还是等一会儿。
我个人建议,对于大多数物联网应用,T3324 设成 2 分钟,T3412 设成 24 小时,是一个比较平衡的配置。既能保证下行数据的及时性,又能把功耗压到最低。
好了,PSM 的核心内容就这些。你只要记住三个数字:3µA(静态电流)、2 分钟(活动时间)、24 小时(TAU 周期),就能应付大部分场景了。