低功耗
一、低功耗模式概述
1.1 背景说明
- 低功耗是合宙 4G Cat.1 模组最重要的特性之一;
- 合宙 4G Cat.1 模组有三种功耗模式,分别有各自的特点;
- 合宙 4G Cat.1 模组优异的低功耗表现,既有硬件设计的加持,也有软件协议算法的帮助;
- 不同的应用场景,按需选择不同的合宙 4G Cat.1 模组功耗模式,以及三种功耗模式之间的相互转换;
- 除实验室数据外,合宙更关注实网环境下的功耗表现,呈现给用户的效果更多以实网在线表现为准;
1.2 功耗模式
合宙低功耗模组三种功耗模式
常规模式 | 低功耗模式 | PSM+ 模式 | |
---|---|---|---|
4G 在线状态 | 在线,长连接 | 在线,长连接 | 离线,飞行模式 |
CPU 主频 | 满频 | 降频 | 降频 |
定时器唤醒 | 支持 | 支持 | 支持 |
中断唤醒 | 支持 | 支持 | 支持 |
串口唤醒 | 支持 | 支持,唤醒时波特率需先设置为 9600bps | 支持,唤醒时波特率需先设置为 9600bps |
服务器 4G 唤醒 | 支持,1 秒内 | 支持,1 秒内 | 不支持 |
上行发送 | 1 秒内响应 | 1 秒内响应 | 1.5 秒内响应 |
VEXT 电源输出状态 | 保持输出 | 不能保持输出,也不能保持关闭,间歇性输出状态 | 不能保持输出,也不能保持关闭,间歇性输出状态 |
所有 GPIO 管脚是否可以控制输出电平 | 可以 | 不可以 | 不可以 |
常规 GPIO 管脚是否可以保持电平 | 可以 | 不可以 | 不可以 |
特殊 AGPIO 管脚是否可以保持电平 | 可以 | 可以 | 可以 |
RAM 供电及唤醒后软件运行状态 | RAM 供电,正常工作,满血状态 | RAM 供电,唤醒后保持原状态运行 | RAM 掉电,唤醒后程序从初始状态运行(PSM+ 状态前运行数据丢失) |
典型功耗表现 | 较低(7mA) | 均衡(0.5mA) | 极低(3uA) |
测试环境: 1)Air700EMQ,供电电压 3.8V,移动网络,RSRP 值-88 附近,心跳间隔 5 分钟,心跳数据 100Byte,TCP 协议,合宙 netlab 服务器(https://netlab.luatos.com/); 2) 全 io 开发板,去掉了所有可能引起功耗加大器件,如 USB 下方的 ESD 器件,关闭了网络灯 | |||
更多说明:
1.3 三种功耗模式简捷定义
1)常规模式;
网络在线状态,随时响应服务器命令,CPU 满频运行,外设功能全部可用,比如,所有 GPIO 电平都可以控制;
2)低功耗模式;
网络在线状态,随时响应服务器命令,CPU 降频运行,外设功能部份可用,比如,仅有 AGPIO 可以保持电平;
3)PSM+ 模式;
网络离线状态,无法响应服务器命令,CPU 降频运行,外设功能部份可用,比如,仅有 AGPIO 可以保持电平;
1.4 关于 GPIO 的相关说明
合宙 Air700 系列/Air780 系列模组在"低功耗模式/PSM+ 模式"下不同 GPIO 的功能表现不一致,请务必根据产品定义所需严谨选择,避免改版;
根据不同 GPIO 在"低功耗模式/PSM+ 模式下"的不同表现,可以将 GPIO 分为四类:
- AGPIO,有些文档中有时也会被写为 AON_GPIO,AlwaysON,一直保持的意思; 低功耗模式下既可以保持输出高,也可以保持输出低,但不能高低变换;
- AGPIOWU,也可以写为 AON_GPIO_WAKEUP,既能在低功耗模式下输出保持(输出高低都可以,但不能高低变换),也可以在低功耗模式下作为中断;
- WAKEUP,仅能作为输入,低功耗模式下可以作为中断;
- 普通 GPIO,低功耗模式下既不能保持输出高,也不能保持输出低;
不需要低功耗,希望模块一直保持正常状态的,可以使用第一种 "常规模式",该模式下,CPU 正常工作,所有外设均可启用
电池供电,和服务器之间是长链接,又希望降低功耗的,可以使用第二种"低功耗模式",该模式下,CPU 自动降频,RAM 保持供电,串口指令/网络事件/IO 中断均可自动唤醒,普通 GPIO 掉电,外设驱动掉电,AON_GPIO 保持电平唤醒后程序继续运行
电池供电,和服务器之间不需要保持长连接,仅仅需要间隔几小时甚至几天才发一次数据给服务器,希望电池待机时间更久一些的,可以使用第三种"PSM+"模式,该模式下 CPU 自动降频,RAM 掉电, 保留 RAM 也掉电,普通 GPIO 掉电,外设驱动掉电,AON_GPIO 保持休眠前的电平,串口可唤醒,wakeup 脚可唤醒,唤醒后需要重连服务器
二、演示功能概述
本文将给大家讲解 Air700EMQ 三种功耗模式与对应的效果演示。
三、准备硬件环境
“古人云:‘工欲善其事,必先利其器。’在深入介绍本功能示例之前,我们首先需要确保以下硬件环境的准备工作已经完成。”
本文章使用Air700EMQ 开发板(全 IO 低功耗板)做演示;
参考:硬件环境清单,准备以及组装好硬件环境。
四、准备软件环境
“凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。
在量产的项目硬件设计中,一般都是由主控 MCU 通过 MCU 的 UART 给 4G 模组的 UART1 发送命令实现具体的业务逻辑;
在本教程中,为了测试方便,没有使用主控 MCU;
而是使用了 PC 电脑上的一个串口工具 LLCOM,通过 TTL 转 USB 模块给 700EMQ 的 uart1 发送命令来实现演示功能;
1. Luatools工具;
2. LLCOM 串口通信工具;
3. 本教程使用的AT固件版本号是:AirM2M_700EMQ_V2019_LTE_AT,如果版本号不正确,参考:固件版本确认和烧录检查确认。
五、低功耗模式软硬件资料
5.1 硬件设计资料
硬件可以参考这里 https://docs.openluat.com/air700emq/product/
5.2 软件设计资料
5.2.1 软件 AT 指令
最核心的就是这条
AT+POWERMODE
示例:
AT+POWERMODE="PSM+",2,1
每个参数的示意:
第一个参数:"PSM+"
为进入的低功耗模式,目前有两种可选("PRO"和"PSM+")(注:"STD"仅作为历史遗留版本存在,等效为"PRO")
第二个参数:"PSM+"模式下,拉低 RI 管脚的秒数,RI 管脚可作为外部 MCU 的唤醒脚。
第二个参数:"PRO"模式下,是否开启 IPV6 开启为 1,关闭为 0,默认关闭
第三个参数:是否需要超过 54 分钟的休眠,因为 3GPP 协议规定,PSM+ 模式下,默认必须每隔 54 分钟进行一次与基站之间的交互,此次交互会使得模块被唤醒,从而退出休眠模式,进而导致模块功耗增加,参数为 0 时每隔 54 分钟模块会被唤醒一次,参数为 1 时不会被唤醒,由于部分历史遗留问题,该参数默认为 0 ,所以有超过 54 分钟休眠时长的用户,请主动把该参数设置为 1
注:该指令默认掉电保存,所以下次上电,模块会自动进入对应的 PRO 或者 PSM+ 模式
六、功耗模式简介
前面已经介绍过三种功耗模式了,这里就不再做过多重复解释了
6.1 常规模式简介
顾名思义,常规模式为模块不考虑功耗时处于的状态。
6.1.1 AT 指令示例
完整 AT 交互流程
2024-11-14 15:24:21.785 +08:00 [INF] ->^boot.rom'v'!\n
2024-11-14 15:24:22.762 +08:00 [INF] ->
RDY
2024-11-14 15:24:24.993 +08:00 [INF] ->
^MODE: 17,17
+E_UTRAN Service
+CGEV: ME PDN ACT 1,0
+NITZ: 2024/11/14,07:24:24+32,0
2024-11-14 15:24:30.982 +08:00 [INF] <-ATE0
2024-11-14 15:24:31.100 +08:00 [INF] ->ATE0
OK
2024-11-14 15:24:36.303 +08:00 [INF] <-AT+CREG?
2024-11-14 15:24:36.419 +08:00 [INF] ->
+CREG: 0,1
OK
2024-11-14 15:24:38.477 +08:00 [INF] <-AT+CGATT?
2024-11-14 15:24:38.602 +08:00 [INF] ->
+CGATT: 1
OK
2024-11-14 15:24:40.827 +08:00 [INF] <-AT+CIPMUX=0
2024-11-14 15:24:40.951 +08:00 [INF] ->
OK
2024-11-14 15:24:43.903 +08:00 [INF] <-AT+CIPQSEND=1
2024-11-14 15:24:44.036 +08:00 [INF] ->
OK
2024-11-14 15:24:45.928 +08:00 [INF] <-AT+CSTT
2024-11-14 15:24:46.058 +08:00 [INF] ->
OK
2024-11-14 15:24:46.561 +08:00 [INF] <-AT+CIICR
2024-11-14 15:24:46.697 +08:00 [INF] ->
OK
2024-11-14 15:24:47.349 +08:00 [INF] <-AT+CIFSR
2024-11-14 15:24:47.479 +08:00 [INF] ->
10.98.0.210
2024-11-14 15:25:11.994 +08:00 [INF] <-AT+CIPSTART="TCP","112.125.89.8",44903
2024-11-14 15:25:12.105 +08:00 [INF] ->
OK
2024-11-14 15:25:12.276 +08:00 [INF] ->
CONNECT OK
服务器 ip 和端口号,请改成用户自己使用的服务的 IP/域名以及端口号,如果仅作测试,也可以使用合宙提供的测试服务器,测试服务器相关资料可以点击此处 https://netlab.luatos.com/ 进入后选择打开 TCP/UDP(根据用户服务器类型自行选择)
打开后,如图所示位置即是 IP 和端口号
注:如果当前已经在 PSM+ 或者低功耗模式下,想要切换回普通模式,可以使用如下 AT 指令
AT+POWERMODE="CLOSE"
退出当前模式,该指令示例:
如果设置了 PSM+ 模式后面的那两个参数,切换正常模式时候,可以看图所示的情况
6.1.2 硬件链接
VBAT 接口供电 - 开关拨到 BAT 一侧,电压 3.3V-4.3V。
6.1.3 展示效果
下图为链接好服务器后什么都不做的功耗,其中平均电流为 13.5894mA,每一个尖峰均为和基站进行一些底层的数据交互导致的电流增大,这些交互不能省,均是 3GPP 协议规定的交互,如果省去,都有可能导致掉网。
6.2 低功耗模式(PRO)简介
该模式可以实现与服务器之间进行长连接,服务器可随时下发数据给客户端,实现在低功耗情况下还能实时远程控制的功能
6.2.1 AT 指令示例
完整交互如下
2024-11-14 17:56:05.058 +08:00 [INF] ->
^MODE: 17,17
+E_UTRAN Service
+CGEV: ME PDN ACT 1,0
+NITZ: 2024/11/14,09:56:05+32,0
2024-11-14 17:56:54.149 +08:00 [INF] <-AT+IPR=9600;&W
2024-11-14 17:56:54.277 +08:00 [INF] ->
OK
2024-11-14 17:56:58.727 +08:00 [INF] <-AT+CREG?
2024-11-14 17:56:58.877 +08:00 [INF] ->
+CREG: 0,1
OK
2024-11-14 17:57:00.471 +08:00 [INF] <-AT+CGATT?
2024-11-14 17:57:00.598 +08:00 [INF] ->
+CGATT: 1
OK
2024-11-14 17:57:40.381 +08:00 [INF] <-AT+CIPMUX=0
2024-11-14 17:57:40.504 +08:00 [INF] ->
OK
2024-11-14 17:58:09.960 +08:00 [INF] <-AT+CIPMODE=1
2024-11-14 17:58:10.110 +08:00 [INF] ->
OK
2024-11-14 17:58:18.242 +08:00 [INF] <-AT+CSTT
2024-11-14 17:58:18.384 +08:00 [INF] ->
OK
2024-11-14 17:58:19.158 +08:00 [INF] <-AT+CIICR
2024-11-14 17:58:19.305 +08:00 [INF] ->
OK
2024-11-14 17:58:20.331 +08:00 [INF] <-AT+CIFSR
2024-11-14 17:58:20.471 +08:00 [INF] ->
10.93.163.204
2024-11-14 18:59:46.346 +08:00 [INF] <-AT+POWERMODE="PRO"
2024-11-14 18:59:46.493 +08:00 [INF] ->
OK
2024-11-14 17:58:44.665 +08:00 [INF] <-AT+CIPSTART="TCP","112.125.89.8",43870
2024-11-14 17:58:44.836 +08:00 [INF] ->
OK
2024-11-14 17:58:45.072 +08:00 [INF] ->
CONNECT
2024-11-14 18:03:25.761 +08:00 [INF] <-1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
2024-11-14 18:08:25.794 +08:00 [INF] <-1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
2024-11-14 18:13:25.810 +08:00 [INF] <-1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
2024-11-14 18:18:25.827 +08:00 [INF] <-1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
2024-11-14 18:23:25.834 +08:00 [INF] <-1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
2024-11-14 18:28:25.843 +08:00 [INF] <-1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
服务器 ip 和端口号,改成用户自己使用的服务的 IP/域名以及端口号,如果仅作测试,也可以使用合宙提供的测试服务器,测试服务器相关资料可以点击此处 https://netlab.luatos.com/ 进入后选择打开 TCP/UDP(根据用户服务器类型自行选择)
打开后,如图所示位置即是 IP 和端口号
6.2.2 展示效果
下图为上面的低功耗模式 链接服务器并发送完第一包数据以后 30 分钟的功耗,共计发送了 6 次数据包,所以整体的功耗里有 6 个较大的尖峰,总体平均电流约为 1.544mA
下图为低功耗模式下,不发数据时,模块的功耗情况,每一处尖峰都是与基站之间进行必要的通讯带来的电流增大
下图红框内为收到服务器下发数据时的功耗数据,可以看出从唤醒到收到服务器数据再到发送给串口数据以后进入休眠,总计花费约 5S(整个过程可以分为两个阶段,第一阶段是唤醒并且接收到服务器的数据,这一阶段的持续时长不会超过 1 秒钟;第二阶段是等待进入休眠,这个阶段的持续时长由基站决定,有可能 3S 不到也有可能 10S,但是一般不会超过 15S),平均电流约为 22.37mA
下图为给服务器发数据时候的功耗,可以看出,从唤醒到发送数据最后继续休眠总计用时 10S 左右(整个过程可以分为两个阶段,第一阶段是唤醒接并且发送数据到服务器,这一阶段的持续时长不会超过 1 秒钟;第二阶段是等待进入休眠,这个阶段的持续时长由基站决定,有可能 3S 不到也有可能 10S,但是一般不会超过 15S),此段的平均电流约为 19.4mA
6.3 超低功耗模式(PSM+ 模式)简介
对于 和服务器之间不需要保持长连接,仅仅需要间隔几小时甚至几天才发一次数据给服务器,希望电池待机时间更久一些的场景,可以使用第三种超低功耗("PSM+")模式
6.3.1 AT 指令示例
PSM+ 模式下,如果链接服务器后发送消息的 CIPSEND 指令和真实数据发送之间间隔较久的话,有可能会断开链接,真实 MCU 情况下可以使用"\r"字符作为转义字符,在"AT+CIPSEND=10"的后面加上"\r"再直接接我们想要发送的内容,如"12324567890",如下示例'AT+CIPSEND=10\r1234567890',由于 llcom 发送时不会对指令进行任何处理,把所有数据都当作字符串传给模块,不能识别"\r"这个转义字符,所以我们使用 sscom,使用"\r"作为转义字符,模拟发送数据的 mcu。
服务器 ip 和端口号,改成用户自己使用的服务的 IP/域名以及端口号,如果仅作测试,也可以使用合宙提供的测试服务器,测试服务器相关资料可以点击此处 https://netlab.luatos.com/ 进入后选择打开 TCP/UDP(根据用户服务器类型自行选择)
打开后,如图所示位置即是 IP 和端口号
6.3.2 展示效果
下图红框内为 PSM+ 模式下,发送数据时的功耗,从发送数据到最后进入休眠总计花费约 2S,这 2S 内平均电流约为 27mA
下图为 PSM+ 模式下,模块待机时的功耗
七、 常见问题
7.1 注释里说 UDP 比 TCP 更省电,有数据支撑吗,具体省多少
由左右两幅图可得,TCP 要比 UDP 高 10% 左右,如果数传周期拉长到 10 分钟、一个小时、甚至一天,则差的会更多。
7.2 为什么我的测试结果和你的测试结果大相径庭,甚至是你测试的 2 倍、5 倍不止
针对此类问题,可以先购买全 IO 开发板进行测试。
如果使用的是全 io 开发板,且使用的是超低功耗(PSM+)模式,仍然没有到 3uA 左右,可以参考 7.3.1 和 7.3.2 两个排查方案
如果使用的是全 io 开发板,且使用的是低功耗长连接模式,和上面 6.2.2 描述的电流差异较大,可以参考 7.3.1、7.3.2 排查方案
如果使用的用户自行设计的 PCB,可以先按照 7.3.1、7.3.2 和 7.3.3 方向进行排查
7.3.1 检查代码
超低功耗模式中,uart 口唤醒/AGPIO 唤醒/wakeup 脚都可以唤醒模块,检查下自己是否使用了对应引脚,例如串口有什么任务没关,wakeup 脚是否碰到了高电平管脚等。
7.3.2 检查模块天线链接与驻网频段
可以在 AT 指令"AT+CGATT?"回复"+CGATT: 1"以后加上一条 AT 指令"AT+CCED=0,1"
该接口回复示例
不同的信号值(rsrp)和不同的频段,功耗也不一样,其中信号值的影响更大一些,因为信号差的地方,需要射频电路发射功率更大才能维持和基站之间的正常通讯,当然,不同频段射频电路的发射/接收功率也不同。
如果信号较差,可以看下天线接触是否正常。
还有一种较小概率的情况,就是当前模块信号特别好,但是测试出的功耗数据很差,甚至比我上面的数据大了好几倍,有可能遇到了特殊基站,可以参考 https://docs.openluat.com/howtouselog/#_5 这篇文章,抓底层日志给合宙看看是什么情况了
如果遇到功耗差异比较大的情况,可以先查看下周围的频段,再锁频段进行测试,具体操作如下:
准备一台安卓手机(注意安卓版本要 7.0 以上),安装“Cellular-Z”这个 APP。(在 APP 商城搜索 Cellular-Z)。
其次,在手机的设置里,将"5G"关闭,打开 celular-z,看看当前小区频段和 RSRP,以及邻小区的 rsrp 的值,选择一个最好的 rsrp,并且记下对应的频段
接下来使用对应的手机卡,插入全 IO 开发板的 sim1 卡槽内
在 AT 指令的最开头加入锁频段的语句(根据你搜到的频段填入对应频段,不能直接复制粘贴过去):
AT+ECBAND=3,34(3即是BAND3,34即是BAND34)
如果只需要锁一个频段测试,可以这么写 AT+ECBAND=3
7.3.3 检查硬件 PCB 设计
例如 DCDC,很多客户使用的是 5V 转 4V 的 DCDC 给 vbat 供电,此时就需要计算下 DCDC 的损耗了
再比如,漏电流,又或者电源管理芯片的选择。可以对比全 io 开发板的 PCB 和自己的 PCB 来进行功耗问题的排查
7.4 我想先链接服务器,然后再进入低功耗模式,为什么模块掉线了
切换任意一种模式,底层都会自动进出一次飞行模式和基站进行一些网络方面配置交互, 会触发掉网和联网过程,所以不建议用户在前两种模式下这么使用,因为代码中有掉线重连的尝试,可能会导致一直重连一直连不上的问题。当然 PSM+ 模式下可以这么用,因为 PSM+ 下本来就和服务器不是长连接状态。
7.5 超低功耗(PSM+)模式下,我设置的 3 个小时唤醒一次,为什么不到一个小时就会唤醒一次
可以检查下 AT 指令里是否设置了后面第二个参数,如果第二个参数没有设置,按照 3GPP 协议规定,PSM+ 模式下,需要 54 分钟和基站进行交互一次,会启动一下模块。
7.6 没看到 AT+POWERMODE="PSM+"后面两个参数的应用指导
这两个参数比较特殊,特别是后面那个参数,如果设置了 AT+POWERMODE="PSM+",2,1 那么模块会进入飞行模式,所以后面链接服务器执行会出错,建议在链接服务器发送完毕数据以后,再进行 psm+ 的设置,整体流程如下:
[00:50:07.239]发→◇AT
□
[00:50:07.249]收←◆
OK
[00:50:08.136]发→◇ATE0
□
[00:50:08.149]收←◆
OK
[00:50:09.346]发→◇AT+IPR=9600;&W
□
[00:50:09.379]收←◆
OK
[00:50:11.043]发→◇AT+CPIN?
□
[00:50:11.061]收←◆
+CPIN: READY
OK
[00:50:11.537]发→◇AT+CGATT?
□
[00:50:11.556]收←◆
+CGATT: 1
OK
[00:50:13.471]发→◇AT+CIPSTART="TCP",112.125.89.8,44495
□
[00:50:13.520]收←◆
OK
[00:50:13.668]收←◆
CONNECT OK
[00:50:15.269]发→◇AT+CIPSEND=1024
□
[00:50:15.295]收←◆
>
[00:50:17.248]发→◇12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
□
[00:50:24.846]发→◇12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
□
[00:50:28.204]发→◇12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
□
[00:50:29.820]发→◇12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
□
[00:50:30.271]收←◆
SEND OK
[00:50:34.836]发→◇AT+CIPCLOSE
□
[00:50:34.860]收←◆
CLOSE OK
[00:50:36.376]发→◇AT+POWERMODE="PSM+",2,1
□
[00:50:36.514]收←◆
OK
+POWERMODE:ENTER PSM+
[00:50:37.170]收←◆
^MODE: 0,0
+NO Service
+CGEV: NW PDN DEACT 1
+PDP: DEACT