扩展睡眠模式禁用/重新启用

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
14个帖子/ 0新
最后发表
AdamShier
离线
最后看到:5个月1个星期前
加入:2020-07-30 18:04
扩展睡眠模式禁用/重新启用

你好,

我试图得到延长睡眠工作在我的定制板与DA14581 MOD板。安装过程如下:

系统初始配置为extended_sleep,没有OTP Copy。唤醒是在一个按钮中断上配置的,它在第一次按下时唤醒系统。在醒来时,睡眠被禁用(使用arch_disable_sleep),所以我可以使用timer0每100毫秒采样一个传感器。extended_sleep将在7秒后重新启用。

定义一段时间后(约3 - 4秒),系统似乎就决定它应该回到extended_sleep,尽管它从来没有被重新启用,并根据arch_get_sleep_mode睡眠模式(0)。当然timer0不再运行,所以传感器不再是被采样。

如果我将系统配置为不使用extended_sleep,那么一切都会按照预期工作。同样,这个带有extended_sleep的系统在运行RAM(使用KEIL调试)时工作得很好,但在使用flash时就不行了。

你知道是什么引起的吗?

谢谢

设备:
AdamShier
离线
最后看到:5个月1个星期前
加入:2020-07-30 18:04
我设置了默认值

我设置了default_operation_adv = NULL,而不是像所有其他示例那样设置了user_app_adv_start。一旦把它放回user_app_adv_start,那么当广告运行时,它在flash中工作得很好。如果我等到广告完成后再按下按钮,它就会再次冻结。根据当前的消耗,当它冻结时,它看起来不是实际上在extended_sleep模式,实际上仍然在活动模式,只是停留在某处。

你知道为什么会这样吗?从我的角度来看,这一切都改变了,这是一开始的广告,而不是没有,但它的影响似乎不止于此。

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

嗨AdamShier,

感谢您在网上提出的问题,以及您对我们的TINY模块解决方案的兴趣。让我为您最初的帖子更改设备选择,因为选择的是DA14581而不是DA14531 TINY模块。

如果我的理解有误,请纠正:模块配置为EXT Sleep模式,在系统初始化时使用OTP拷贝——user_app_init()回调——并且唤醒控制器也被启用,以便通过GPIO触发器唤醒系统。当芯片醒来时,请问是否也开始广告?是否调用user_app_adv_start()回调?

>>>在定义的时间段(〜3-4秒)后,系统似乎只是决定它应该重新进入Extende_sleep,事件从未重新启用

那么,如果从System-RAM启动,在设备决定休眠后,可以在GPIO触发器后唤醒它吗?

你能检查一下定时器是否会导致"自动"睡眠吗?您将使用哪个SDK项目作为开发自己的应用程序的参考?

根据当前的消耗,当它冻结时,它看起来不是在extended_sleep模式,实际上仍然在活动模式,只是卡在某处。

是否有可能在调试模式下运行它,并检查代码是否会中断到断言,NMI等?

如果default_operation_adv = user_app_adv_start,那么DA4531将在系统初始化后自动开始发布。

谢谢,PM_Dialog

AdamShier
离线
最后看到:5个月1个星期前
加入:2020-07-30 18:04
模块配置在

模块配置为ext_sleep_mode没有OTP拷贝,user_app_init被用作.app_on_init,并且唤醒控制器被配置为使用GPIO作为从按钮唤醒。当芯片醒来时,它不会开始做广告,因为我已经有意识地删除了那个方面。user_app_adv_start()回调函数只在某人按住按钮10秒时调用。

我可以用GPIO触发器第一次把它从睡眠中唤醒。一旦它醒来,它将在3-4秒后冻结,除非广告启用,在这种情况下一切都将正常工作。

在调试模式下运行的问题是,在调试模式下一切都能正常运行,但从flash中运行时就不行了。

我理解default_operation_adv = user_app_adv_start在开始时自动启动广告的方面。我只是不确定为什么这似乎改变了代码的行为在定义的时期之后冻结,而不是像预期的那样工作。

就它所类似的基础项目而言,它将是睡眠模式的user_peripheral和proxy的组合。

AdamShier
离线
最后看到:5个月1个星期前
加入:2020-07-30 18:04
如果我

如果使用app_easy_timer()而不是将timer0设置为计数器,代码也可以正常工作。我知道timer0在扩展睡眠模式是禁用的,但我使用arch_disable_sleep()从按钮醒来,所以我不知道为什么这将是一个问题。

