如何知道设备是从深度睡眠中唤醒的

了解更多常见问题教程

16个职位/0个新职位
最后一篇文章
布伦特•郑
离线
最后一次见到:7个月1周前
已加入:2017-08-25 07:50
如何知道设备是从深度睡眠中唤醒的

亲爱的Dialog,

在我的项目中,我想分离正常复位和唤醒从深度睡眠模式。怎么做?

谢谢。

设备:
PM\U对话框
离线
最后一次见到:7小时21分钟前
工作人员
已加入:2018-02-08 11:03
你好,布伦特•郑,

你好,布伦特•郑,

你能再解释一下你的问题吗?这将是非常有帮助的,如果你能够澄清它,以了解你正试图完成。

谢谢,下午好

布伦特•郑
离线
最后一次见到:7个月1周前
已加入:2017-08-25 07:50
尊敬的先生:,

尊敬的先生:,

我的项目设计是:

1安装电池后,设备将进入深度睡眠状态;

2当用户按下连接到一个GPIO的键时,设备将被唤醒并启动。

因为从深度睡眠中醒来和正常的重置是相似的,我想知道有没有办法把它们分开?

谢谢。

布伦特•郑
离线
最后一次见到:7个月1周前
已加入:2017-08-25 07:50
如果一些内存空间可以

如果一些RAM空间可以在从深度睡眠中唤醒时保留数据,我可以在进入深度睡眠之前设置一些状态。

或者如果一些寄存器可以读取通电原因,如正常通电复位通电、硬件故障、wdg、唤醒等也可以,我可以在通电后读取寄存器。

PM\U对话框
离线
最后一次见到:7小时21分钟前
工作人员
已加入:2018-02-08 11:03
你好,布伦特•郑,

你好,布伦特•郑,

在深度睡眠模式下,所有电源域关闭,包括所有系统内存单元。无法保持可恢复的连接。系统将仅从外部中断(唤醒时硬件重置)或上电重置源唤醒。此外,在这种模式下还有一个OTP拷贝(如果从OTP引导)。在SDK6中,有一个可用的API,叫做arch\u set\u deep\u sleep(bool ext\u wakeup)。此API激活深度睡眠模式,系统可以在POR(上电复位)或外部唤醒中断条件下再次引导。

外部唤醒中断标志:

  • 正确:外部中断可以唤醒并重新启动系统
  • 错误:没有外部中断可以唤醒和重新启动系统

谢谢,下午好

布伦特•郑
离线
最后一次见到:7个月1周前
已加入:2017-08-25 07:50
尊敬的先生:,

尊敬的先生:,

是的,我知道深度睡眠的逻辑。我的问题是如何知道设备是否通过唤醒来开机?

谢谢。

布伦特•郑
离线
最后一次见到:7个月1周前
已加入:2017-08-25 07:50
我的SDK是6.0.4

我的SDK是6.0.4

布伦特•郑
离线
最后一次见到:7个月1周前
已加入:2017-08-25 07:50
尊敬的先生:,

尊敬的先生:,

你知道我的问题吗?如何通过从深度睡眠中醒来来知道设备是否开机。

期待您的回复。

顺致敬意,

布伦特·郑

PM\U对话框
离线
最后一次见到:7小时21分钟前
工作人员
已加入:2018-02-08 11:03
你好,布伦特•郑,

你好,布伦特•郑,

首先,我强烈建议您下载并使用我们针对DA14585/6系列产品的最新SDK版本6.0.10,您可以从我们的支持门户轻松下载。之后,我的建议是查看位于\projects\target\u apps\ble雷电竞官网登录\u examples SDK path下的SDK的ble\u app\u睡眠模式示例。在本例中,请检查app_button_enable()函数,该函数在设备进入睡眠模式之前启用唤醒控制器。您可以使用wkupct\u enable\u irq()函数选择可以检测唤醒中断的GPIO。您还可以配置极性和去抖动时间以及。由于设备进入睡眠状态,并且您向唤醒控制器发送中断,因此将触发注册到wkupct\u register\u callback()中的回调函数。这样,你就知道支票是否从睡眠中醒来了。你能告诉我你的计划是不是要烧掉OTP吗?为了从深度睡眠中醒来,您的代码必须在OTP中,以便被复制到SysRAM中,然后将被执行。当DA14585配置为深度睡眠模式时,根据所选选项,只有唤醒控制器或POR电路保持打开状态。如果系统内存被阻塞,则不会保留任何内容,因此您将无法附加调试器。如果你想从深度睡眠中醒来,你的代码必须在OTP中,这样才能被复制到SysRAM中,然后再被执行。

