进入并退出休眠模式

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
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(null);
hw_wkup_set_counter_threshold(1);
hw_wkup_set_debounce_time(10);
hw_wkup_register_interrupt (wkup_cb, 1);

再没有什么更多的配置关于睡眠模式,对不对?
只要没有更多的BLE活动的设备进入睡眠模式。
和Sinds我没有按钮,因为唤醒唯一可能的唤醒是在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(gap_conn_mode_undirected);

在我的ble_peripheral_task()中配置。
BTW我使用dk_apps /特征/ ble_peripheral /为模板,为我的项目。

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

我错过了什么?

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

嗨Myken,

你确定你所看到的睡觉,而不是由于断言而被卡住的情况?SDK将设备从睡眠模式中保持大约8秒钟,以便为XTAL32定居,因此在启动时,设备应保持8秒钟的时间。对于SDK将睡眠模式设置为FW,您必须要做的唯一方法是set_pm_sleep_mode(pm_mode_extended_sleep),所有您拥有的其他配置只是为了唤醒特定的PIN设备(虽然您没有配置了哪个引脚,我没有看到HW_WKUP_CONFIGURE_PIN()函数以指定中断的引脚),并且由于您指示设备启动广告,那么设备应该在没有睡眠模式下启动广告8秒然后睡觉并在每个广告间隔内醒来。

谢谢mt_dialog.

Myken
离线
最后一次露面:2年1个月前
加入:2016-07-13 20:06
OK,那清除它一点。

OK,那清除它一点。这使我有两个问题:

  1. 醒来。您是正确的,我没有配置唤醒引脚(没有HW_WKUP_CONFIGURE_PIN())。原因是,我想使用VBU中断唤醒。根据UM-B-044-DA1468X软件平台参考,我们可以从唤醒定时器或VBU中断异步唤醒“异步”。我找不到任何信息如何设置此VBU中断唤醒所以我假设它将被始终启用。这样对吗?我可以留出所有唤醒配置吗?
  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)当你说asyncronous唤醒事件可以是唤醒定时器或VBUS,因为你想醒来仅仅从VBUS这是媒体链接以h配置/ w和你没有设置唤醒定时器。该VBUS_Handler()将尽快与您在USB插头发生,你也应该将设备配置为既可以使用USB作为充电或数据dg_configUSE_USB或dg_configUSE_USB_CHARGER,如果您希望您的设备perfom特定functionallity你应该通知你通过usb_attach_cb钩任务。

2)你在闪存下载代码(在设备中pm_set_sleep_mode配置)和你打的复位,可以看到设备的广告,但如果以后我不太明白的情况下,您关闭设备电源(例如插头,拔掉从开发工具包)的设备摊位和不做广告的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_SET_SLEEP_MODE(PM_MODE_EXTEDDED_SLEEP),V33为3.1V,非常嘈杂。
在PM_SET_SLEEP_MODE(PM_MODE_ACTION)上,V33为3.3V,而不是嘈杂。

这么两个问题:
一种。有睡眠配置和V33之间的相关?只是为了澄清我的意思不是休眠模式,但睡眠配置。

湾如果我把命令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_set_sleep_mode(pm_mode_exted_sleep)编译和加载我的软件,重置设备。此时我能够连接和写入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),因此睡眠模式将在第一次断开连接后变为活动状态。
然后:CONNECT,写入到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软件平台参考.pdf的异步事件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_setup功能唤醒时,设置引脚的状态,因为它们是重新配置。”

这是否意味着我必须调用此periph_setup函数(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或设备摊位。当设备以睡眠模式下降时,可能由于外部设备消耗到大量电源。
  • 关于VBUS如上所述,如果使用USB定义,我将在旧的帖子中提到,当USB附加或在VBU上有电压检测时,那么VBUS_Handler()将被触发,然后触发设备将唤醒,您可以在USB_ATTACH_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(name_of_function_that_initialize_the_gpio);
在系统初始化过程中你的主要。

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

如果你的意思是“periph_setup”功能“name_of_function_that_initialize_the_gpio”功能,它最终是有道理的。

该dk_apps /功能/ 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-semicondiondiondum/forum.

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

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

既然你已经创建了一个新的线程,您的问题将是约24小时内答复。

谢谢,PM_DIALOG.