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

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

亲爱的对话框,

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

谢谢。

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

嗨brent_zheng,

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

谢谢,PM_Dialog

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

亲爱的先生,

我的项目的设计是:

1.安装电池时,设备将深入睡眠;

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

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

谢谢。

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

如果某些RAM空间可以在从深度睡眠期间保持数据,我可以在进入深度睡眠之前设置一些状态。

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

PM_Dialog
离线
最后看到:14小时前1天
工作人员
加入: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下再次启动(RESET上的电源)或外部唤醒中断情况。

ext_wakeup à外部唤醒中断标志:

  • true:外部中断可以唤醒并重新启动系统
  • False:没有外部中断可以唤醒和重启系统

谢谢,PM_Dialog

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

亲爱的先生,

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

谢谢。

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

我的SDK是6.0.4

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

亲爱的先生,

你对我的问题有什么看法吗?如何通过深睡眠唤醒设备是否亮起。

期待您的回复。

最好的问候,

布伦特郑

PM_Dialog
离线
最后看到:14小时前1天
工作人员
加入: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周19小时前
加入:2017-08-25 07:50
亲爱的先生,

亲爱的先生,

感谢您的详细回复。我下载6.0.10 SDK并检查BLE_APP_SLEEPMODE示例,在此示例中没有深度睡眠,只延长睡眠。在我的代码中,我们将深度睡眠和刻录代码进入闪存,我们可以通过按钮按下深睡眠并唤醒,那些功能工作正常。在这种情况下,系统将执行冷启动,代码将从Flash复制,所以它仍然可以调用从Wkupct_Register_Callback()注册的回调?

谢谢。

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

嗨brent_zheng,

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

谢谢,PM_Dialog

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

亲爱的先生,

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

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

使用SPI闪光

已配置键按深度睡眠。该设备可以达到深睡眠并唤醒深度睡眠。

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

希望我下次可以获得最终答案,非常感谢你!

PM_Dialog
离线
最后看到:14小时前1天
工作人员
加入: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重置/深度睡眠中醒来

void user_app_on_init(void){... / *检查我们是否从POR或HW重置/休眠时醒来,这是我们第一次唤醒更改值并转到休眠,因为POR_TIMER_REG的值是默认值,这意味着它我们从POR * / if(gpio_getportime()== 0x18)唤醒{gpio_setportime(0x19);/ *配置awake pin * / arch_set_deep_sleep(true);否则/ *配置awake pin * ...}

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

谢谢,PM_Dialog

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

亲爱的先生,

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

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

亲爱的先生,

好的,测试如果确定。第一次开机,数据是0x18。并唤醒深度睡眠/硬件复位,数据为0x19。

谢谢。

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

嗨brent_zheng,

很高兴你识上你的问题,谢谢你接受我的答案。

谢谢,PM_Dialog