进入和退出睡眠模式

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
16个员额/ 0个新员额
最后一篇
米肯
离线
最后一次露面:1个月前
加入:2016-07-13 20:06
进入和退出睡眠模式

关于睡眠模式的问题,我真的很困惑这是如何工作的。

如果我把它放在我的system_init()中:

pm_set_wakeup_mode(true);
pm_set_sleep_mode(pm_mode_extended_sleep);

我把它放在我的prvsetuphardware()中:

/*初始化唤醒定时器*/
hw_wkup_init(空);
hw_wkup_set_counter_threshold (1);
hw_wkup_set_debounce_time(10);
hw_wkup_register_interrupt(wkup_cb,1);

然后没有什么可以配置睡眠模式,右图?
一旦没有更多的BLE活动,设备将进入睡眠模式。
sinds我没有唤醒按钮,唯一可能的唤醒是在VBUS上有电源。

但是,我的设备将在启动后立即转到睡眠模式。即使我有


ble_gap_adv_intv_set(ble_adv_interval_from_ms(500),ble_adv_interval_from_ms(2000));
ble_gap_adv_data_set(sizeof(adv_data), adv_data, 0, NULL);
ble_gap_adv_start (GAP_CONN_MODE_UNDIRECTED);

配置在我的ble_peripheral_task()中。
btw我使用dk_apps / features / ble_perieral /作为我的项目的模板。

因此,据我所知应该有BLE活动,但设备进入睡眠模式。

我错过了什么?

设备:
mt_dialog.
离线
最后一次露面:6个月2个星期前
职员
加入:2015-06-08 11:34
嗨myken,

嗨myken,

您确定您所看到的是睡眠,而不是由于断言而导致设备卡住吗?SDK使设备保持8秒的睡眠模式,以便XTAL32解决,所以在启动时,设备应该保持活跃8秒的时间。SDK设置睡眠模式的成一个弗兰克-威廉姆斯,你要做的唯一的事就是set_pm_sleep_mode (pm_mode_extended_sleep),所有其他的配置,你只是醒来设备由一个特定的销(虽然你没有配置销,我不要看到hw_wkup_configure_pin()函数来指定一个销中断),既然你已经指示设备开始宣传,那么设备应该开始广告没有睡眠模式第一8秒,然后在每个广告间隔睡眠和醒来。

谢谢mt_dialog.

米肯
离线
最后一次露面:1个月前
加入:2016-07-13 20:06
好的,它清除了一点。

好的,它清除了一点。这让我有两个问题:

  1. 唤醒。您是正确的,我没有配置唤醒pin(没有hw_wkup_configure_pin())。原因是,我想使用VBUS中断唤醒。根据UM-B-044-DA1468x软件平台参考,我们可以“异步唤醒,从唤醒定时器或VBUS中断”。我找不到任何信息如何设置这个VBUS中断唤醒,所以我假设它总是启用的。这是正确的吗?我能把所有唤醒配置都去掉吗?
  2. 断言。pm_set_sleep_mode(pm_mode_active)工作正常,pm_set_sleep_mode(pm_mode_idle)工作正常。但是,如果我编程pm_set_sleep_mode(pm_mode_exted_sleep)并且我重置设备,它可以正常工作(据我所知),但是当我掉电时 - >电源它会被困住。SDK中的断言检查无效的参数和缺少配置,因此如果缺少的问题,如果缺少问题,则必须缺少一些缺少的东西。在进入延长睡眠模式之前是否需要填充任何预先填写条件?

谢谢

mt_dialog.
离线
最后一次露面:6个月2个星期前
职员
加入:2015-06-08 11:34
嗨myken,

嗨myken,

1)正如您所说,异步唤醒事件可以是唤醒定时器或VBUS,因为您只能从VBUS唤醒,这是由H / W配置的,您不必设置唤醒定时器。vbus_handler()将在您插入USB后立即发生,您还应将设备配置为充电器或作为数据DG_CONFIGUSE_USB或DG_CONFIGUSE_USB_CHARGER以及您希望将设备提供给Perfom特定功能,您应该通知您的特定功能通过usb_attach_cb钩子的任务。

