Luat功耗指南

功耗管理

简介

Air724UG支持多种省电模式,通过进入不同的省电模式达到降低功耗的目的。
luat版本默认自动休眠控制,系统空闲会自动进入休眠。但是要进行串口,SPI,ADC,I2C操作时,需要调用pm.wake()主动唤醒。操作结束后,需要调用pm.sleep()重新进入自动休眠控制。
注意:
模块是否有进入睡眠模式,从外部电气信号或调试日志中无法体现,只能通过检测模块的消耗电流来判断。进入休眠后模块的电流会在1到2mA的底电流的基础上跳动。

常用模块功耗指标

API说明

API接口描述
pm.wake(tag)某个Lua应用唤醒系统
pm.sleep(tag)某个Lua应用休眠系统
pm.isSleep(tag)获取系统系统全局或某个Lua应用的休眠状态
net.switchFly(mode)设置飞行模式

详细的API介绍见pm API章节

3种工作模式:

1. 全功能模式

一般的工作模式,CPU,时钟全速运行。

2. 休眠模式

CPU休眠,射频部分工作,周期进行寻呼,仅维持网络连接,能随时接收网络端的电话,短信等。功耗较低(具体功耗数据参考6.5章节),主要的省电模式。可以通过GPIO中断,内部计时器中断,网络消息,来电,短信等唤醒。

3. 最少功能模式

RF和SIM都关闭):CPU休眠,射频与SIM卡关闭,无法注册网络,无法接收网络端的任何信息。功耗最低

实现流程

目前的休眠处理有两种方式,
第一种是底层core内部,自动处理,例如tcp发送或者接收数据时,会自动唤醒,发送接收结束后,会自动休眠;这部分不用lua脚本控制、

第二种是lua脚本使用pm.sleep和pm.wake自行控制,例如,uart连接外围设备,uart接收数据前,要主动去pm.wake,这样才能保证前面接收的数据不出错,当不需要通信时,调用pm.sleep;如果有lcd的项目,也是同样道理

全功能模式
  • 模块启动后,如果网络端没有数据的接受或者发送,会自动休眠,在脚本中调用pm.wake(tag)使系统保持唤醒,不进入休眠,则是全功能模式
休眠模式

当模块开机后,网络没有进行数据发送、接收数据时,模块会自动进入休眠,下面的举例是使用lua脚本来控制休眠与唤醒

  • 使用pm.wake(tag)与pm.sleep(tag)来实现管理
  • 唤醒
    • 使用pm.wake(tag)来唤醒系统
  • 休眠
    • 使用pm.sleep(tag)来休眠系统
  • 休眠唤醒功能(pm)的原理可以按照如下方式理解
    有一个屋子,屋子里有个电灯,电灯是由电池来供电的,充一次电比较麻烦,所以为了省电,只有当有人需要用
到电灯时,才去打开它。
    晚上,屋子里进了一个人,说我要打开灯,于是灯亮了,后面接着进来了三个人,都说自己要打开灯。
    等了一会,他们中有一个人要走了,说:我要关掉灯,然后走了,但是这时候屋子里还有其他三个人需要用灯,
所以灯实际上并不会关掉,只有当屋子里所有的人都说要关掉灯,没人用到灯的时候,灯才会关掉。
  • 假设模块有两个应用
    • 第一个是使用SPI接了LCD屏,应用标记为"LCD"
      第二个是使用串口来传输数据,应用标记为"UART"
    • UART传输数据前需要让系统保持唤醒,使用pm.wake(“UART”)来使系统保持唤醒状态
      同时LCD屏需要显示数据,使用pm.wake(“LCD”)来保持系统唤醒
    • 当UART工作完毕后,使用pm.sleep(“UART”)来标记串口传输工作已经完毕,但此时LCD还处于工作状态,所以系统无法进行休眠。当LCD应用工作完毕调用pm.sleep(“LCD”)后,此时"UART"和"LCD"都工作完毕了,系统才会真正进入休眠
    • 更多应用同理
  • 假设模块有一个应用
    • 使用串口来传输数据,应用标记为"UART"
    • UART传输数据前需要让系统保持唤醒,使用pm.wake(“UART”)来使系统保持唤醒状态,当UART工作完毕后,使用pm.sleep(“UART”)来标记串口传输工作已经完毕,此时没有其他应用唤醒模块,系统可以真正地进行休眠
