如何知道设备从深度睡眠中醒来

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
16个员额/ 0个新员额
最后一篇
布伦特朱胜
离线
最后一次露面:1个月1个星期前
加入:2017-08-25 07:50
如何知道设备从深度睡眠中醒来

亲爱的对话框,

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

谢谢。

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

嗨Brent_zheng,

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

谢谢,PM_DIALOG.

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

亲爱的先生,

我的项目设计是:

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

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

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

谢谢。

布伦特朱胜
离线
最后一次露面:1个月1个星期前
加入:2017-08-25 07:50
如果一些RAM空间可以保留

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

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

PM_DIALOG.
离线
最后一次露面:2天5小时前
职员
加入:2018-02-08 11:03
嗨Brent_zheng,

嗨Brent_zheng,

在深度睡眠模式下,所有电源域关闭,包括所有SysRAM单元。无法维护BLE连接。系统只有在外部中断(HW在唤醒时复位)或上电复位源时才会唤醒。此外,在这种模式下有一个OTP副本(如果从OTP启动)。在SDK6中,有一个可用的API叫做arch_set_deep_sleep(bool ext_wakeup)。这个API激活深度睡眠模式,系统可以在POR(复位上电)或外部唤醒中断条件下再次启动。

ext_wakeupà外部唤醒中断标志:

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

谢谢,PM_DIALOG.

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

亲爱的先生,

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

谢谢。

布伦特朱胜
离线
最后一次露面:1个月1个星期前
加入:2017-08-25 07:50
我的SDK是6.0.4

我的SDK是6.0.4

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

亲爱的先生,

你对我的问题有什么想法吗?如何从深度睡眠中唤醒设备,判断设备是否开机。

期待你的回复。

最好的问候,

布伦特郑

PM_DIALOG.
离线
最后一次露面:2天5小时前
职员
加入: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.

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

亲爱的先生,

感谢您如此详细的回复。我下载6.0.10 sdk并检查ble_app_sleepmode示例,在这个示例中没有深度睡眠,只有扩展睡眠。在我的代码中,我们实现了深度睡眠,并将代码刻录到flash中,我们可以通过按按钮进入深度睡眠和唤醒,这些功能都很好。在这种情况下,系统将执行冷启动,代码将从flash中复制,所以它仍然可以调用从wkupct_register_callback()注册的回调吗?

谢谢。

PM_DIALOG.
离线
最后一次露面:2天5小时前
职员
加入:2018-02-08 11:03
嗨Brent_zheng,

嗨Brent_zheng,

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

谢谢,PM_DIALOG.

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

亲爱的先生,

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

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

使用SPI Flash.

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

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

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

PM_DIALOG.
离线
最后一次露面:2天5小时前
职员
加入:2018-02-08 11:03
嗨Brent_zheng,

嗨Brent_zheng,

POR_TIMER_REG并且por_pin_reg是唯一的寄存器,它将在重置和深度休眠期间保留它们之间的值,并且如果未使用功能,可用于存储应用程序数据。por_timer_reg的默认值为0x18,因此您可以在应用程序中尽快检查(例如,设备启动后)Por_timer_reg的值。由于Por_timer_reg的值是默认值,因此它意味着我们从POR中醒来。请检查一个非常简单的例子,以检查您是否从POR或HW复位/深睡眠中醒来

空白user_app_on_init(无效 ) { ... /* 检查如果我们醒来从冬眠或重置HW /这是我们第一次改变价值和去冬眠醒来因为POR_TIMER_REG的值是默认这意味着我们从* /如果醒来(GPIO_GetPorTime () = = 0 x18) {GPIO_SetPorTime (0 x19);/*配置唤醒pin */ arch_set_deep_sleep(true);Else /*configure awake pin *…}

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

谢谢,PM_DIALOG.

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

亲爱的先生,

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

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

亲爱的先生,

好的,测试是否可以。第一次上电,数据为0x18。从深度睡眠/硬件复位中醒来,数据是0x19。

谢谢。

PM_DIALOG.
离线
最后一次露面:2天5小时前
职员
加入:2018-02-08 11:03
嗨Brent_zheng,

嗨Brent_zheng,

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

谢谢,PM_DIALOG.