的帮助!的帮助!的帮助!不能进入深度睡眠模式

10个帖子/ 0个新
最后发表
RandyYu
离线
最后看到:2年10个月前
加入:2015-01-28 08:49
的帮助!的帮助!的帮助!不能进入深度睡眠模式

我的项目是从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正在误导。

如果您能给我详细的指导,我将非常感激。非常感谢您的回复!

设备:
RandyYu
离线
最后看到:2年10个月前
加入:2015-01-28 08:49
我把代码放在主要,是

我把代码放在主,也没有用
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 ();

MT_dialog
离线
最后看到:3个月6小时前
工作人员
加入:2015-06-08 34
嗨兰迪宇,

嗨兰迪宇,

我不确定在深度睡眠模式下的DSP将正常运行,因为只支持延长的睡眠模式,如应用说明(简介部分)所示,我的修改甚至没有宣传了我的修改。ARCH_SET_DEEP_SLEEP()函数和ARCH_SET_EXTEDDE_SLEEP()函数用于在操作时动态更改设备的睡眠模式,仅通过将ARCH_DEEP_SLEEP_ON放置在APP_DEFAULT_SLEEP_MODE中足以深入睡眠。还为了在深度睡眠中正确运行,您将不得不在OTP中刻录您的代码,以便为OTP镜像发生,在开发模式下,没有OTP刻录设备处于扩展的睡眠模式,但仍然是您所看到的电流睡眠太多了。您可以在DEV套件上运行项目,并在断开连接后检查设备是否进入睡眠模式。

由于MT_dialog

RandyYu
离线
最后看到:2年10个月前
加入:2015-01-28 08:49
我有一架DA14580DEVKT-B

我有一个DA14580DEVKT-B,所用的板与Traning_04不同,你能告诉我如何测量电流吗?最好给我一份关于董事会的PDF文件。

我想知道哪个版本的dev kit是最新的,如何购买?我在中国。
谢谢你!

RandyYu
离线
最后看到:2年10个月前
加入:2015-01-28 08:49
就像你说的"只需放置

就像你说的“只要将ARCH_DEEP_SLEEP_ON放在app_default_sleep_mode中就足以进入深度睡眠”
我有一个问题,在哪里以及将设备设置为睡眠状态(代码)?我使用jatg在wfi()之前添加一个断点,但程序无法在此处执行。如果不是所有睡眠事件在此职位的过程中都无法执行。

RandyYu
离线
最后看到:2年10个月前
加入:2015-01-28 08:49
有一些特殊的

通用GPIO在休眠模式下配置是否有特殊要求?
如果芯片已经进入休眠模式,且电流较大(1.4ma),一般是什么原因会造成这个问题?

MT_dialog
离线
最后看到:3个月6小时前
工作人员
加入:2015-06-08 34
嗨兰迪宇,

嗨兰迪宇,

训练中的套件是专业套件,而你正在使用的套件是基本套件,它们的主要区别是专业套件包括的功率测量电路。除此之外,为了测量功耗,电路板几乎有相同的标头。专业工具包(一个有功率测量电路是一个兼容的智能片段电源分析器)。

设备在主循环中执行一系列检查,检查内核的队列,如果有挂起的消息,它计算睡眠持续时间的数量。

没有GPIO没有从SDK中涉及睡眠过程,我的意思是您可以设置GPIO以唤醒您的设备,但默认情况下不会实现这一点,DSP不会实现它。对于您看到的1.4毫安,即使在不睡觉时,您看到的DSP足够足够,您是否确定580正在消耗该电源而不是附件的传感器?

由于MT_dialog

RandyYu
离线
最后看到:2年10个月前
加入:2015-01-28 08:49
谢谢你的重播,我有

谢谢你的回放,我检查了这个问题,一个功率指示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的,大电流不包括传感器消耗

RandyYu
离线
最后看到:2年10个月前
加入:2015-01-28 08:49
很高兴告诉你,我

很高兴告诉你,我刚刚解决了这个问题,我把它改成了DSPS项目的延长睡眠模式。我成功了,
但也有一些问题
1.如何配置睡眠时间,我想让它睡更长的时间?
2.指出有一个参数来控制广告时间?因为我发现广告时间很短。
3.intv_min和intv_max在advertise_configuration结构中是什么意思?
我不太明白最小/最大间隔的广告意义!
它可以是广告间隔的固定值吗?
4.我在电路板上使用了拨码开关,当拨码打开时,da14580引脚读数会高。但我发现当开关打开时,电流会变大,越开越大。
你能告诉我如何在睡觉前和醒来后处理它

谢谢你的帮助。

MT_dialog
离线
最后看到:3个月6小时前
工作人员
加入:2015-06-08 34
嗨兰迪宇,

嗨兰迪宇,

正如我之前的帖子所指出的,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