我的项目是从DSPS项目的修改.MY配置如下所示
const static sleep_state_t app_default_sleep_mode = ARCH_DEEP_SLEEP_ON;
#undef cfg_boot_from_otp.
#undef cfg_mem_map_ext_sleep.
#定义CFG_MEM_MAP_DEEP_SLEEP
# undef CFG_DEVELOPMENT_DEBUG
static const struct _configuration user_adv_conf = {
.............
///最小广告间隔
.intv_min = ms_to_bleslots(10000),// 100ms(160 * 0.625ms)
///广告的最大时间间隔
.intv_max = MS_TO_BLESLOTS(10000), // 100ms (160*0.625ms)
......
}
我的Sleep 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。46毫安
还有一个奇怪的问题,我的Jtag可以在调试中使用,尽管我打开宏const static sleep_state_t app_default_sleep_mode = ARCH_DEEP_SLEEP_ON;
我有3天的成本来实现我的产品的深度睡眠模式,众多论坛上的主题已经看到并包括UM-B-006和Traning_04,但仍然非常混乱。在论坛中,我发现某人只配置宏可以实现睡眠。不需要使用arch_set_deep_sleep()等一些api来支持它?如果需要,Traning_04的Deatils正在误导。
如果您能给我详细的指导,我将非常感激。非常感谢您的回复!
我把代码放在主,也没有用
int main_func(void)
{
sleep_mode_t sleep_mode;
/ /全局初始化
system_init();
/ *
************************************************************************************
*平台初始化
************************************************************************************
*/
ARCH_SET_DEEP_SLEEP();
arch_ble_ext_wakeup_on ();
而(1)
{
{做
//调度所有挂起的事件
schedule_while_ble_on ();
}
嗨兰迪宇,
我不确定在深度睡眠模式下的DSP将正常运行,因为只支持延长的睡眠模式,如应用说明(简介部分)所示,我的修改甚至没有宣传了我的修改。ARCH_SET_DEEP_SLEEP()函数和ARCH_SET_EXTEDDE_SLEEP()函数用于在操作时动态更改设备的睡眠模式,仅通过将ARCH_DEEP_SLEEP_ON放置在APP_DEFAULT_SLEEP_MODE中足以深入睡眠。还为了在深度睡眠中正确运行,您将不得不在OTP中刻录您的代码,以便为OTP镜像发生,在开发模式下,没有OTP刻录设备处于扩展的睡眠模式,但仍然是您所看到的电流睡眠太多了。您可以在DEV套件上运行项目,并在断开连接后检查设备是否进入睡眠模式。
由于MT_dialog
我有一个DA14580DEVKT-B,所用的板与Traning_04不同,你能告诉我如何测量电流吗?最好给我一份关于董事会的PDF文件。
我想知道哪个版本的dev kit是最新的,如何购买?我在中国。
谢谢你!
就像你说的“只要将ARCH_DEEP_SLEEP_ON放在app_default_sleep_mode中就足以进入深度睡眠”
我有一个问题,在哪里以及将设备设置为睡眠状态(代码)?我使用jatg在wfi()之前添加一个断点,但程序无法在此处执行。如果不是所有睡眠事件在此职位的过程中都无法执行。
通用GPIO在休眠模式下配置是否有特殊要求?
如果芯片已经进入休眠模式,且电流较大(1.4ma),一般是什么原因会造成这个问题?
嗨兰迪宇,
训练中的套件是专业套件,而你正在使用的套件是基本套件,它们的主要区别是专业套件包括的功率测量电路。除此之外,为了测量功耗,电路板几乎有相同的标头。专业工具包(一个有功率测量电路是一个兼容的智能片段电源分析器)。
设备在主循环中执行一系列检查,检查内核的队列,如果有挂起的消息,它计算睡眠持续时间的数量。
没有GPIO没有从SDK中涉及睡眠过程,我的意思是您可以设置GPIO以唤醒您的设备,但默认情况下不会实现这一点,DSP不会实现它。对于您看到的1.4毫安,即使在不睡觉时,您看到的DSP足够足够,您是否确定580正在消耗该电源而不是附件的传感器?
由于MT_dialog
谢谢你的回放,我检查了这个问题,一个功率指示led已经消耗了很多功率,当删除它,它仍然600-800 μA .经过多次调试,我发现程序不能退出while(ble_is_powered())。
我想知道函数的三项
ble_is_powered ()
{
返回((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)吗?或者它们都由core event处理,我不需要关心?
Q2:我也没有在DA14580_DS_V3.3中找到BLE_DEEPSLCNTL_REG。是什么意思?
我的睡眠配置如下所示,它在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_PERITERALS_OFF(MODE_DEEP_SLEEP);
WFI();
在两个句子之后。我测量的电流是6.5μA,所以我认为我的板是ok的,大电流不包括传感器消耗
很高兴告诉你,我刚刚解决了这个问题,我把它改成了DSPS项目的延长睡眠模式。我成功了,
但也有一些问题
1.如何配置睡眠时间,我想让它睡更长的时间?
2.指出有一个参数来控制广告时间?因为我发现广告时间很短。
3.intv_min和intv_max在advertise_configuration结构中是什么意思?
我不太明白最小/最大间隔的广告意义!
它可以是广告间隔的固定值吗?
4.我在电路板上使用了拨码开关,当拨码打开时,da14580引脚读数会高。但我发现当开关打开时,电流会变大,越开越大。
你能告诉我如何在睡觉前和醒来后处理它
谢谢你的帮助。
嗨兰迪宇,
正如我之前的帖子所指出的,DSPS不是为深度睡眠模式而设计的,无论如何,很高兴你达到了你的目标。
1)关于睡眠时间,你选择的广告时间越长,你的间隔时间越长,你就会睡得越多,所以更大的广告间隔时间,更大的连接间隔时间意味着更多的睡眠时间。
2)是的,您可以在user_config.h文件中在.intv_min和.intv_max成员处更改user_adv_conf结构中的广告参数。
3)请检查答案2.关于MIN和MAX值,您可以以相同的值设置它们,以便有修复广告间隔。BLE规范使用了这个Min和Max在广告中的原因,以便向控制器提供一些填充,以便纠正给予其他活动的最佳广告间隔。
4)我不太明白你的问题,我认为某种泄漏是造成这种额外的电流,你可以重新配置开关的输入引脚,以避免这种影响使用GPIO_ConfigurePin()在运行计时器期间,当退出或进入睡眠模式。
由于MT_dialog