我的项目是从DSPS项目修改。我的配置如下
const static sleep_state_t app_default_sleep_mode = arch_deep_sleep_on;
# undef CFG_BOOT_FROM_OTP
# undef CFG_MEM_MAP_EXT_SLEEP
#define cfg_mem_map_deep_sleep.
#undef cfg_development_debug.
静态const struct advertise_configuration user_adv_conf = {
.............
///广告的最小间隔
.intv_min = MS_TO_BLESLOTS(10000), // 100ms (160*0.625ms)
///最大发布间隔
.intv_max = ms_to_bleslots(10000),// 100ms(160 * 0.625ms)
......
}
我的睡眠api定义如下
app_easy_gap_disconnect (spss_env.con_info.conidx);
power_off_humi_sensor();
app_easy_gap_advertise_stop();
arch_set_deep_sleep ();
arch_ble_ext_wakeup_on ();
为了便于测试,我将这些代码放在user_on_connection函数中,如下所示
Void user_on_connection(uint8_t connection_idx, struct gapc_connection_req_ind const *param)
{
app_easy_gap_disconnect (spss_env.con_info.conidx);
power_off_humi_sensor();
app_easy_gap_advertise_stop();
arch_set_deep_sleep ();
ARCH_BLE_EXT_WAKEUP_ON();
}
当连接代码时,通过Printf我已经看到了user_on_disconnect在执行后执行
app_easy_gap_disconnect(spss_env.con_info.conidx);
但该器件不睡眠深入睡眠。当前是1.46mA
还存在一个奇怪的问题,我的JTAG可以在调试中使用,虽然我打开宏Const static sleep_state_t app_default_sleep_mode = arch_deep_sleep_on;
我花了3天的时间为我的产品实现了深度睡眠模式,在论坛上看到了很多话题,包括UM-B-006和traning_04,但是仍然很混乱。在论坛上,我发现有人只有配置宏才能实现睡眠。不需要使用一些API像arch_set_deep_sleep()来支持它?如果需要,traning_04的详细信息是有误导性的。
如果你能给我一个详细的指导,我会非常伟大。谢谢你的重播!
我把代码放在主要,也没有使用
int main_func(空白)
{
sleep_mode_t sleep_mode;
//全球初始化
system_init ();
/*
************************************************************************************
*平台初始化
************************************************************************************
* /
arch_set_deep_sleep ();
ARCH_BLE_EXT_WAKEUP_ON();
而(1)
{
做 {
//安排所有待处理的事件
schedule_hile_ble_on();
}
嗨RandyYu,
我不确定在深度睡眠模式下的DSPS是否会正常运行,因为只有扩展睡眠模式是支持的,正如在应用说明(介绍部分)中所指出的,我有一些试验与你的修改,它甚至没有宣传。arch_set_deep_sleep()函数和arch_set_extended_sleep()函数用于在操作时动态改变设备的睡眠模式,只需将ARCH_DEEP_SLEEP_ON放置在app_default_sleep_mode中就足以进入深度睡眠。也为了正确操作深度睡眠你将燃烧你的代码OTP为了OTP镜像,在发展模式和没有OTP燃烧设备在延长睡眠模式,但是目前你看到永久睡眠是太多了。您可以在开发套件上运行项目,并在断开连接后检查设备是否进入睡眠模式。
谢谢mt_dialog.
我有一个da14580devkt-b,电路板与traning_04使用不同,你能告诉我如何测量当前。最好给我一个关于董事会的PDF。
而且我想知道哪个版本的Dev套件是最新的,如何购买?我在中国。
谢谢你
正如您所说的,“只是通过将Arch_Deep_sleep_on放在App_default_sleep_mode中足够深入睡眠”
我有个问题,在什么地方,什么时候把设备设置为休眠状态(代码)?我使用Jatg在WFI()之前添加一个断点,但是程序不能在这里执行。所有的睡眠事件不都是在这个姿势下进行的吗?
是否存在一些特殊的GPIO请求在睡眠模式下配置?
如果芯片落在睡眠模式下,并且电流是leg(1.4mA),通常会导致这个问题的原因是什么?
嗨RandyYu,
培训的套件是您使用的Pro套件和套件是基本套件,它们的主要区别是Pro套件包括的功率测量电路。除了电路板几乎是相同的标题,以便测量功耗。Pro套件(具有电源测量电路的Pro套件是与智能片段上的电源分布器兼容的那个)。
该设备在主循环中执行一系列检查,如果有挂起消息,请检查内核的队列如果它计算睡眠持续时间的量。
不,GPIO不涉及从SDK的睡眠过程,我的意思是你可以设置一个GPIO来唤醒你的设备,但这是默认情况下没有实现的,DSPS也没有实现它。关于1.4毫安,你看到的是足够的DSPS即使不睡觉,你确定580是消耗的电力,而不是连接的传感器?
谢谢mt_dialog.
感谢您的重播,我已经检查了问题,APOSES indciate LED消耗了很多电源,当删除它时,它仍然很多时间调试,我发现程序不能超出(BLE_IS_POWERED())。
我想知道这个功能的三个术语
静态内联bool ble_is_powered()
{
return (GetBits16(CLK_RADIO_REG, BLE_ENABLE) == 1) && \
(getBits32(BLE_DEEPSLCNTL_REG,Deep_sleep_stat)== 0)&&
! (rwip_prevent_sleep_get () & RW_WAKE_UP_ONGOING));
}
Q1:用户需要考虑哪一个,需要我编写setbits16(clk_radio_reg,ble_enable,0)?或者所有这些都由核心事件处理,我不需要关心?
Q2:我还没有在da14580_ds_v3.3中找到ble_deepslcntl_reg.w.这是什么意思?
我的睡眠是如下配置,它在user_on_connection中调用
app_easy_gap_disconnect (spss_env.con_info.conidx);
app_easy_gap_advertise_stop();
power_off_humi_sensor();
ARCH_BLE_EXT_WAKEUP_ON();
arch_set_deep_sleep ();
lock_sleep_mode = true;
我也有测试后system_init();
arch_turn_peripherals_off (mode_deep_sleep);
注射用水();
在两个句子之后。我可以测量电流为6.5μA,所以我认为我的电路板是OK,大电流不包括传感器消耗
很高兴告诉你,我只是把它的问题加剧了。我将其修改为扩展DSP Project.I成功的睡眠模式,
但也有一些问题
1.如何配置睡眠时间,我希望它睡得更长?
2.是否有一个参数来控制广告时间?因为我发现登广告的时间很短。
3.在advertise_configuration struct中介绍了什么是intv_min和intv_max?
我并不真正了解广告意义的最低/最大间隔!
它是否可以是广告间隔的固定值?
4.我在电路板中使用DIP开关,当它开启时,DA14580引脚将读取高电平。但是当开关打开时,我发现了,电流将变大,更多更大。
你能告诉我睡觉前和起床后该怎么做吗
感谢您的帮助。
嗨RandyYu,
如我之前的帖子所示,DSP不设计用于在深度睡眠模式下运行,无论如何都很高兴您达到了目标。
1)关于睡眠时间,您选择广告的时间越长,您的间隔越多,您将越多,您将越多,所以更大的广告间隔,更大的连接间隔意味着更多的睡眠时间。
2)是的,你可以在user_config.h文件的。intv_min和。intv_max成员中改变user_adv_conf结构中的发布参数。
请检查答案2。关于最小值和最大值,你可以将它们设置为相同的值,以便有一个固定的发布间隔。BLE规范使用广告中的最小和最大值的原因是为了给控制器一些填充,以便确定给定其他活动的最佳广告间隔。
4)我不太接受你的问题,我想有一些泄漏导致这个额外的电流,你可以重新配置交换机的输入引脚,以避免在退出时使用runtimer期间的GPIO_CONFIGUREPIN()避免这种效果。进入睡眠模式。
谢谢mt_dialog.