进入并退出休眠模式

⚠️
你好。。谢谢你来到论坛。令人兴奋的消息!我们现在正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有员额和帐户都已迁移。我们现在只接受新论坛的流量-请在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
16个员额/0个新员额
最后发表
Myken
离线
最后看到:2年1个月前
加入:2016-07-13 20:06
进入并退出休眠模式

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

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

pm_set_wakeup_mode(真正的);
pm_set_sleep_mode (pm_mode_extended_sleep);

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

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

那么关于睡眠模式就没有什么需要配置的了,对吧?
一旦没有BLE活动,设备就会进入睡眠模式。
sinds I没有唤醒按钮唯一可能的唤醒是VBU上有电源。

然而,我的设备在启动后会立即进入睡眠模式。即使我有


ble_gap_adv_intv_set (BLE_ADV_INTERVAL_FROM_MS (500), BLE_ADV_INTERVAL_FROM_MS (2000);
ble_gap_addata_set(sizeof(adv_data),adv_data,0,null);
ble_gap_adv_start(间隙连接模式无方向);

在我的ble_peripheral_task()中配置。
顺便说一下,我使用dk_apps/features/ble_peripheral/作为我的项目的模板。

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

我错过了什么?

设备:
MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨Myken,

嗨Myken,

您确定您看到的是睡眠,而不是设备由于断言而卡住吗?SDK将设备保持在睡眠模式外约8秒,以便XTAL32稳定下来,因此在启动时,设备应保持活动状态8秒。对于SDK,要将睡眠模式设置为fw,您唯一需要做的就是设置_pm_sleep_模式(pm_mode_extended_sleep),所有其他配置都只是通过特定的pin唤醒设备(尽管您尚未配置哪个pin,我没有看到一个hw_wkup_configure_pin()函数来为中断指定一个pin),而且由于您已经指示设备开始播发,那么设备应该在前8秒以无睡眠模式开始播发,然后在每个播发间隔内休眠和唤醒。

由于MT_dialog

Myken
离线
最后看到:2年1个月前
加入:2016-07-13 20:06
好了,这就清楚了一点。

好了,这就清楚了一点。这给我留下了两个问题:

  1. 醒醒。你是对的,我没有配置唤醒pin(没有hw\U wkup\U configure\U 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_extended_sleep)和我重置设备,它工作良好(就我所知),但当我POWER DOWN -> POWER UP时,它卡住了。SDK中的断言检查无效的参数和丢失的配置,所以如果它是断言,肯定有什么丢失了,问题是丢失了什么。在进入扩展睡眠模式之前,是否有任何前提条件需要被填充?

谢谢

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨Myken,

嗨Myken,

1)正如你所说,异步唤醒事件可以是唤醒定时器或VBUS,因为你想只从VBUS唤醒,这已经由h/w配置,你不需要设置唤醒定时器。VBUS_Handler()会发生当你插入USB和你也应该配置设备使用USB充电器或数据dg_configUSE_USB或dg_configUSE_USB_CHARGER如果你想让你的设备演奏一个特定functionallity通过usb_attach_cb钩你应该通知你的任务。

2)我不太明白的情况下在您下载代码flash(尽管pm_set_sleep_mode设备配置)和你点击重置,你可以看到设备的广告,但是如果你关机的设备(例如插头拔掉dev工具包)的usb设备上,不做广告吗?就我所知,没有配置,它会这样做,你得到相同的SDK示例,当你烧闪存,电源关闭,然后电源上?

由于MT_dialog

Myken
离线
最后看到:2年1个月前
加入:2016-07-13 20:06
你好,支持,

你好,支持,

  1. 谢谢。我已经配置使用上述USB。
  2. 正确,但有一个例外,它不在开发工具包中。在我的申请板上。我将切换回开发工具包并尝试从那里开始工作。有发现我会报告的。

谢谢。

Myken
离线
最后看到:2年1个月前
加入:2016-07-13 20:06
你好,支持,

你好,支持,