2)我不太了解闪存中的代码后不太了解情况(当设备配置在PM_SET_SLEEP_MODE时)并按重置时,您可以看到设备广告,但如果您关闭设备(例如插件,请拔掉电源来自DEV套件的USB)设备摊位并没有宣传?没有配置据我所知,它会这样做,如果燃烧闪光灯,关闭电源然后电源打开电源,您是否会与SDK示例进行同样的配置?

谢谢mt_dialog.

米肯
离线
最后一次露面:1个月前
加入:2016-07-13 20:06
你好支持,

你好支持,

  1. 谢谢。我已配置为如上所述使用USB。
  2. 正确,一个例外,它不是在开发套件上。它在我的申请板上。我会切换回Dev套件并尝试从那里工作。如果我找到任何东西,我会报告。

谢谢。

米肯
离线
最后一次露面:1个月前
加入:2016-07-13 20:06
你好支持,

你好支持,

2。
测试与开发工具包,工作正常。测试我的应用程序,它工作良好“如果”我从V33电源断开所有附加电子器件。
它看起来像睡眠配置直接影响电源配置。显然这会导致初创物中的问题。额外的电子器件在启动时使用一些电源(最多20 mA),但它看起来像DA1468x无法提供,如果它被配置为PM_SET_SLEEP_MODE(PM_MODE_EXTEDDE_SLEEP)。
在pm_set_sleep_mode(pm_mode_extended_sleep)上,V33是3.1V且非常嘈杂。
在pm_set_sleep_mode(pm_mode_active)时,V33是3.3V,没有噪声。

两个问题:
一种。睡眠配置与V33之间是否存在相关性?只是为了澄清,我不是指睡眠模式,但睡眠配置。

b.如果我把命令pm_set_sleep_mode(pm_mode_extended_sleep)放在代码后面的一些地方(例如在一个计时器之后或在第一个间隙连接/断开之后),它是否工作?

谢谢。

米肯
离线
最后一次露面:1个月前
加入:2016-07-13 20:06
你好支持,

你好支持,

现在我真的迷路了!!!!!

在我的应用程序中,我有一个自定义特征,直接写入LED输出。对于此测试,我禁用附加到V33​​电源输出的所有附加电子设备,所以基本上我具有与dev.kit相同的设置。
我现在有:

  1. 使用PM_SET_SLEEP_MODE(PM_MODE_ACTION)或PM_SET_SLEEP_MODE(PM_MODE_IDLE)进行编译和加载我的软件,重置设备。此时我能够连接和写入LED特性=>结果LED !!!
  2. 编译和加载我的软件与pm_set_sleep_mode(pm_mode_extended_sleep),重置设备。在这一点上,我能够连接和写入到LED特性=>结果NO LED反应??????,没有断开,没有错误,只是没有响应。我可以断开,再次连接和写的特点,但没有回应。

现在完全使它全部令人困惑的是,在两种情况下,我可以通过电池电平特性读取电池电量,并且在两种情况下,通过物理改变电池电量来读回变化。

更改pm_set_sleep_mode(pm_mode_idle)=> pm_set_sleep_mode(pm_mode_exted_sleep)对我的软件的功能产生了巨大影响,为什么?
我究竟做错了什么?

- - 编辑 - -
尝试了其他方法:
在handle_evt_gap_disconnected()中调用pm_set_sleep_mode(pm_mode_extended_sleep),这样在第一次断开连接后,睡眠模式将变为活动状态。
然后:连接,写入LED特性=>完美工作。
下一页:断开连接,通过嘈杂的v33我可以看到pm_mode_extended_sleep处于活动状态,但我也看到LED关闭了!!!无法打开它。

顺便说一句:
对于LED,我将设置定时器2为PWM并使用HW_LED_SET_LED1_SRC(HW_LED_SRC1_PWM2)连接LED。我可以通过改变PWM占空比来打开LED。

