不能输入深度睡眠模式

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
4个帖子/ 0新
最后一篇
rexdevelopment.
离线
最后一次露面:2年12个月前
加入:2016-07-25 19:14
不能输入深度睡眠模式

嗨对话框,

1.我使用“app_easy_gap_undirected_advertise_with_timeout_start (uint16_t延迟,无效(* timeout_callback)(空白)”做广告,然后关闭它10秒(延迟是10 s)后,我添加一个“arch_set_sleep_mode (ARCH_DEEP_SLEEP_ON)”在“静态空app_easy_gap_advertise_stop_handler(空白)”DA14580进入深度睡眠,但它并不进入深度睡眠。DA14580是否需要关闭其他进程或函数才能进入深度睡眠?

以下是我固件的代码:
无效app_easy_gap_undirected_advertise_with_timeout_start(uint16_t delay, Void (*timeout_callback)(Void))
{

//停止当前运行的计时器
if(adv_timer_id!= easy_timer_invalid_timer)
app_easy_timer_cancel(avd_timer_id);
if(timeout_callback!= null)
adv_timeout_callback = timeout_callback;

avad_timer_id = app_easy_timer(delay,app_easy_gap_advertise_stop_handler);
app_easy_gap_undirected_advertise_start ();

静态孔隙app_easy_gap_advertise_stop_handler(空白)
{
app_easy_gap_advertise_with_timeout_stop ();

app_easy_gap_advertise_stop();

adv_timer_id = app_easy_timer(sleep_timeout,app_timeout_callback);

ARCH_SET_SLEEP_MODE(ARCH_DEEP_SLEEP_ON);

2.如果我将'app_easy_gap_undircted_advertise_start()'更改为'app_easy_gap_non_connectable_advertise_start()',则DA14580可以成功输入深度睡眠模式。是否不同的广告类型定义可以遵循的睡眠或空闲模式?

3.我发现这段代码使DA14580处于空闲模式。我如何知道哪些内核事件仍在运行(防止深度睡眠模式)?

rwip.c (Line323)
/ ************************************************************************
**************检查内核活动**************
************************************************************************ /
//检查某些内核处理是否正在进行中
如果(!KE_SLEEP_CHECK())
打破;

//可以启用处理器睡眠
proc_sleep = mode_idle;

dbg_swdiag(睡眠,algo,1);

4.如果我知道哪个事件仍在继续,我可以直接终止内核事件进入深度睡眠模式吗?

5.我可以强制深度睡眠模式,即使我不能识别或终止内核事件?

SDK5.0.3

谢谢

关键词:
设备:
mt_dialog.
离线
最后一次露面:4周1日前
职员
加入:2015-06-08 34
嗨RexDevelopment,

嗨RexDevelopment,

除了将App_default_sleep_mode更改为Arch_Deep_sleep_On和Off Course还是更改内存配置也没有其他进程或更改它所需的,以便设置FW以便深入睡眠。你怎么知道该设备无法深入睡眠,通过功耗检查它?你看到设备在广告上继续?另请注意,为了获得适当的功耗和测试深度睡眠模式,您必须使用#undefine CFG_Development_Debug并将图像中的图像烧毁,并与彩色应用程序标志一起烧毁OTP中的图像。亚博国际官网平台网址关于代码,app_easy_gap_undirected_advertise_with_timeout_start()将启动广告并设置计时器以完成广告过程,何时发生计时器,当时会发生App_easy_gap_advertise_stop_handler()以便停止广告并触发用户可能附加的回调。我没有得到你想在修改的app_easy_gap_advertise_stop_handler()中要做的事情,但是你再次在甚至停止前一个之前再次调用广告功能,并且您设置了计时器以便在指定时间唤醒。您可以尝试的是在app_easy_gap_undirected_advertise_with_timeOut_start()中的一个unull函数作为回调,通过一个将设置一个计时器的函数,该函数将计算下一个唤醒并将发起广告,如下所示:

空白set_the_timer(空白)
{
default_advertise_operation app_easy_timer (1000);

app_easy_gap_undirected_advertise_with_timeout_start(user_default_hnd_conf.advertise_period,set_the_timer);

没有不允许你睡觉的BLE事件,设备会醒来和睡眠取决于它可用的BLE事件,例如睡眠唤醒和广告返回睡眠,没有事件可以让设备长时间保持清醒,除非有多个事件需要设备服务,睡眠是不可能的。只有在应用程序端才能取消休眠模式。该设备将必须提供可用的事件,然后进入睡眠。我试图复制您的代码,在您在app_easy_gap_advertise_stop_handler()中设置的app_easy_timer()中,设备通过计时器断言停止。

同样关于你的实现,你也可以看一下ble_app_sleepmode,用一个内核定时器改变唤醒按钮来实现它。

谢谢mt_dialog.

rexdevelopment.
离线
最后一次露面:2年12个月前
加入:2016-07-25 19:14
嗨MT_dialog,

嗨MT_dialog,

谢谢你的回复。我使用VAM(电流计)来测量当前的消耗。当DA14580进入深度睡眠模式时,我们从VAM读取~10uA。如果DA14580没有进入睡眠,我们从VAM读取~550uA。我们也用手机检查DA14580是否在做广告。

在我们的固件中,我们的循环需要从 - AredFortise - >深睡眠 - >信标 - >深睡眠。

对于我们的应用程序,我们必须让DA14580执行一个循环'app_easy_gap_undirected_advertise_start()',睡眠模式和'app_easy_gap_non_connectable_advertise_start()',所以我不能基于参考设计架构的固件。
1.)我可以使da14580进入深度睡眠模式吗?
2.)只要确认,DA14580只能进入“深度睡眠模式”如果图像被刻录为“OTP”?我目前在我们的光线上使用闪存,并且在睡眠/唤醒周期的部分时,电流达到10ua。我还观察到EVB上的10UA,具有相同的固件。我错过了什么?

谢谢,
亚历克斯

mt_dialog.
离线
最后一次露面:4周1日前
职员
加入:2015-06-08 34
嗨RexDevelopment,

嗨RexDevelopment,

1)没有额外的方法可以将设备放入深度睡眠中,即我已经提到了。根据默认睡眠模式的设备将照顾睡眠并唤醒。10UA对于深度睡眠模式是相当多的一些,也许额外的电流来自您在自定义PCB上或在Dev套件上连接的另一个模块。由于我可以看到您的电路板上有闪光灯,可能额外的电流来自闪光灯。

2)是的,测试深度睡眠模式的唯一方法是刻录OTP并不要忘记拒绝CFG_Development_Debug,因为您没有设备不会强大的Sysram,它会像你一样延长睡眠。

谢谢mt_dialog.