移远官网

BC26关闭Modem及快速进入深休眠

环境:BC26_OpenCPU_NB1_SDK_V1.5
问题:
1. 有没有办法关闭Modem部分,仅在需要发送数据时,才打开并附着网络;
2. 如何快速进入深休眠,目前通过RTC唤醒后,即使马上执行 AT+CFUN=0,也需要经过好几秒,功耗才降到uA级别,有没有哪里可以设置,使得进入深休眠的延时在毫秒级?

谢谢。

1、AT+CFUN=0可以关闭modem侧工作
2、CFUN0进入低功耗的方式已经最快,模组进入低功耗的条件是需要应用AP侧没有业务需要处理,modem侧进入PSM,当配置CFUN0后直接跳过modem侧,此时只要系统判断到模组所有task处理idle,即可进入,客户不主动操作AT的话,并且在执行完最后一条AT命令CFUN0后,再执行AT+QRELLOCK快速释放AT锁,一般可以做到2s内进入低功耗。 但是毫秒级别还是要看系统任务调度,不能保证。

AT+CFUN=0 和 AT+QRELLOCK 我都有试过,没啥用。

后来我换了中移物联的M5311模块,他们的SDK提供了两个接口,
opencpu_entersleep_mode(),可以立即进入休眠,
opencpu_waketime_set(),可以设定从睡眠状态唤醒后,重新进入休眠的时间,
实测可以达到我的目的,不知道移远有没有把这两个接口开放出来。

M5311也是用的MT2625芯片,进入低功耗的逻辑是一样的。需要modem侧进入PSM,AP侧进入idle。想要快速进入就是CFUN0,M5311命令做的功能就是类似CFUN0,关闭modem侧,这时候AP侧保证快速释放(AT+QRELLOCK)
opencpu_waketime_set()====>参考opencpu中的RTC接口可以实现这个功能。

休眠的逻辑我应该是清楚的,在我的测试场景中,RTC定时器唤醒后,modem侧应该还是处于PSM状态的,然后AP侧除了执行CFUN0和QRELLOCK,就是循环调用 Ql_OS_GetMessage(),这个API我猜是会Block当前任务的。
RTC只提供了定时器的相关接口,没看到设唤醒超时时间的接口。

1、Ql_OS_GetMessage(),这个API我猜是会Block当前任务的。
====>是的,一个阻塞接口,如果没有message需要处理,这时候就会阻塞并触发任务调度。
2、RTC只提供了定时器的相关接口,没看到设唤醒超时时间的接口。
====>模组进入低功耗后,通过RTC设置的时间来决定模组超时唤醒的时间。