基于SDK 5.0.3,将DA14580做成带BLE定时器唤醒的延长睡眠,我现在没有问题。
但我必须让DA14580进入深度睡眠,BLE定时器醒来。当然固件会被刻录到OTP中。
基于BLE定时器唤醒延长睡眠的项目,我根据“Training_04_sleep_modes_current_measurement_v1.0”文档将其更改为深度睡眠。
然后把它烧成OTP。我发现通过BLE timer, DA14580无法从深度睡眠中醒来。
你能给我一个有BLE定时器唤醒的深度睡眠的演示吗?(未深度睡眠时按下醒键)
谢谢你!
设备:
嗨xuguizhong,
使用ble_app_sleep模式,请检查以下更改,以便在深度睡眠模式下操作,并通过计时器唤醒:
完成以上步骤后,你就可以开始了。
由于MT_dialog
嗨MT_dialog
感谢您的反馈。
我的软件是基于项目ble_app_barebone SDK 5.0.3,使用RCX。
我发现它在“user_app_adv_start”函数中创建了一个计时器。
这个定时器在RETENTION MEMORY中定义。
这是可以的,对吧?
我的问题:
在我现有的软件,它可以进入深度睡眠(电流可以显示800nA在Mutimeter)。
它也可以唤醒后BLE定时器(说,1秒)(监测电流示波器)。
但是,醒来后不能成功地继续跑步。没有广告,就再没有睡眠。
保持较高的电流,例如,600 uA的Mutimeter。
当然,如果一切都确定了,我会再烧一个来测试。
你能确认一下我的软件是否需要从5.0.3移植到SDK 5.0.4吗?
空白user_app_adv_start(空白)
{
//安排下一次广告数据更新
app_adv_data_update_timer_used = app_easy_timer(app_adv_data_update_update to, adv_data_update_timer_cb);
......
}
空白user_app_adv_undirect_complete (uint8_t状态)
{
//如果广告被取消,则更新广告数据并重新开始广告
if (status == GAP_ERR_CANCELED) / /取消取消
{
user_app_adv_start ();
}
}
嗨xuguizhong,
如果设备成功进入睡眠模式一次(你看到大约800 na万用表),然后你会发现在未来的能耗约为600 ua醒来意味着设备重置,所以我想,580年进入一个NMI_Handler或Hardfault处理程序。我不认为这是与你使用的SDK有关的东西,你必须检查设备在哪里结束,什么原因导致重置(检查如果你可以复制开发模式下的深度睡眠,你不会看到所需的功耗,因为syram保持在运行状态,但如果你可以在开发模式下复制该模式,你就可以更容易地跟踪导致问题的原因)。从你的代码已经贴我不要看错什么虽然我不能看到这个设备在永恒的睡眠,在adv_data_update_timer_cb()将取消广告和user_app_adv_undirect_complete(),它将重新启动后,将触发immidiatelly广告。
由于MT_dialog
嗨MT_dialog,
我已经测试了深度睡眠与开发,一切运行良好。
我在函数“adv_data_update_timer_cb()”、“user_app_adv_start()”和“user_app_adv_undirect_complete()”中添加了一些测试端口。它在开发模式下运行正常。
将其烧成OTP后,运行检查测试端口,
确认从OTP复制固件在深度睡眠后失败
你能给我一些提示吗?
在软件领域,
#定义CFG_LP_CLK LP_CLK_RCX20
在OTP报头中,“0X47F70 Package Used”的影响是什么?
谢谢你!
嗨xuguiyhong,
你是否在OTP报头中设置了应用标志为“Yes”,以便主引导加载程序知道OTP中有fw ?
#定义是定义低功率设置的时钟,你的设备使用,如果你是在巴克配置然后RCX20 oscilator是一个有效的选择,你可以使用它,这个领域,你是如何使用(包)已经燃烧和标识的方案目前的580。
由于MT_dialog
嗨MT_dialog,
当然,我在OTP报头中将应用程序标志设置为“Yes”。
任何事情都可以,除了在深度睡眠中醒来。
我已经试过做这件事的任何方法。但失败。
你能给我一个BLE定时器唤醒深度睡眠(不是按钮唤醒)的演示项目吗?
然后我把它烧成OTP测试。
谢谢你!
嗨xuguizhong,
附加了一个修改版本的app_ble_sleepmode和一个计时器以及OTP头,设备发布10秒,休眠10秒,并通过内核计时器唤醒。
由于MT_dialog
嗨MT_dialog,
谢谢你的演示。
我把它烧成了OTP。它的工作原理。
我把我的软件和你的演示做了比较。下是不同的。
你能告诉我它们是否正确吗?
(
再一次,
1.我的软件可以在延长睡眠模式的OTP工作。
2.在系统RAM调试模式和深度睡眠模式下工作
3.在OTP版本中,它可以进入深度睡眠,经过BLE定时器后,它可以触摸唤醒动作(唤醒后不能捕捉端口初始化)。
但不能一直跑。
)
1.不同的文件“user_modules_config.h”
#定义EXCLUDE_DLG_GAP (0)
#定义EXCLUDE_DLG_TIMER (0)
#定义EXCLUDE_DLG_MSG (1)
#定义EXCLUDE_DLG_SEC (1)
#定义EXCLUDE_DLG_DISS (1)
#定义EXCLUDE_DLG_PROXR (1)
#定义EXCLUDE_DLG_BASS (1)
#定义EXCLUDE_DLG_FINDL (1)
#定义EXCLUDE_DLG_FINDT (1)
#定义EXCLUDE_DLG_SPOTAR (1)
#定义EXCLUDE_DLG_CUSTS1 (1)
#定义EXCLUDE_DLG_CUSTS2 (1)
2.系统启动休眠延迟设置不同
我已经在函数mnf_data_init()中调用了arch_startup_sleep_delay_set(0)。
(根据你的演示从范围的波形,电源启动时间从电源打开到第一个广告是大约130毫秒,
但深度睡眠时间约为2.11秒。所以我需要把它缩短为0延迟)
3.广告类型不同。
我已经将无向广告更改为不可连接广告。
说,
演示:
cmd = app_easy_gap_undirected_advertise_get_active ();
...
app_easy_gap_undirected_advertise_start ();
我的软件:
cmd = app_easy_gap_non_connectable_advertise_get_active ();
....
app_easy_gap_non_connectable_advertise_start ();
4.不同的文件"da1458x_config_advanced.h"
#定义CFG_BOOT_FROM_OTP
我在函数mnf_data_init()中添加了一个从OTP头读取数据的函数。
嗨xuguizhong,
我所看到的可能影响唤醒过程的事实是,您已经改变了设备启动时的默认睡眠时间,您在您的板上使用XTAL吗?您可以看到SDK中的默认值是2秒,这是为了给XTAL32留出一些时间,这样设备就不会进入睡眠状态。如果设备没有得到妥善解决,那么低功率时钟会导致系统上各种各样的问题。还要注意,这对于XTAL32是强制的,而在使用内部RCX时不是。以外,我不该看到的东西可能会造成问题,排除不同模块依赖于您的项目,如果你不使用配置文件或安全消息的API可以排除这些模块,代之以定制functionallity,对于不同类型的广告,这将不会影响你,和CFG_BOOT_FROM_OTP将只是读取syram的OTP值,而不是直接从OTP。
由于MT_dialog
谢谢你!
我使用内部的RCX。(#define CFG_LP_CLK LP_CLK_RCX20)
是否可以设置系统启动休眠时间为0 ?
如果不是,最小值是多少?
嗨xuguizhong,
由于您使用的是RCX,因此不需要等待两秒钟来解决XTAL32,因为您没有XTAL32。在你之前的帖子中,你提到了一些我不能理解的东西,你到底是什么意思“醒来后不能捕捉端口”?
由于MT_dialog