所以调用函数pm_set_sleep_mode(pm_mode_exted_sleep)不仅为扩展睡眠准备,但它还禁用我的情况下的其他功能/外围设备!?!
和 !!!!SPI接口!!!(或者至少CS低温)解释了为什么我的额外电子设备停止工作!!!!!!!!!!!!!
是否有关于特性的文档?

mt_dialog.
离线
最后一次露面:6个月2个星期前
职员
加入:2015-06-08 11:34
嗨myken,

嗨myken,

睡眠配置禁用了定时器2的68x器件上的外围设备(只有Timer1为激活的RTOS),您可以看一下UM-B-044-DA1468x软件平台参考.pdf以检查哪些部分当设备进入睡眠模式时,设备会停止供电。另请注意,当设备进入睡眠模式时,所有导轨都处于低功耗模式,这意味着设备在大约3mA的睡眠模式下可以提供的电流,因此在V33和V18上挂钩的外部设备无法消耗比这更电流。此外,所有GPIO在设备进入睡眠模式时都会锁定到其最后状态,并且在Periph_setup函数中唤醒时,必须设置引脚的状态,因为它们重新配置。

谢谢mt_dialog.

米肯
离线
最后一次露面:1个月前
加入:2016-07-13 20:06
它必须是一种语言。

它必须是一种语言。但我很困惑。
我不是一个母亲英语作家所以跟我忍受,我不想钝,只是清楚。

"睡眠配置"我指的是pm_set_sleep_mode(pm_mode_extended_sleep);陈述。

使用“设备进入睡眠模式”我的意思是图22中的点5:UM-B-044-DA1468X软件平台参考的异步BLE事件Page 83 .pdf。
该设备处于睡眠模式,在点6期间处于睡眠模式。

我知道当设备处于睡眠模式时(第6点),外设将停止工作。如果没有BLE活动,设备将进入睡眠模式pm_set_sleep_mode(pm_mode_extended_sleep);语句来配置该操作。
我不明白,外设是立即停止后pm_set_sleep_mode(pm_mode_extended_sleep);陈述。

如果我通过BLE特性发出/给出/激活命令,并且该命令调用pm_set_sleep_mode(pm_mode_extended_sleep);语句,立即禁用所有外围设备,并终止BLE连接。
8秒后没有,没有断开连接,没有立即!
是这个预期的功能还是错误?

你的最后一句我不明白:
“还有设备进入睡眠模式时的所有GPIO都会锁定在其最后一个状态,并且在Periph_setup函数中唤醒时,您必须设置引脚的状态,因为它们重新配置它们。”

这是否意味着我必须调用外围设置函数(静态void prvsetuphardware(void)在我的情况下)当醒来?
如果我想在VBUS_Handler()中断上唤醒,我该在哪里做呢?
VBUS_HANDLER()不接缝以具有用户可定义的回拨功能。

谢谢。

mt_dialog.
离线
最后一次露面:6个月2个星期前
职员
加入:2015-06-08 11:34
嗨myken,

嗨myken,

我认为,大多数情况下,你误解了系统的功能,当睡觉时,我理解和可能发生在你的设置:

  • 在首次引导时,设备保持活动的8秒(即使已配置PM_SET_SLEEP_MODE(PM_EXTEDDE_SLEEP)),这意味着设备在每个连接或每个广告间隔之间唤醒并睡眠,这意味着在这些间隔之间的间隔之间外围设备被解除激活,在设备睡眠之前,GPIO将锁定在其状态,例如如果引脚在设备睡眠状态时,它仍将继续保持,但在下一个连接/广告间隔内设备将唤醒并再次运行Periph_setup函数,这意味着GPIO将被重新配置并具有在该函数中确定的状态。
  • 因此,根据广告和连接间隔,设备将休眠并自动唤醒(如果pm_set_sleep_mode(pm_extended_sleep))。当你编写一个特征时,设备将不会等待8秒进入该模式(这只发生在设备启动时),而是会立即休眠,当它找到机会,直到下一个连接/广告事件。因此,当你设置该模式时,设备将禁用所有外围设备,直到它再次唤醒的时间。关于你设置睡眠模式和设备立即断开连接,你将不得不检查设备中的代码在哪里结束,因为我认为它可能撞击一个ASSERT或设备暂停的一些原因,当你启用睡眠。可能是由于当设备进入睡眠模式时,外部设备消耗了太多的电力。
  • 关于通风装置如前所述这是配置自动如果使用USB接口定义,我已经提到过,在一个老帖子,当USB连接或上有一种电压通风装置然后VBUS_Handler()将被触发,该设备将醒来,和你能够钩functionallity usb_attach_cb()挂钩。

