睡眠与唤醒问题

## 1.睡眠模式 AM22E 包括两种睡眠模式: ①深度睡眠。 ②浅睡眠。 **深度睡眠**:PSM 模式,外设断电、AT 命令任务终止、uart 无响应,触发 WAKEUP_IN 下降沿可 唤醒深度睡眠。 **浅睡眠**:关闭部分外设功能,串口无响应,串口输入”AT”可唤醒浅睡眠。 ## 2.深睡眠 ### 2.1进入深睡眠模式 模组在以下四种情况下,若在条件成立前 10s 内无 AT 命令输入,会进入深度睡眠模式: ① 在飞行模式(AT+CFUN=0)下,模组在 10s 后进入深度睡眠; ② 在 TCP 断开连接前提下,附着上网络并同步进入 PSM 模式后,模组进入深度睡眠; ③ 在 TCP 断开连接前提下,若 eDRX 有效周期大于 81.92s,并同步进入 eDRX 模式,模组进入深度睡眠; ④ 在模组搜索完全频段,尝试驻网失败(AT+CEREG?返回 +CEREG: 0,0 )后,模组进入深度睡眠模式。 ### 2.2.深睡眠唤醒 进入深度睡眠后 AT 命令不会做应答,且输入 AT 命令无法唤醒模组,深度睡眠可以通过以下方式唤醒,唤醒时间默认为 10s(可通过 AT*WAKETIME 指令配置唤醒时长),期间发送 AT 有响应:WAKEUP_IN 低电平; ## 3.浅睡眠 3.1.进入浅睡眠模式 模组在以下情况下,若在条件成立前 10s 内无 AT 命令输入[1],会进入到浅睡眠模式: ①进入空闲态后,模组立即进入浅睡眠模式; ② 若保持 TCP 连接,附着上网络并同步进入 PSM 模式后,模组只会进入浅睡眠,而不会进入 深睡眠; ③ 若保持 TCP 连接,若 eDRX 有效周期大于 81.92s,并同步进入 eDRX 模式,模组只会进入 浅睡眠,而不会进入深睡眠; 3.2.浅睡眠唤醒 进入浅睡眠以后,可以通过以下方式唤醒,唤醒时间默认为 10s,期间发送 AT 有响应: [1] 若在模组睡眠前,输入 AT 命令,若此时即使满足睡眠条件,模组仍然会维持 10s 的唤醒状态;若持续输入间隔小于 10s 的 AT 命令,模组在发送 AT 命令期间将持续维持唤醒,直到最后一条 AT 命令输入完成后 10s,模组才能在满足睡眠条件下进入睡眠;若要实 现发送完最后一条 AT 命令立即进入深/浅睡眠,可输入 AT*ENTERSLEEP 。 ① 输入 " AT " 唤醒 [2] :输入的首个 AT 只做唤醒中断,而不做响应,第二个 AT 才会响应。CMIOT规 定只可以输入 AT 唤醒浅睡眠,并待第二个 AT 响应返回 OK,方可输入其他 AT 命令进行操作,规定用 法如下: //模组处于浅睡眠状态 AT //输入AT唤醒浅睡眠 //首条AT只做中断唤醒,不会响应返回OK或者error AT //输入第二条AT确认浅睡眠是否唤醒 OK //返回OK,浅睡眠已唤醒,可以进行其他操作 ② 触发 WAKEUP_IN 低电平(可通过 AT*WAKETIME 指令配置唤醒时长); ## 4.开关睡眠 ### 4.1.关闭睡眠 关闭睡眠以后,模组将维持在唤醒状态。 例如: ```` AT+SM=LOCK //关闭睡眠,模组维持唤醒状态,输入AT命令有响应 //仅生效一次,重启或深睡眠唤醒后该设置失效 OK AT+SM=LOCK_FOREVER //永久关闭睡眠,模组维持唤醒状态,输入AT命令有响应 //重启模组后该设置依然生效 OK ```` ### 4.2.打开睡眠 例如: ```` AT+SM=UNLOCK //打开睡眠,模组会进入相应的深睡眠或浅睡眠模式 //仅生效一次,重启或深睡眠唤醒后该设置失效 OK AT+SM=UNLOCK _FOREVER //永久打开睡眠,模组会进入相应的深睡眠或浅睡眠模式 //重启模组后该设置依然生效 OK ```` ## 5.睡眠状态指示 ### 5.1.深度睡眠唤醒状态指示 判断模组是否处于深睡眠状态有两种方法: 1.通过 WAKEUP_OUT 输出电平判断; 2.通过 URC 上报消息判断; 两种方法均默认关闭,需要输入相关 AT 命令进行设置。 ① 通过 WAKEUP_OUT 输出电平判断使能 WAKEUP_OUT 引脚功能: AT+CMSYSCTRL=1,1 //使能WAKEUP_OUT引脚 OK WAKEUP_OUT 输入电平与深睡眠状态对应关系如下: ![image.png](https://cos.easydoc.net/84373768/files/k47t8j45.png) ② 通过 URC 上报消息判断。 例如: ```` AT*MATWAKEUP=1 //使能深度睡眠唤醒提示功能 OK AT*SLEEP=1 //使能进入深度睡眠提示功能 OK *GOTOSLEEP //进入深度睡眠模式 *MATWAKEUP //深度睡眠被唤醒 ```` ### 5.2浅睡眠唤醒状态指示 判断模组是否处于浅睡眠只能通过 STATE 输出电平进行判断,暂无 URC 上报功能。STATE 默 认关闭,需要输入相关 AT 命令进行设置。 通过 STATE 输出电平判断 使能 STATE 引脚浅睡眠指示功能: AT+CMSYSCTRL=0,1 //使能STATE引脚,并设置为浅睡眠指示功能 OK STATE 输入电平与浅睡眠状态对应关系如下: ![image.png](https://cos.easydoc.net/84373768/files/k47t8pya.png) ## 6.睡眠相关设置 ### 6.1WAKEUP_IN 唤醒时长设置 WAKEUP_IN 下降沿可唤醒深/浅睡眠,默认唤醒时长为 10s,若无网络相关业务发生且无其余AT 指令输入,10s 后模组将重新进入睡眠,可通过 AT*WAKETIME 来进行配置该唤醒时长。 注:若 WAKEUP_IN 下降沿唤醒睡眠后,做了网络相关业务,将更新 T3324 及 T3412 定时器,模组需同步 T3324 定时器才能进入深度睡眠。 **例如**: AT*WAKETIME=5 //设置WAKEUP_IN中断唤醒时长为5s OK ### 6.2 符合睡眠条件下,快速进入睡眠 ① 由于发送 AT 命令会维持模组唤醒 10s,若在符合 2.1.1 及 2.2.1 所述条件下,10s 内有 AT 命令发出,会造成模组推迟进入深/浅睡眠,此时可通过 AT*ENTERSLEEP 快速进入睡眠。 例如: ```` AT*SLEEP=1 //使能进入深度睡眠提示功能 OK AT //T3324即将到期时输入AT,将维持唤醒10s OK AT*ENTERSLEEP //立即进入深睡眠 OK ·*GOTOSLEEP //进入深度睡眠模式 ```` ② 若在符合2.1.1 及 2.2.1 所述条件下,WAKEUP_IN 唤醒深/浅睡眠后,将维持唤醒相应的时 长,唤醒期间若无业务发送及 TAU 到期,此时可通过 AT*ENTERSLEEP 快 速进入睡眠。 ```` AT*MATWAKEUP=1 //使能深度睡眠唤醒提示功能 OK AT*SLEEP=1 //使能进入深度睡眠提示功能 OK *GOTOSLEEP //进入深度睡眠模式 *MATWAKEUP //WAKEUP_IN唤醒 AT*ENTERSLEEP //立即进入深睡眠 OK *GOTOSLEEP //进入深度睡眠模式 ````