谢谢,下午好

布伦特•郑
离线
最后一次见到:7个月1周前
已加入:2017-08-25 07:50
尊敬的先生:,

尊敬的先生:,

谢谢你如此详细的答复。我下载了6.0.10SDK并检查了ble\u app\u sleepmode示例,在这个示例中没有深度睡眠,只有延长睡眠。在我的代码中,我们实现了深度睡眠,并将代码烧录到flash中,我们可以进入深度睡眠,然后按按钮唤醒,这些功能都很好地工作。在这种情况下,系统将执行冷启动,代码将从flash复制,因此它仍然可以调用从wkupct\u register\u callback()注册的回调吗?

谢谢。

PM\U对话框
离线
最后一次见到:7小时21分钟前
工作人员
已加入:2018-02-08 11:03
你好,布伦特•郑,

你好,布伦特•郑,

如果将固件烧录到SPI中,则在唤醒时首先执行引导加载程序,因此固件将被复制到RAM中。这就是为什么这个程序是有效的。

谢谢,下午好

布伦特•郑
离线
最后一次见到:7个月1周前
已加入:2017-08-25 07:50
尊敬的先生:,

尊敬的先生:,

对。所以从过去的信息交流中,你应该知道我的情况。下面我再做一次总结,你能告诉我如何知道设备是通过从深度睡眠中醒来来启动的吗?

当前SDK:6.0.4,如果需要我们可以升级

使用SPI闪存

已配置按键从深度睡眠中唤醒。设备可以进入深度睡眠并成功从深度睡眠中唤醒。

问题是:从深度睡眠中醒来后,系统执行冷启动,类似于POR、WDT reset、硬复位和软复位。我不知道如何从任何地方获得理性的力量。我检查了14585规范,找不到任何与此相关的寄存器。是否有一些ARM寄存器保持通电的原因,如果有,如何读取?

希望下次我能得到最终答案,非常感谢!

PM\U对话框
离线
最后一次见到:7小时21分钟前
工作人员
已加入:2018-02-08 11:03
你好,布伦特•郑,

你好,布伦特•郑,

这个定时器而POR_PIN_REG是唯一一个在重置和深度睡眠期间保留其值的寄存器,如果不使用该功能,则可以用来存储应用程序数据。POR\u TIMER\u REG的默认值是0x18,因此您可以在应用程序中尽快(例如在设备启动后)检查POR\u TIMER\u REG的值。因为POR\u TIMER\u REG的值是默认值,这意味着我们从POR中醒来。请检查一个非常简单的示例,以检查您是否从POR或HW重置/深度睡眠中醒来

void user_app_on_init(void){…/*检查我们是否从POR或HW重置/休眠中醒来这是我们第一次醒来更改值并进入休眠,因为POR_TIMER_REG的值是默认值,这意味着我们从POR*/if(GPIO_GetPorTime()==0x18){GPIO_SetPorTime(0x19);/*配置唤醒引脚*/arch\u set\u deep\u sleep(true);else/*配置唤醒引脚*..}

如果条件为真,那么寄存器的值将更改,设备将配置唤醒引脚并进入深度睡眠,等待外部唤醒,使设备处于深度模式状态。应用唤醒信号后,设备将重置,代码执行相同的检查,但条件将不再为真。

谢谢,下午好

布伦特•郑
离线
最后一次见到:7个月1周前
已加入:2017-08-25 07:50
尊敬的先生:,

尊敬的先生:,

非常感谢你!我马上测试。

布伦特•郑
离线
最后一次见到:7个月1周前
已加入:2017-08-25 07:50
尊敬的先生:,

尊敬的先生:,

好的,测试是否正常。第一次上电,数据为0x18。从深度睡眠/硬件重置中唤醒,数据为0x19。

谢谢。

PM\U对话框
离线
最后一次见到:7小时21分钟前
工作人员
已加入:2018-02-08 11:03
你好,布伦特•郑,

你好,布伦特•郑,

很高兴你解决了问题,谢谢你接受我的回答。

谢谢,下午好