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

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
16个员额/ 0个新员额
最后发表
brent_zheng
离线
最后看到:3周12小时前
加入:2017-08-25 07:50
如何知道设备从深度睡眠中醒来

亲爱的对话框,

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

谢谢。

设备:
PM_Dialog
离线
最后看到:1天8小时前
工作人员
加入:2018-02-08 11:03
嗨brent_zheng,

嗨brent_zheng,

你能尽量多解释一下你的问题吗?如果你能够澄清它以便理解你想要完成的任务,这将是非常有帮助的。

谢谢,PM_Dialog

brent_zheng
离线
最后看到:3周12小时前
加入:2017-08-25 07:50
亲爱的先生,

亲爱的先生,

我的项目设计是:

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

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

因为从深度睡眠中醒来就像正常重置一样,我想知道有什么办法把它们分开吗?

谢谢。

brent_zheng
离线
最后看到:3周12小时前
加入:2017-08-25 07:50
如果一些RAM空间可以保留

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

或某些寄存器能读取上电原因,如正常上电复位、硬件故障、wdg、唤醒等。也可以,开机后我就可以看寄存器了。

PM_Dialog
离线
最后看到:1天8小时前
工作人员
加入: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

brent_zheng
离线
最后看到:3周12小时前
加入:2017-08-25 07:50
亲爱的先生,

亲爱的先生,

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

谢谢。

brent_zheng
离线
最后看到:3周12小时前
加入:2017-08-25 07:50
我的SDK是6.0.4

我的SDK是6.0.4

brent_zheng
离线
最后看到:3周12小时前
加入:2017-08-25 07:50
亲爱的先生,

亲爱的先生,

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

期待你的回复。

最好的问候,

布伦特郑

PM_Dialog
离线
最后看到:1天8小时前
工作人员
加入:2018-02-08 11:03
嗨brent_zheng,

嗨brent_zheng,

首先,我强烈建议您下载并使用DA14585/6系列产品的最新SDK,版本为6.0.10。您可以从我们的支持门户轻松下载。亚博电竞菠菜在那之后,我的建议是看看ble_app_sleepmode SDK的例子,它位于\projects\target_apps\ble_examples SDK路径下。在本例中,请检查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

brent_zheng
离线
最后看到:3周12小时前
加入:2017-08-25 07:50
亲爱的先生,

亲爱的先生,

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

谢谢。

PM_Dialog
离线
最后看到:1天8小时前
工作人员
加入:2018-02-08 11:03
嗨brent_zheng,

嗨brent_zheng,

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

谢谢,PM_Dialog

brent_zheng
离线
最后看到:3周12小时前
加入:2017-08-25 07:50
亲爱的先生,

亲爱的先生,

是的。从过去的信息交流来看,你应该知道我的情况。下面我再总结一下,你能给我一个建议,关于如何知道设备是否在深度睡眠中醒来开机吗?

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

使用SPI闪光

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

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

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

PM_Dialog
离线
最后看到:1天8小时前
工作人员
加入: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

brent_zheng
离线
最后看到:3周12小时前
加入:2017-08-25 07:50
亲爱的先生,

亲爱的先生,

非常感谢!我马上测试一下。

brent_zheng
离线
最后看到:3周12小时前
加入:2017-08-25 07:50
亲爱的先生,

亲爱的先生,

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

谢谢。

PM_Dialog
离线
最后看到:1天8小时前
工作人员
加入:2018-02-08 11:03
嗨brent_zheng,

嗨brent_zheng,

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

谢谢,PM_Dialog