最少功能模式

系统休眠,并且模块进入飞行模式

  • 有两种实现的方法
    • 第一种:开机10秒后或开机20秒模块注册上网络后调用
      net.switchFly(true)使模块进入飞行模式,等待系统自动休眠后,进入最少功能模式

    • 第二种:待模块任务执行完毕,但不想让它关机时,调用
      pm.sleep(tag)与net.switchFly(true)使模块进入休眠并进入飞行模式

示例

这里是功耗管理demo的章节,请点我

全功能模式

  sys.taskInit(
    function()
        sys.wait(5000)
    --挂起五秒,等待模块开机
        pm.wake("WAKE")
    --模块开机后调用pm.wake(tag)(这里"WAKE"为tag),使系统保持唤醒状态
     end
)

休眠模式

sys.taskInit(
     function()
         --等待十秒,十秒后,保持系统唤醒
         sys.wait(8000)
        --两秒后打印当前"TEST"和全局脚本的休眠状态,true为休眠状态,false为唤醒状态
         sys.wait(2000)
         print("执行pm.wake(\"TEST\")之前\"TEST\"的休眠状态:",pm.isSleep("TEST"),"全局的休眠状态:",pm.isSleep())
         pm.wake("TEST")
         --两秒后打印当前"TEST"和全局脚本的休眠状态,true为休眠状态,false为唤醒状态
         sys.wait(2000)
         print("执行pm.wake(\"TEST\")后\"TEST\"的休眠状态:",pm.isSleep("TEST"),"全局的休眠状态:",pm.isSleep())
         local temp = 0
         --循环打印二十次,等待20秒后,进入休眠
         while temp < 20 do
            print("我现在正在执行打印任务")
            sys.wait(1000)
            temp = temp + 1
         end
         print("我休眠了")
         --调用接口使模块休眠
         pm.sleep("TEST")
         sys.wait(2000)
         print("执行pm.sleep(\"TEST\")后\"TEST\"的休眠状态:",pm.isSleep("TEST"),"全局的休眠状态:",pm.isSleep())
     end
)

最少功能模式

sys.taskInit(
     function()
         --等待10秒
         --刚开机就进入飞行模式可能会失败,所以开机后等待10s或注册上网络后再进入飞行模式
         sys.wait(10000)
         --进入飞行模式
         net.switchFly(true)
         --等待两秒
         sys.wait(2000)
         print("我休眠了")
         --调用接口使模块休眠
         pm.sleep("TEST")
     end
)

常见问题

一、飞行模式 和 超低功耗模式 哪个更省电?

飞行低,但退出飞行模式重新联网需要时间,飞行模式下,没法维持模块与服务器连接,根据实际业务情况选。
如果开关飞行频率过大,功耗也会增加。

二、为什么模块无法进入休眠

1. 查看模块是否插入USB,USB连接的状态下模块保持唤醒,无法休眠
2. 使用开发板和自己的板子烧录adc的demo进行对比,看模块是否能够进行休眠
3. 使用pm.isSleep()接口查询脚本休眠状态,看是否是调用了pm.wake(tag)后没有去调用pm.sleep(tag)
4. 屏蔽代码,看是由哪部分代码使模块无法休眠

三、为什么串口1在休眠状态下也能正常收发数据

uart1在core中做了特殊处理,可以实现休眠状态下接收数据不丢失

四、模块支持PSM省电模式吗?

724模块目前不支持这个模式,PSM应该是展锐1.4基线上新增的功能,模块目前还是1.3基线,后续我们有可能会移植,时期不确定

UE Power Saving Mode(简称PSM)是3GPP R12引入的特性,面向小数据量传输场景功耗体验优化与信令开销控制。在PSM模式下,网络无法到达UE,UE无需接受来自于网络的数据和请求(以获得类似于关机的功耗表现),但是依然注册在网络,NAS(非接入层)的状态信息得以保留,AS(接入层)连接已经关闭,这样UE在退出PSM模式的时候,只需重新建立RRC连接,无需重新做Attach或者PDN连接,从而实现接入信令开销的控制。

相关资料以及购买链接

Air724UG开发板购买链接
Air724 开发板使用说明

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值