2.
用dev.kit测试,工作正常。用我的应用测试它工作正常“如果”我断开了V33电源上所有额外的电子设备。
看起来睡眠配置对电源配置有直接影响。显然,这在启动时造成了问题。额外的电子在启动时使用一些电力(最大20 mA),但如果将DA1468X配置为pm_set_sleep_mode(pm_mode_extended_sleep),看起来DA1468X无法交付。
在pm_设置_睡眠_模式(pm_模式_扩展_睡眠)下,V33为3.1V,噪音非常大。
在PM_SET_SLEEP_MODE(PM_MODE_ACTION)上,V33为3.3V,而不是嘈杂。

所以有两个问题:
a.睡眠配置和V33之间有关联吗?澄清一下,我指的不是睡眠模式,而是睡眠配置。

B如果我将命令pm_set_sleep_mode(pm_mode_extended_sleep)放在代码后面的某个位置(例如,在计时器之后或在第一次间隙连接/断开之后),它是否有效?

谢谢。

Myken
离线
最后看到:2年1个月前
加入:2016-07-13 20:06
你好,支持,

你好,支持,

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

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

  1. 编译和加载我的软件与pm_set_sleep_mode(pm_mode_active)或pm_set_sleep_mode(pm_mode_idle)都工作,重置设备。在这一点上,我可以连接并写入到LED特征=>结果LED ON!!
  2. 使用pm_设置睡眠模式(pm_模式\u扩展睡眠)编译并加载我的软件,重置设备。此时,我能够连接并写入LED特性=>结果没有LED反应,没有断开连接,没有错误,只是没有响应。我可以断开连接,再次连接并写入特征,但没有响应。

现在让它完全混乱的是,在这两种情况下(1和2),我可以通过电池水平特性读取电池水平,在这两种情况下,读回的变化与物理变化的电池水平。

改变pm_set_sleep_mode(pm_mode_idle) => pm_set_sleep_mode(pm_mode_extended_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_extended_sleep)不仅为扩展睡眠做准备,而且还禁用了一些其他函数/外围设备,在我的情况下是timer2 !?!
和! !SPI接口!!(或者至少CS变低了)这就解释了为什么我额外的电子设备停止工作!!!!!!!!!!!!!
是否有关于该功能的文档?

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨Myken,

嗨Myken,

睡眠配置禁用68 x上的外设设备包括的行的timer2(只有timer1活跃力量RTOS),你可以看一下嗯- b - 044 - da1468x软件平台Reference.pdf为了检查哪部分设备保持动力,当设备进入睡眠模式。也请注意,当设备进入睡眠模式所有rails进入低功耗模式,这意味着当前的设备可以提供大约3 ma在睡眠模式下,因此,外部设备连接V33和V18不能消耗更多的电流。此外,当设备进入睡眠模式时,所有的gpio锁存到它们的最后状态,你将不得不在外围设置功能中设置引脚的状态,因为它们被重新配置。

由于MT_dialog

Myken
离线
最后看到:2年1个月前
加入:2016-07-13 20:06
这一定和语言有关。

这一定和语言有关。但我困惑。
我不是英语母语的作家,所以请原谅我,我不想直言不讳,只是想说清楚。

“睡眠配置”指的是pm_set_sleep_mode (pm_mode_extended_sleep);声明。

对于“设备进入睡眠模式”,我指的是图22中的第5点:UM-B-044-DA1468x软件平台参考文档的异步BLE事件页83。
设备在第6点处于睡眠模式。

