diff --git a/docs/Advanced_development/zh/QuecPythonSub/PM.md b/docs/Advanced_development/zh/QuecPythonSub/PM.md index 10f1cfd152de4b1cca12e06d9bf46b3a1acc97c1..487c4d6690f2c812d62f76cdcc78ad10e8c8ea37 100644 --- a/docs/Advanced_development/zh/QuecPythonSub/PM.md +++ b/docs/Advanced_development/zh/QuecPythonSub/PM.md @@ -1,16 +1,16 @@ # **QuecPython低功耗使用说明** -本文主要简介QuecPython pm库的使用方法。 +本文主要简介QuecPython低功耗库的使用方法。 -## pm简介 +## 低功耗简介 -文档主要基于EC600S介绍如何使用QuecPython\_低功耗模式pm,在嵌入式应用中,产品的功耗越来越受到用户的重视;电池供电设备对产品功耗方面的要求尤为明显。降低产品功耗,延长电池的使用寿命,即可降低产品的运营成本,提高产品的市场竞争力。移远通信模块产品的功耗最小化需要从软件和硬件设计两方面入手,本文档重点介绍如何通过软件设计实现功耗最小化。 +文档主要基于EC600S介绍如何使用QuecPython\_低功耗模式,在嵌入式应用中,产品的功耗越来越受到用户的重视;电池供电设备对产品功耗方面的要求尤为明显。降低产品功耗,延长电池的使用寿命,即可降低产品的运营成本,提高产品的市场竞争力。移远通信模块产品的功耗最小化需要从软件和硬件设计两方面入手,本文档重点介绍如何通过软件设计实现功耗最小化。 ## 快速开始 -关于API的信息请参考 [QuecPython wiki pm库信息](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pm-%e4%bd%8e%e5%8a%9f%e8%80%97) +关于API的信息请参考 [QuecPython wiki 低功耗库信息](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pm-%e4%bd%8e%e5%8a%9f%e8%80%97) -### 如何进入pm +### 如何进入低功耗 模组如果需要需要进入低功耗模式,必须满足以下几个条件: @@ -20,13 +20,36 @@ - 使能系统自动进入休眠(具体接口:**pm.autosleep(sleep_flag)**) - CFUN=0 或者为正常注网状态 -### 如何查看是否进入pm +### 进入低功耗的原理 + +首先,简单介绍一下CPU log,列举部分进程如下表: + +| priority | thread name | scheduled count | total run tick | percentage | +| -------- | ----------- | --------------- | -------------- | ----------- | +| 0 | System T | 57522 | 3275860 | 0.108458% | +| 0 | NUTick | 3814 | 144837 | 0.004795% | +| 2 | UsbSusH | 2 | 238 | 0.000008% | +| 2 | UsbTimeH | 2 | 78 | 0.000003% | +| 2 | UsbPcgH | 2 | 55 | 0.000002% | +| 2 | usbWakeU | 4 | 317 | 0.000010% | +| 2 | UsbCConn | 4 | 3611 | 0.000120% | +| 2 | Mdm1TxH | 12 | 1227 | 0.000041% | +| 103 | quec_led | 392 | 2546432 | 0.084308% | +| 113 | quecpyth | 57460 | 2787610 | 0.092293% | +| 255 | CommPM_L | 71377 | 7341327913 | 243.059120% | +| 254 | CommPM_s | 70706 | 1721021 | 0.056980% | + +从CPU log可以看出,CPU的运行是由多等级多进程组成的。而对于模组的运行,这些多进程对CPU的控制权属于抢占式调度,即当就绪队列中某进程的优先级(例如:上述表格的System T)高于正在处理器中运行的进程的优先级(例如:上述表格的NUTick)时,就会抢占进程NUTick,迫使NUTick处于就绪队列,直接运行进程System T,当System T运行结束后,对就绪队列中的进程做优先级判断,如果此时进程NUTick的优先级最高,则进程NUTick运行。 + +那么,对于模组的睡眠进程来说,只有当众多优先级高于睡眠进程的进程都无任务在运行时,即所有进程都释放它们的CPU控制权时,模组才会进入睡眠,降低功耗。 + +### 如何查看是否进入低功耗 对于模组的低功耗模式,我们可以从软件和硬件两个方面进行查看。 #### 软件 -在模组正常运行的情况下,使用QCOM连接模组的虚拟AT口,发送AT指令(AT+log=80,1),目的是打开log,此时可以通过连接模组的虚拟DEBUG口查看log信息,具体如下: +在模组正常运行的情况下,使用QCOM连接模组的虚拟AT口,发送AT指令(AT+log=80,1),此指令会定时3s从调试串口打印内部休眠相关的Flag 和寄存器值,此时可以通过连接模组的虚拟DEBUG口查看log信息,具体如下: ![pm_log](media/pm_log.jpg) @@ -45,7 +68,25 @@ ### 唤醒源 -- 外部引脚中断唤醒:不是所有的GPIO都是支持中断唤醒的,以及中断唤醒如何操作可参考 [ExtInt](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=extint) +- 外部引脚中断唤醒,对于EC600S,支持中断唤醒的GPIO列表如下: + + | GPIO编号 | 模组引脚 | +| -------- | -------- | + | GPIO1 | 引脚号11 | + | GPIO2 | 引脚号11 | + | GPIO3 | 引脚号12 | + | GPIO4 | 引脚号13 | + | GPIO5 | 引脚号14 | + | GPIO6 | 引脚号15 | + | GPIO7 | 引脚号16 | + | GPIO8 | 引脚号39 | + | GPIO9 | 引脚号40 | + | GPIO10 | 引脚号48 | + | GPIO11 | 引脚号58 | + | GPIO12 | 引脚号59 | + | GPIO13 | 引脚号60 | + | GPIO14 | 引脚号61 | + - 电话,短信,网络数据唤醒 ### 耗流测试(借助移远OPEN-EVB板调试) @@ -89,6 +130,10 @@ while 1: pm_15mA +**Tips:** + +以上测试数据是睡眠参考值,实测场景下的低功耗耗流值,可自行搭建环境进行相关的测试,测试遇到任何问题,麻烦联系QQ群:445121768,在线给您解答。 + ## 专业名词解释 > **加锁**:不允许模组进入低功耗模式