进入和退出睡眠模式

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

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

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

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

我把这个放在我的prvSetupHardware()中:

/ *初始化唤醒定时器* /
hw_wkup_init(NULL);
hw_wkup_set_counter_threshold (1);
hw_wkup_set_debounce_time (10);
hw_wkup_寄存器_中断(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_外设_任务()中配置。
顺便说一下,我使用dk_apps/features/ble_peripheral/作为我的项目的模板。

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

我错过了什么?

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

嗨,麦肯,

你确定你看到的就是睡觉,而不是该设备是一个断言,由于卡住?该SDK保持约8秒钟从睡眠模式恢复的装置,以便使XTAL32定居,所以在开机的设备应保持存活一段8秒。对于SDK来设置睡眠模式下为防火墙,你必须做的唯一一件事情就是set_pm_sleep_mode(pm_mode_extended_sleep),所有其它的配置,你刚刚醒来由特定引脚器件(虽然你的避风港“T配置其引脚,我没有看到,以指定中断引脚)一hw_wkup_configure_pin()函数,因为你已经指示装置开始做广告,那么应该在任何睡眠模式启动广告为先8秒并且然后睡眠和在每个广告间隔醒来。

由于MT_dialog

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

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

  1. 醒来。你是正确的,我没有配置唤醒引脚(无hw_wkup_configure_pin())。究其原因,我想唤醒使用VBUS中断。按照UM-B-044-DA1468x软件平台参考,我们可以唤醒“异步,从唤醒定时器或VBUS中断”。我找不到任何信息如何建立这个VBUS中断唤醒,所以我认为这将是始终启用。这样对吗?我可以把所有的唤醒配置了呢?
  2. 断言。pm_设置_睡眠_模式(pm_模式激活)工作正常,pm_设置_睡眠_模式(pm_模式空闲)工作正常。但是,如果我编程设置pm_设置\ u睡眠\ u模式(pm_模式\ u扩展\ u睡眠)并重置设备,它工作正常(据我所知),但当我关机->上电时,它会卡住。SDK中的断言检查无效参数和缺少的配置,因此如果是断言,则肯定缺少某些内容,问题是缺少什么。在进入延长睡眠模式之前,是否需要满足任何先决条件?

谢谢

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

嗨,麦肯,

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

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

你好,支持,

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

谢谢。

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

你好,支持,

2.
测试与开发工具包,工作正常。测试我的应用程序,它工作良好“如果”我断开了V33电源上所有额外的电子设备。
看起来睡眠配置对电源配置有直接影响。显然,这会在启动时造成问题。额外的电子设备在启动时会使用一些电源(最大20 mA),但如果DA1468X配置为pm_设置_睡眠_模式(pm_模式_扩展睡眠),则看起来无法提供电源。
在pm_set_sleep_mode(pm_mode_extended_sleep)的V33是3.1V,非常嘈杂。
在pm_set_sleep_mode(pm_mode_active)时,V33是3.3V,没有噪声。

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

湾它的工作原理,如果我把命令pm_set_sleep_mode(pm_mode_extended_sleep)一些其中在后面的代码(例如,计时器后或第一间隙连接/断开之后)?

谢谢。

麦肯
离线
最后看到:2年5个月前
加入: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亮起!!!
  2. 编译和装载我的软件与pm_set_sleep_mode(pm_mode_extended_sleep),重置设备。在这一点上,我能够连接并写入到LED特性=>导致NO 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_模式_延长_睡眠处于活动状态,但我也看到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 11:34
嗨,麦肯,

嗨,麦肯,

睡眠配置禁用68x设备上的外设,包括定时器R2(只有定时器R1处于活动状态,为RTO供电),您可以查看UM-B-044-DA1468x软件平台参考.pdf,以检查设备进入睡眠模式时,设备的哪些部分保持通电。还要注意,当设备进入睡眠模式时,所有轨道都进入低功率模式,这意味着设备在睡眠模式下可以提供的电流约为3mA,因此连接在V33和V18上的外部设备消耗的电流不能超过此值。此外,当设备进入睡眠模式时,所有GPIO都会锁定到其最后状态,您必须在periph_设置功能中设置唤醒时的引脚状态,因为它们已重新配置。

由于MT_dialog

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

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

随着“睡眠配置”我的意思是pm_set_sleep_mode (pm_mode_extended_sleep);陈述

对于“设备进入睡眠模式”,我指的是图22中的第5点:UM-B-044-DA1468x软件平台参考文档的异步BLE事件页83。
设备在第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(静态无效prvSetupHardware(无效)在我的情况),醒来时?
如果我想唤醒对VBUS_Handler()中断哪里做呢?
VBUS_Handler()不具有用户可定义的回调函数。

谢谢。

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

嗨,麦肯,

我认为,主要是睡觉你已经误解了系统的functionallity时,我理解和你的设置可能会发生的事情:

  • 首次启动时设备保持活动状态的8秒(即使您已配置pm_set_sleep_模式(pm_extended_sleep),这意味着设备在每个连接之间或每个广告间隔之间唤醒和睡眠,这意味着在这两个间隔期间,所有外围设备都被解除激活,gpio被锁定到设备进入睡眠前的状态,例如,如果设备进入睡眠时pin处于打开状态,它仍将保持打开状态,但在下一个连接/广告间隔内,设备将唤醒并再次运行periph_设置功能,这意味着gpio将被重新配置,并具有在该功能中确定的状态。
  • 因此,根据广告和连接间隔,设备将休眠并自动唤醒(如果pm_set_sleep_mode(pm_extended_sleep))。当你编写一个特征时,设备将不会等待8秒进入该模式(这只发生在设备启动时),而是会立即休眠,当它找到机会,直到下一个连接/广告事件。因此,当你设置该模式时,设备将禁用所有外围设备,直到它再次唤醒的时间。关于你设置睡眠模式和设备立即断开连接,你将不得不检查设备中的代码在哪里结束,因为我认为它可能撞击一个ASSERT或设备暂停的一些原因,当你启用睡眠。可能是由于当设备进入睡眠模式时,外部设备消耗了太多的电力。
  • 关于VBUS提到如果使用USB定义这个自动配置,我已经提到,在旧的岗位,当USB连接或有对VBUS那么VBUS_Handler(电压感)将被触发,设备会醒过来,然后你就可以勾你functionallity在usb_attach_cb()挂钩。

由于MT_dialog

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

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

关于唤醒后gpio的重新初始化,请参考periph_设置功能,没有periph_设置功能。
但是有一个静态无效pm_初始_唤醒(无效)函数,该函数将“在唤醒后初始化系统”。
在这个函数中有以下代码:

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


periph_init是一个指针,它指向初始化GPIO的功能。而这个指针是初始
空白pm_system_init (periph_init_cb peripherals_initialization)功能。

因此,为了在之后自动初始化GPIO了你必须调用函数
pm_system_init(name_of_function_that_initialize_the_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 11:34
嗨,麦肯,

嗨,麦肯,

是的,关于periph_setup(),是我说的,功能),应该作为pm_system_init(参数)如你所说,在大多数BLE的例子被称为periph_init(传递功能,比较遗憾的是,我将确保转达您的意见对文档的团队。

由于MT_dialog

Jitendraprasad
离线
最后看到:2年6个月前
加入:2017年10月2日10: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月2日10:38
对造成的不便表示歉意。一世

对造成的不便表示歉意。我试图找到新的线程张贴这个问题,但没有发现创建新线程的选项。所以,你可以请给我在哪里可以创建新线程的联系?

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

嗨Jitendraprasad,

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

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

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

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

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

谢谢,PM_Dialog