基于SDK 5.0.3,对于DA14580扩展睡眠和BLE定时器唤醒,现在对我来说没有问题。
但是我必须让DA14580进入深度睡眠,让BLE定时器醒来。当然,固件被刻录到OTP中。
基于BLE定时器唤醒的extend sleep项目,我按照文档Training_04_sleep_modes_current_measurement_v1.0将其改为deep sleep。
然后烧成OTP。我发现在BLE定时器后DA14580无法从深度睡眠中醒来。
你能给我一个带BLE定时器唤醒的深度睡眠演示吗?(不深度睡眠,按键醒来)
谢谢你!
设备:
嗨xuguizhong,
使用ble_app_sleep模式,请检查以下更改,以便在深度睡眠模式下操作,并通过定时器唤醒:
完成以上步骤后,你就可以出发了。
由于MT_dialog
嗨MT_dialog
谢谢你的反馈。
我的软件是基于项目ble_app_barebone的SDK 5.0.3,使用RCX。
我发现它已经在“user_app_adv_start”函数中创建了一个计时器。
这个计时器已经在RETENTION MEMORY中定义。
这很好,对吧?
我的问题:
在我现有的软件中,它可以进入深度睡眠(在Mutimeter中电流可以显示800nA)。
也可以在BLE定时器(例如,1秒)后唤醒(通过示波器监测电流)。
但是,在醒来后,它不能成功地继续跑步。没有广告,就不能再睡觉。
保持较高的电流,例如,在mumeter 600 uA。
当然,如果一切都确定了,我会再烧一个去测试。
请问我是否需要从5.0.3移植到SDK 5.0.4 ?
空白user_app_adv_start(空白)
{
//安排下一个广告数据更新
app_adv_data_update_timer_used = app_easy_timer(APP_ADV_DATA_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有关,你将不得不检查设备在哪里结束和什么导致重置(检查你是否可以复制在开发模式下的深度睡眠,您不会看到所需的功耗,因为系统ram仍在运行,但如果您可以在开发模式下复制这种情况,您可以更容易地跟踪问题的原因)。从你的代码已经贴我不要看错什么虽然我不能看到这个设备在永恒的睡眠,在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包使用”?
谢谢你!
嗨xuguiyhong,
你是否将OTP报头中的应用程序标志设置为“Yes”,以便主引导加载程序知道OTP中有fw ?
#定义是定义低功率设置的时钟,你的设备使用,如果你是在巴克配置然后RCX20 oscilator是一个有效的选择,你可以使用它,这个领域,你是如何使用(包)已经燃烧和标识的方案目前的580。
由于MT_dialog
嗨MT_dialog,
当然,我在OTP头中将应用程序标志设置为“Yes”。
除了深度睡眠醒来,一切都正常。
我已经试过各种方法了。但失败。
你能发给我一个带有BLE定时器唤醒深度睡眠(而不是按钮唤醒)的演示项目吗?
然后我把它烧进OTP进行测试。
谢谢你!
嗨xuguizhong,
在OTP报头中附加了app_ble_sleepmode的修改版本和计时器,设备将发布10秒,并休眠额外10秒,并通过内核计时器唤醒。
由于MT_dialog
嗨MT_dialog,
谢谢你的演示。
我已经把它烙进了OTP。它的工作原理。
我比较了我的软件和你的DEMO。下是不同的。
你能告诉我它们是否正确吗?
(
再一次,
1.我的软件可以工作在OTP与扩展睡眠模式。
2.在系统RAM调试模式下使用深度睡眠模式"#define CFG_DEVELOPMENT_DEBUG"
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)。
(根据你的演示从scope的波形,电源启动和第一个广告之间的时间大约是130ms,
但是深度睡眠时间大约是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吗?你可以看到,2秒是SDK中的默认值为了让XTAL32有时间安定下来,所以设备不会进入睡眠状态。如果设备没有正确解决,那么低功率时钟可能会导致系统上的不同类型的问题。还要注意,对于XTAL32来说,这个时间是必须的,而不是在使用内部RCX时。以外,我不该看到的东西可能会造成问题,排除不同模块依赖于您的项目,如果你不使用配置文件或安全消息的API可以排除这些模块,代之以定制functionallity,对于不同类型的广告,这将不会影响你,CFG_BOOT_FROM_OTP只从sysram读取OTP值,而不是直接从OTP读取。
由于MT_dialog
谢谢你!
我正在使用内部RCX。(#define CFG_LP_CLK LP_CLK_RCX20)
我可以设置系统启动睡眠延迟为0吗?
如果不是,最小值是多少?
嗨xuguizhong,
因为你正在使用RCX,所以没有必要等待两秒钟为了XTAL32解决,因为你没有一个。在你之前的帖子中你提到了一些我不明白的事情,你说的“在醒来后第一次不能抓住港口”到底是什么意思?
由于MT_dialog