diff --git a/docs/Advanced_development/zh/QuecPythonSub/PM.md b/docs/Advanced_development/zh/QuecPythonSub/PM.md index 56464df5545977ef9c6a1722723e79a9868d68a8..10f1cfd152de4b1cca12e06d9bf46b3a1acc97c1 100644 --- a/docs/Advanced_development/zh/QuecPythonSub/PM.md +++ b/docs/Advanced_development/zh/QuecPythonSub/PM.md @@ -1,118 +1,93 @@ # **QuecPython低功耗使用说明** -文档主要基于EC600S介绍如何使用QuecPython\_低功耗模式pm,通常便携式、移动式产品都是电池设计方案,需要整体上节省功耗,加强续航能力。通过本文你将了解到pm模块的所有设置参数及使用方法。 +本文主要简介QuecPython pm库的使用方法。 -## 硬件描述 +## pm简介 -模块内置低功耗模式,只要软件控制,无需额外的电路。 +文档主要基于EC600S介绍如何使用QuecPython\_低功耗模式pm,在嵌入式应用中,产品的功耗越来越受到用户的重视;电池供电设备对产品功耗方面的要求尤为明显。降低产品功耗,延长电池的使用寿命,即可降低产品的运营成本,提高产品的市场竞争力。移远通信模块产品的功耗最小化需要从软件和硬件设计两方面入手,本文档重点介绍如何通过软件设计实现功耗最小化。 -## 软件设计 +## 快速开始 -1. 函数原型create_wakelock(lock_name, - name_size),成功返回wakelock的标识id,否则返回-1。 +关于API的信息请参考 [QuecPython wiki pm库信息](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pm-%e4%bd%8e%e5%8a%9f%e8%80%97) +### 如何进入pm +模组如果需要需要进入低功耗模式,必须满足以下几个条件: -### 创建锁 +- USB 拔出 +- 系统唤醒锁全部释放(唤醒锁的数量可通过**pm.get_wakelock_num()**接口获取) +- 无外部引脚中断干扰 +- 使能系统自动进入休眠(具体接口:**pm.autosleep(sleep_flag)**) +- CFUN=0 或者为正常注网状态 -> lpm_fd = pm.create_wakelock(lock_name, name_size) +### 如何查看是否进入pm -| 参数 | 参数类型 | 参数说明 | -| --------- | -------- | --------------- | -| lock_name | string | 自定义lock名 | -| name_size | int | lock_name的长度 | +对于模组的低功耗模式,我们可以从软件和硬件两个方面进行查看。 -1. 函数原型delete_wakelock(lpm_fd),成功返回0。 +#### 软件 -### 删除锁 +在模组正常运行的情况下,使用QCOM连接模组的虚拟AT口,发送AT指令(AT+log=80,1),目的是打开log,此时可以通过连接模组的虚拟DEBUG口查看log信息,具体如下: -> pm.delete_wakelock(lpm_fd) +![pm_log](media/pm_log.jpg) -| 参数 | 类型 | 说明 | -| ------ | ---- | ---------------------- | -| lpm_fd | int | 需要删除的锁对应标识id | +主要查看前四个参数: -1. 函数原型wakelock_lock(lpm_fd),成功返回0,否则返回-1。 +- PMEnableSleep:休眠总开关 +- PMEnableSleep:允许进入休眠开关 +- PMEnableSleep: USB状态 +- PMEnableSleep: UART状态 -### 加锁 +以上四个参数是“1,1,0,0”基本可以表明模组已经进入了休眠。后面的参数是唤醒寄存器的值,通过该值可以具体查看哪些唤醒源没有被清除。 -> pm.wakelock_lock(lpm_fd) +#### 硬件 -| 参数 | 类型 | 说明 | -| ------ | ---- | -------------------------------- | -| lpm_fd | int | 需要执行加锁操作的wakelock标识id | +进入休眠状态测试:检查实际电流值 -1. 函数原型wakelock_unlock(lpm_fd),成功返回0,否则返回-1。 +### 唤醒源 -### 释放锁 +- 外部引脚中断唤醒:不是所有的GPIO都是支持中断唤醒的,以及中断唤醒如何操作可参考 [ExtInt](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=extint) +- 电话,短信,网络数据唤醒 -> pm.wakelock_unlock(lpm_fd) +### 耗流测试(借助移远OPEN-EVB板调试) -| 参数 | 类型 | 说明 | -| ------ | ---- | ---------------------------------- | -| lpm_fd | int | 需要执行释放锁操作的wakelock标识id | +环境搭建: -1. 函数原型autosleep(sleep_flag),成功返回0。 +断开USB对模组的供电(去除图中的 R0106),通过程控电源给模组供电(正负极分别连接模组的 VABT 和 GND )。硬件参考连接图如下。 -### 自动休眠 +![image-20210326134332982](media/pm_Hardware_connection.png) -> pm.autosleep(sleep_flag) +代码编写: -| 参数 | 类型 | 说明 | -| ---------- | ---- | ------------------------------ | -| sleep_flag | int | 0,关闭自动休眠;1开启自动休眠 | - -1. 函数原型get_wakelock_num(),返回锁的数量。 - -### 获取已创建的锁数量 - -> pm.get_wakelock_num() - -## 交互操作 - -使用QPYcom工具和模组进行交互,示例如下: - -
-![](media/079186e2c37f4af6a3c3d52c58a77644.png) - -
- -**注意:** - -- import pm即为让pm模块在当前空间可见。 - -- 只有import pm模块,才能使用pm内的函数和变量。 - -## 下载验证 - -下载.py文件到模组运行,代码如下: +编写如下代码,保存成.py文件,然后下载到模组运行。 ```python import pm import utime - -lpm_fd = pm.create_wakelock("test_lock", len("test_lock")) -pm.autosleep(1) - +lpm_fd = pm.create_wakelock("test_lock", len("test_lock")) # 创建wakelock锁 +pm.autosleep(1) # 设置自动休眠模式 +# 模拟测试,实际开发请根据业务场景选择使用 while 1: - print("sleep") - utime.sleep(5) - res = pm.wakelock_lock(lpm_fd) - print(res) + utime.sleep(10) # 休眠 + res = pm.wakelock_lock(lpm_fd) #添加锁 print("ql_lpm_idlelock_lock, g_c1_axi_fd = %d" %lpm_fd) - print("not sleep") - utime.sleep(5) - res = pm.wakelock_unlock(lpm_fd) + print("unlock sleep") + utime.sleep(10) + res = pm.wakelock_unlock(lpm_fd) #释放锁 print(res) print("ql_lpm_idlelock_unlock, g_c1_axi_fd = %d" % lpm_fd) - num = pm.get_wakelock_num() + num = pm.get_wakelock_num() # 获取已创建锁的数量 print(num) - ``` -## 配套代码 +耗流测试结果如下: + +休眠时耗流约1mA,如下截图 + +pm_1mA + +非休眠时耗流约15mA,如下截图 - 下载代码 +pm_15mA ## 专业名词解释 diff --git a/docs/Advanced_development/zh/QuecPythonSub/media/pm_15mA.jpg b/docs/Advanced_development/zh/QuecPythonSub/media/pm_15mA.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c38725871d3a4bb3db2945fa59f7232d88094d9 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonSub/media/pm_15mA.jpg differ diff --git a/docs/Advanced_development/zh/QuecPythonSub/media/pm_1mA.jpg b/docs/Advanced_development/zh/QuecPythonSub/media/pm_1mA.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b953317f66a5723c5835519fde9b9e74ef92ddf1 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonSub/media/pm_1mA.jpg differ diff --git a/docs/Advanced_development/zh/QuecPythonSub/media/pm_Hardware_connection.png b/docs/Advanced_development/zh/QuecPythonSub/media/pm_Hardware_connection.png new file mode 100644 index 0000000000000000000000000000000000000000..5b48e56c204e3f2e0a482a3fa4c9b2ab9ac955f9 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonSub/media/pm_Hardware_connection.png differ diff --git a/docs/Advanced_development/zh/QuecPythonSub/media/pm_log.jpg b/docs/Advanced_development/zh/QuecPythonSub/media/pm_log.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7edff0f5226051d77a2293058271015dc7712d34 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonSub/media/pm_log.jpg differ