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,得满足三个硬性条件:

  1. 网络支持: 基站得支持 PSM 特性。有些老旧的 4G 基站或者 Cat.1 网络,可能就没开这个功能。我遇到过几次,模组配置了 PSM,但死活进不去,一查日志,网络侧返回的 PSM 参数是空的。
  2. 模组配置: 你得在 AT 指令里把 PSM 使能,并且设置好两个关键定时器——T3324 和 T3412。这个后面细说。
  3. 无活动连接: 模组当前不能有正在进行的业务,比如正在发数据、正在做 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 或发数据时,再捎带下来。

唤醒后的流程很固定:

  1. 上电启动: 模组内部电源管理单元(PMU)开始工作,给基带和射频供电。
  2. 网络同步: 模组重新搜索并同步到之前注册的小区。这个过程很快,因为 PSM 期间模组保存了小区信息。
  3. TAU 流程: 模组发起 Tracking Area Update,告诉网络“我醒了”。网络侧更新状态,并可能下发缓存的数据。
  4. 正常业务: 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 状态机与核心流程 连接态 发数据 / 收数据 空闲态 监听寻呼 (DRX) PSM 深度睡眠 射频关闭 业务完成 有数据 / 寻呼 T3324 超时 T3412 超时 / 外部唤醒 关键说明: 1. T3324:活动时间,超时后进入 PSM。期间可被寻呼。 2. T3412:周期性 TAU 时间,超时后必须醒来做 TAU。 3. 外部唤醒:MCU 通过 UART 或 GPIO 触发模组退出 PSM。

从图里能看出来,PSM 并不是一个“永久睡眠”的状态。它是有周期的。每次 TAU 醒来,模组会短暂进入空闲态,然后根据 T3324 的设置,决定是立刻再睡,还是等一会儿。

我个人建议,对于大多数物联网应用,T3324 设成 2 分钟,T3412 设成 24 小时,是一个比较平衡的配置。既能保证下行数据的及时性,又能把功耗压到最低。

好了,PSM 的核心内容就这些。你只要记住三个数字:3µA(静态电流)、2 分钟(活动时间)、24 小时(TAU 周期),就能应付大部分场景了。