⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
2个职位/ 0个新职位
最后发表
point85
离线
最后看到:1年2个月前
加入:2018-06-29 15:31
休眠时的睡眠电流

你好,

我在DA14682和DA14681上做了一些关于休眠功能的测试。

我一直在使用功率测量文档中指定的布勒-adv示例。我已经将睡眠模式改为“pm_mode_hibernate”。

当DA14681基本开发套件上的设备处于休眠状态时,我测量的电流约为192uA。

在DA14682的生产PCB上,我测量的睡眠电流约为200uA。

在我看来,有些东西无法完全入睡,可能是闪光?什么好主意吗?

提前谢谢。

设备:
PM_Dialog
离线
最后看到:1周5天前
工作人员
加入:2018-02-08 11:03
嗨point85,

嗨point85,

一般来说,为了让系统进入休眠模式,你应该确保:

  1. 所有任务都处于IDLE状态
  2. 没有密集的写flash操作
  3. 定时器处于IDLE状态
  4. 没有中断活动(例如将传感器置于睡眠/关机模式)
  5. 不应附加调试器

上面的任何语句都将阻止系统休眠,因此将发生冷启动。您可以在ble_peripheral示例的ble_peripheral_task.c中进行以下修改。

1.设置一个OS_TIMER()以在15秒后停止广告:

PRIVILEGED_DATA static OS_TIMER hibernation_timer;static void hibernation_timer_cb (OS_TIMER timer) {ble_gap_adv_stop();}

2.在ble_peripheral_task中启动定时器:

/*创建15秒后进入休眠的定时器*/ hibernation_timer = OS_TIMER_CREATE("hibernate", OS_MS_2_TICKS(15000), OS_TIMER_FAIL, (void *) OS_GET_CURRENT_TASK(), hibernation_timer_cb);OS_ASSERT (hiberbation_timer);OS_TIMER_START (hiberbation_timer OS_TIMER_FOREVER);

3.计时器到期时,广告将停止,因此handle_evt_gap_adv_completed()将被触发,系统将进入休眠状态。

Static void handle_evt_gap_adv_completed(ble_evt_gap_adv_completed_t *evt) {ble_reset();hw_cpm_trigger_sw_cursor ();pm_set_sleep_mode (pm_mode_hibernation);}

谢谢,PM_Dialog