当从按钮中醒来时,计时器被完全重新初始化/配置,所以它看起来是正常启动的,但一段时间后,代码就停止了。

编辑:这一次从按钮醒来到冻结是2.7秒,非常一致。它绝对没有休眠,运行电流从200uA上升到300uA当冻结发生。

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

嗨AdamShier,

你是对的——当设备处于睡眠状态时,timer0是关闭的,因为所有的外围模块都是关闭的。您可以使用app_easy_timer()定期唤醒,因为它使用BLE计时器。你能不能检查一下这个设备在广告间隙是否处于休眠状态?我

在调试模式下运行的问题是,一切都能在调试模式下正常运行,但从flash中运行时就不行了。

当附加调试器时,这将防止系统进入任何睡眠模式。

您能解释一下您所说的设备在规定时间后冻结是什么意思吗?

由于是从flash引导的,所以可以使用arch_printf()在串行终端中打印一些调试信息。

谢谢,PM_Dialog

AdamShier
离线
最后看到:5个月1个星期前
加入:2020-07-30 18:04
当使用flash启动时,

当使用闪光灯启动时,当我没有按下按钮或在广告之间时,设备肯定会进入睡眠状态,睡眠电流下降到~10uA。

我使用printf来确定它被冻结了。当按下按钮时,sleep被禁用,timer0被启动并每100毫秒产生一个中断。中断处理程序所做的就是打印一个递增的索引。这个递增的索引工作了2.7秒,直到它停止,这就是为什么我知道它在2.7秒后一直冻结。

AdamShier
离线
最后看到:5个月1个星期前
加入:2020-07-30 18:04
这差不多解决了。

这差不多解决了。我不知道为什么2.7秒后它会冻结,或者为什么当广告启用时它还能工作,但现在当我移除了

如果(arch_ble_ext_wakeup_get())在按钮按回调。我认为它在示例项目中,因为按钮开始广告,它只有在广告完成时评估为真。所以对于我的项目来说,它不存在是有意义的。

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

嗨AdamShier,

缺省情况下,WDOG超时时间大约是2.6秒,所以我假设WDOD定时器过期了。

你运行的是带有调试器的吗?您还应该启用开发调试—CFG_DEVELOPMENT_DEBUG。

谢谢,PM_Dialog

AdamShier
离线
最后看到:5个月1个星期前
加入:2020-07-30 18:04
中没有定义wdog

配置文件中没有定义wdog,但是这些时间看起来太接近了,不可能是巧合。定义了CFG_DEVELOPMENT_DEBUG。当从flash运行时,问题会发生,并且无论是否附加调试器都会发生。

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

嗨AdamShier,

您能否在调试模式下定义WDOG并运行它?如果在正常模式下从系统RAM运行它(没有安装调试器),您是否可以复制此行为?随附调试器时,这会阻止系统睡眠状态。

谢谢,PM_Dialog

AdamShier
离线
最后看到:5个月1个星期前
加入:2020-07-30 18:04
所以我试着让

所以我尝试启用看门狗,这似乎也解决了它,而不是删除在唤醒回调中对arch_ble_ext_wakeup_get的检查。我在这里为大家总结一下这些组合:

如果你有

如果(arch_ble_ext_wakeup_get ())

arch_ble_force_wakeup ();
arch_ble_ext_wakeup_off ();
app_easy_wakeup ();

你想要禁用睡眠一段时间,然后在稍后的时间点重新启用睡眠,那么看门狗必须被启用。否则在唤醒后代码会在看门狗超时后冻结,仍然不确定到底为什么。还有一种情况是,当广告启用时,它将在设备广告时工作,然后将再次冻结时,无限的广告,你不会看到这个问题。

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

嗨AdamShier,

谢谢你的暗示,很高兴你把它修好了。

谢谢,PM_Dialog

jsageder
离线
最后看到:1个月3个星期前
加入:2018-08-22 13:18
嗨AdamShier,

嗨AdamShier,
我目前正在努力解决类似的问题,围绕外睡眠,按钮唤醒和周期性读取传感器值。你是否愿意分享一些代码与更多的信息,如你如何进入睡眠,你如何配置按钮按下唤醒/回调,..?
谨致衷心的感谢和良好的祝愿。
约瑟夫