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

了解更多常见问题解答教程

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

亲爱的Dialog,

在我的项目中,我想从深度睡眠模式下分开正常重置和唤醒。怎么做?

谢谢。

设备:
PM_DIALOG.
离线
最后一次露面:5小时42分钟前
员工
加入:2018-02-08 11:03
嗨Brent_zheng,

嗨Brent_zheng,

你能尝试更多地解释你的问题吗?如果您能够澄清它,以便理解您想要实现的目标是非常有帮助的。

谢谢,PM_DIALOG.

布伦特朱胜
离线
最后一次露面:7个月1周前
加入:2017-08-25 07:50
亲爱的先生,

亲爱的先生,

我的项目设计是:

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

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

因为从深度睡眠唤醒与正常重置相似,所以我想知道有没有办法分开它们?

谢谢。

布伦特朱胜
离线
最后一次露面:7个月1周前
加入:2017-08-25 07:50
如果一些内存空间可以

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

或者,如果某些寄存器可以通过正常电源复位,硬件故障,WDG,唤醒等读取电源,例如电源开启。它也可以在电源启动后读取寄存器。

PM_DIALOG.
离线
最后一次露面:5小时42分钟前
员工
加入:2018-02-08 11:03
嗨Brent_zheng,

嗨Brent_zheng,

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

ext_wakeupà外部唤醒中断标志:

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

谢谢,PM_DIALOG.

布伦特朱胜
离线
最后一次露面: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_DIALOG.
离线
最后一次露面:5小时42分钟前
员工
加入:2018-02-08 11:03
嗨Brent_zheng,

嗨Brent_zheng,

首先,我强烈建议您下载和使用我们最新的SDK for DA14585 / 6系列产品,该产品为6.0.10版,您可以轻松下载它形成支持门户。雷电竞官网登录之后,我的建议是看看位于\ projects \ target_apps \ ble_examples sdk路径下的sdk的ble_app_sleepmode示例。在此示例中,请检查APP_BUTTON_ENABLE()函数,在设备进入睡眠模式之前启用唤醒控制器。您可以选择与WKUPCT_ENABLE_IRQ()函数检测唤醒中断的GPIO。您还可以配置极性和拆除时间。由于设备进入睡眠状态,并且向唤醒控制器发送中断,因此将触发注册到WKUPCT_REGISTER_CALLBACK()的回调函数。所以,通过这种方式,您将知道检查是否从睡眠中醒来。如果你的计划是燃烧OTP,你能告诉我吗?为了从深度睡眠中唤醒,您的代码必须在OTP中,以便将其复制到Sysram,并在执行之后进行。当DA14585配置为在深度休眠模式下仅配置唤醒控制器或POR电路,根据所选选项,仍然接通。 The SysRAM blocks off, nothing is retained, so you will not be able to attach the debugger. If you want to wake up from the deep sleep, your code must be in the OTP, in order to be copied into the SysRAM, and after that will be executed.

谢谢,PM_DIALOG.

布伦特朱胜
离线
最后一次露面:7个月1周前
加入:2017-08-25 07:50
亲爱的先生,

亲爱的先生,

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

谢谢。

PM_DIALOG.
离线
最后一次露面:5小时42分钟前
员工
加入:2018-02-08 11:03
嗨Brent_zheng,

嗨Brent_zheng,

如果将固件刻录到SPI中,则首先在唤醒时执行引导加载程序,因此固件将被复制到RAM中。这就是这个程序工作的原因。

谢谢,PM_DIALOG.

布伦特朱胜
离线
最后一次露面:7个月1周前
加入:2017-08-25 07:50
亲爱的先生,

亲爱的先生,

是。所以从过去的消息交流中,你应该有我的情况。下面我会概述再次,你能给我一个关于如何知道设备是否通过深度睡眠唤醒的adifce?

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

使用SPI Flash.

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

问题是:从深度睡眠唤醒后,系统执行冷启动,类似于POR,WDT复位,硬复位和软复位。我不知道如何从任何地方获得电源。我检查了14585个规格,找不到与此相关的任何寄存器。是否有一些ARM寄存器会导致电源的原因,如果是如何阅读它?

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

PM_DIALOG.
离线
最后一次露面:5小时42分钟前
员工
加入:2018-02-08 11:03
嗨Brent_zheng,

嗨Brent_zheng,

定时器并且por_pin_reg是唯一的寄存器,它将在重置和深度休眠期间保留它们之间的值,并且如果未使用功能,可用于存储应用程序数据。por_timer_reg的默认值为0x18,因此您可以在应用程序中尽快检查(例如,设备启动后)Por_timer_reg的值。由于Por_timer_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/*配置唤醒引脚*..}

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

谢谢,PM_DIALOG.

布伦特朱胜
离线
最后一次露面:7个月1周前
加入:2017-08-25 07:50
亲爱的先生,

亲爱的先生,

非常感谢你!我会立即测试它。

布伦特朱胜
离线
最后一次露面:7个月1周前
加入:2017-08-25 07:50
亲爱的先生,

亲爱的先生,

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

谢谢。

PM_DIALOG.
离线
最后一次露面:5小时42分钟前
员工
加入:2018-02-08 11:03
嗨Brent_zheng,

嗨Brent_zheng,

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

谢谢,PM_DIALOG.