嗨对话框,
1.i使用'app_easy_gap_undircated_advertise_with_timeout_start(uint16_t延迟,void(* timeout_callback)'要做广告,然后在10秒后关闭它(延迟为10s),我在'静态void中添加'arch_set_sleep_mode(arch_set_sleep_mode(arch_deep_sleep_on)'app_easy_gap_advertise_stop_handler(void)'使da14580进入深睡眠,但它不会进入深睡眠。在DA14580可以进入深睡眠之前,我还需要关闭其他进程或功能吗?
以下是我固件的代码:
void app_easy_gap_undircated_advertise_with_timeout_start(uint16_t延迟,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_undircated_advertise_start();
}
静态void app_easy_gap_advertise_stop_handler(void)
{
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.
谢谢
嗨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函数作为回调,通过一个将设置一个计时器的函数,该函数将计算下一个唤醒并将发起广告,如下所示:
void set_the_timer(void)
{
app_easy_timer(1000,default_advertise_operation);
}
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()中的代码和App_easy_timer()复制。
还要对您的实现,您也可以查看BLE_APP_SLEEPMODE并使用内核定时器更改唤醒按钮以实现此操作。
谢谢mt_dialog.
嗨mt_dialog,
感谢您的回复。我使用VAM(当前仪表)来测量电流消耗。当DA14580进入深度睡眠模式时,我们从VAM读取〜10ua。如果DA14580没有进入睡眠,我们从VAM读取〜550UA。我们还使用手机检查DA14580是否广告。
在我们的固件中,我们的循环需要从 - AredFortise - >深睡眠 - >信标 - >深睡眠。
对于我们的应用程序,我们必须使da14580做一个cycle'app_easy_gap_undirected_advertise_start()'',睡眠模式和'app_easy_gap_non_connectable_advertise_start()',因此我无法在参考设计架构上基于我的固件。
1.)我可以使da14580进入深度睡眠模式吗?
2.)只要确认,DA14580只能进入“深度睡眠模式”如果图像被刻录为“OTP”?我目前在我们的光线上使用闪存,并且在睡眠/唤醒周期的部分时,电流达到10ua。我还观察到EVB上的10UA,具有相同的固件。我错过了什么?
谢谢,
亚历克斯
嗨rexdevelopment,
1)没有额外的方法可以将设备放入深度睡眠中,即我已经提到了。根据默认睡眠模式的设备将照顾睡眠并唤醒。10UA对于深度睡眠模式是相当多的一些,也许额外的电流来自您在自定义PCB上或在Dev套件上连接的另一个模块。由于我可以看到您的电路板上有闪光灯,可能额外的电流来自闪光灯。
2)是的,测试深度睡眠模式的唯一方法是刻录OTP并不要忘记拒绝CFG_Development_Debug,因为您没有设备不会强大的Sysram,它会像你一样延长睡眠。
谢谢mt_dialog.