谢谢mt_dialog.

米肯
离线
最后一次露面:1个月前
加入:2016-07-13 20:06
对!

对!
我没注意到的是设备会在广告间隙进入休眠模式。完全不是我停止广告后想的那样。
我的外部设备在那点消耗到大量电力,并且断言非常可能。

关于重新初始化GPIO后唤醒后,您指的是Periph_setup函数,没有periph_setup函数。
然而静态void pm_init_wake_up(void)功能,将“唤醒后初始化系统”。
在此功能中有以下代码:

if (peripher_init != NULL) {
periph_init();//对外围设备和GPIO的电源
}

peripher_init是一个指向初始化gpio的函数的指针。函数中初始化这个指针
空白pm_system_init (periph_init_cb peripherals_initialization)函数。

因此,为了在唤醒时自动初始化gpio,必须调用该函数
pm_system_init (name_of_function_that_initialize_the_gpio);
在系统初始化期间在您的主要内容中。

如果我这样做,绝对不需要使用usb_attach_cb()。

如果您的意思是“periph_setup”函数,“name_of_function_that_initialize_the_gpio”函数最终有意义。

DK_APPS /功能/ BLE_PERITERAL /模板我使用具有以下代码:
pm_system_init(空);
因此,gpio将永远不会重新初始化。

我可以建议更好地文档这个功能,让人们像我一样更快了解它是否全部连接在一起。
在所有的例子中,以这种方式初始化gpio看起来像是一个任意的选择。

谢谢。

mt_dialog.
离线
最后一次露面:6个月2个星期前
职员
加入:2015-06-08 11:34
嗨myken,

嗨myken,

是的,关于periph_setup(),我所说的功能,是应该作为参数传递的函数在pm_system_init()正如你所说,在大多数BLE例子叫做periph_init(),很抱歉,我将确保通过您的意见文档团队。

谢谢mt_dialog.

jitendraprasad.
离线
最后一次露面:2年6个月前
加入:2017-10-02 38
我有pxp的问题

我有一个问题pxp_reporter项目。当我使用Extended_sleep模式加载此项目时,它可以在2.85V上方正确工作。当电池电压低于2.85V设备时停止工作和停止广告。

有人能注意到这个问题吗?
任何帮助都将不胜感激。

PM_DIALOG.
离线
最后一次露面:2天22小时前
职员
加入:2018-02-08 11:03
嗨jitendraprasad,

嗨jitendraprasad,

您的问题与此论坛线程无关,因此请创建一个新的论坛线程,我将在那里回答您的问题。

谢谢,PM_DIALOG.

jitendraprasad.
离线
最后一次露面:2年6个月前
加入:2017-10-02 38
抱歉不便。我

抱歉不便。我试图找到新的线程发布这个问题,但没有找到创建新线程的选项。所以,你能把我创建新线程的链接发过来吗?

PM_DIALOG.
离线
最后一次露面:2天22小时前
职员
加入:2018-02-08 11:03
嗨jitendraprasad,

嗨jitendraprasad,

没有问题,我会指导您创建一个新帖子。请按照以下步骤创建新的论坛:

第1步:请访问我们的支持论坛页面https://support.dialog-semicondiondiondum/forum.

第2步:然后,输入对话框“SmartBond蓝牙低能量 - 软件”论坛。

第3步:最后,击中了“新话题”并创建一个新职位。

由于您创建了一个新的线程,因此您的问题将在左右24小时内回答。

谢谢,PM_DIALOG.