我理解当DE设备处于睡眠模式时(第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_设置函数(prvsetuhardware (void)在我的情况下)什么时候醒来?
如果我想在VBUS_Handler()中断时醒来,我在哪里可以这样做?
VBUS_Handler()不具有用户可定义的回调函数。

谢谢。

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨Myken,

嗨Myken,

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

  • 设备在第一次启动时保持活动的8秒(即使您已经配置了pm_set_sleep_mode(pm_extended_sleep)),这意味着设备在每个连接或每个广告间隔之间醒来和休眠,这意味着在这些间隔期间,所有的外设都被去激活,并且gpio在设备进入睡眠之前被锁定到它们的状态,例如,当设备进入睡眠时,如果引脚是开着的,它仍然会保持开着,但是在下一个连接/发布间隔中,设备将被唤醒并再次运行外围设置函数,这意味着gpio将被重新配置并具有由该函数决定的状态。
  • 因此,根据广告和连接间隔,设备将自动睡眠并唤醒(如果PM_SET_SLEEP_MODE(PM_EXTEDDED_SLEEP))。当您编写特征时,设备将不等待8秒钟进入该模式(这仅在设备启动时才能亮起),但将在下一个连接/广告活动中找到机会时会睡觉。因此,当您设置该模式时,设备将禁用所有外围设备,直到它再次唤醒。关于您设置睡眠模式和设备免疫粘性断开连接,您必须检查设备中的代码的位置最终,因为我认为当您启用睡眠时,它可能会为Somereason击中Assert或设备摊位。当设备以睡眠模式下降时,可能由于外部设备消耗到大量电源。
  • 关于上面提到的VBU,如果您使用USB定义,这是自动配置的,我在以前的文章中提到过,当USB连接或VBU上有电压感应时,VBU处理器()将被触发,设备将被唤醒,并且您可以在USB连接cb()钩子中钩住您的功能。

由于MT_dialog

Myken
离线
最后看到:2年1个月前
加入:2016-07-13 20:06
没错!

没错!
我错过的一件事是,该设备将进入睡眠模式之间的广告间隔。在我完全停止做广告后,我就不这么想了。
我的外部设备确实消耗了大量的电力在那一点上,一个ASSERT是非常可能的。

关于唤醒后gpio的重新初始化,您引用了一个peripher_setup函数,没有peripher_setup函数。
但是有一个静态孔隙pm_init_wake_up(空白)函数,该函数将“唤醒后初始化系统”。
在这个函数中有以下代码:

if(periph_init!= null){
periph_init ();//打开外部设备和gpio


periph_init是指向初始化gpio的函数的指针。这个指针在
void pm_system_init(periph_init_cb filipherals_initialization)功能。

因此,为了在唤醒时自动初始化gpio,必须调用函数
pm_system_init(初始化gpio的函数名);
在系统初始化过程中。

如果我这样做,就完全没有必要使用usb_attach_cb()。

如果你指的“peripher_setup”函数是“name_of_function_that_initialize_the_gpio”函数,那么它最终是有意义的。

我使用的dk_apps/features/ble_peripheral/模板有以下代码:
pm_system_init(NULL);
因此,gpio的重新初始化将永远不会发生。

我建议提供一个更好的文档,让像我这样的人更快地理解它是如何连接在一起的。
在所有示例中,它看起来像是以这种方式初始化GPIO的任意选择。

谢谢。

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨Myken,

嗨Myken,

是的,关于periph_setup(),我正在谈论的函数,是应该在pm_system_init()中作为参数传递的函数,正如您所说,在大多数BLE示例中称为periph_init(),很抱歉,我将确保将您的注释传递给文档团队。

由于MT_dialog

Jitendraprasad
离线
最后看到:2年6个月前
加入:2017-10-02 10:38
我对PXP有问题

我对PXP_reporter项目有个问题。当我用extended_sleep模式加载这个项目时,它在2.85V以上正确工作。当电池电压低于2.85V时,设备停止工作,停止广告。

有人可以遵守这个问题吗?
任何帮助将不胜感激。

PM_Dialog
离线
最后看到:1天23小时前
工作人员
加入:2018-02-08 11:03
嗨Jitendraprasad,

嗨Jitendraprasad,

你的问题与这个论坛主题无关,所以请创建一个新的论坛主题,我会在那里回答你的问题。

谢谢,PM_Dialog

Jitendraprasad
离线
最后看到:2年6个月前
加入:2017-10-02 10:38
很抱歉给您带来不便。我

很抱歉给您带来不便。我试图找到新的线程来发布这个问题,但没有找到创建新线程的选项。那么,你能发送我可以创建新线程的链接吗?

PM_Dialog
离线
最后看到:1天23小时前
工作人员
加入:2018-02-08 11:03
嗨Jitendraprasad,

嗨Jitendraprasad,

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

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

步骤2:然后,进入对话框“Smartbond蓝牙低能耗软件”论坛。

步骤3:最后,打到“新主题”并创建一个新的帖子。

因为你已经创建了一个新线程,你的问题将在大约24小时内得到回答。

谢谢,PM_Dialog