关于睡眠模式的问题,我真的很困惑这应该是如何工作的。
如果我把它放在system_init()中:
pm_set_wakeup_mode(真正的);
pm_set_sleep_mode (pm_mode_extended_sleep);
我把它放在我的prvsetuhardware()中:
/ *初始化唤醒定时器* /
hw_wkup_init(null);
硬件工作设置计数器阈值(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_adv_data_集合(sizeof(adv_data),adv_data,0,NULL);
ble_gap_adv_start(gap_conn_mode_undirected);
在我的ble_peripheral_task()中配置。
顺便说一下,我使用dk_apps/features/ble_peripheral/作为我的项目的模板。
所以据我所知,应该有BLE活动,但设备进入睡眠模式。
我错过了什么?
设备:
嗨Myken,
你确定你所看到的睡觉,而不是由于断言而被卡住的情况?SDK将设备从睡眠模式中保持大约8秒钟,以便为XTAL32定居,因此在启动时,设备应保持8秒钟的时间。对于SDK将睡眠模式设置为FW,您必须要做的唯一方法是set_pm_sleep_mode(pm_mode_extended_sleep),所有您拥有的其他配置只是为了唤醒特定的PIN设备(虽然您没有配置了哪个引脚,我没有看到HW_WKUP_CONFIGURE_PIN()函数以指定中断的引脚),并且由于您指示设备启动广告,那么设备应该在没有睡眠模式下启动广告8秒然后睡觉并在每个广告间隔内醒来。
由于MT_dialog
好了,这就清楚了一点。这给我留下了两个问题:
谢谢
嗨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
你好,支持,
谢谢。
你好,支持,
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_设置_睡眠_模式(pm_模式激活)下,V33为3.3V且无噪音。
这么两个问题:
a.睡眠配置和V33之间有关联吗?澄清一下,我指的不是睡眠模式,而是睡眠配置。
湾如果我把命令pm_set_sleep_mode(pm_mode_extended_sleep)放在代码中的一些地方(例如,在计时器或第一个间隙连接/断开之后)的地方有关吗?
谢谢。
你好,支持,
现在我真的迷路了!!!!!
在我的应用程序中,我有一个自定义特性,可以直接写入LED输出。在这个测试中,我禁用了所有附加到V33电源输出的电子设备,所以基本上我拥有与dev.kit相同的设置。
现在我有:
现在让它完全混乱的是,在这两种情况下(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变低了)这就解释了为什么我额外的电子设备停止工作!!!!!!!!!!!!!
有关于功能的文件吗?
嗨Myken,
睡眠配置禁用68 x上的外设设备包括的行的timer2(只有timer1活跃力量RTOS),你可以看一下嗯- b - 044 - da1468x软件平台Reference.pdf为了检查哪部分设备保持动力,当设备进入睡眠模式。也请注意,当设备进入睡眠模式所有rails进入低功耗模式,这意味着当前的设备可以提供大约3 ma在睡眠模式下,因此,外部设备连接V33和V18不能消耗更多的电流。此外,当设备进入睡眠模式时,所有的gpio锁存到它们的最后状态,你将不得不在外围设置功能中设置引脚的状态,因为它们被重新配置。
由于MT_dialog
这一定和语言有关。但我困惑。
我不是英语母语的作家,所以请原谅我,我不想直言不讳,只是想说清楚。
用“睡眠配置”我的意思是
pm_set_sleep_mode (pm_mode_extended_sleep);
声明。对于“设备进入睡眠模式”,我指的是图22中的第5点:UM-B-044-DA1468x软件平台参考文档的异步BLE事件页83。
设备在第6点处于睡眠模式。
我知道当de设备处于睡眠模式时,外围设备停止工作(第6点)。并且,如果没有更多可恢复的活动,设备将进入睡眠模式
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函数(
prvsetuhardware (void)
在我的情况下)醒来时?如果我想在VBUS_HANDLER()中断上中断我在哪里做?
VBUS_Handler()不具有用户可定义的回调函数。
谢谢。
嗨Myken,
我认为,在睡觉时,大多数是你的函数误解了系统的功能,我理解的是什么,可能会发生在你的设置上:
由于MT_dialog
没错!
我错过的是,该设备将在广告间隔之间进入睡眠模式。在我完全停止广告后,据我所知。
我的外部设备确实消耗了大量的电力在那一点上,一个ASSERT是非常可能的。
关于唤醒后gpio的重新初始化,您引用了一个peripher_setup函数,没有peripher_setup函数。
然而有一个
静态孔隙pm_init_wake_up(空白)
函数,该函数将“唤醒后初始化系统”。在这个函数中有以下代码:
if(periph_init!=空){
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看起来都是任意选择。
谢谢。
嗨Myken,
是的,关于periph_setup(),我谈论的函数是应该在pm_system_init()中应该传递的函数,如您所说,在大多数BLE示例中称为periph_init(),对不起,我很抱歉将确保将您的评论传递给文档团队。
由于MT_dialog
我对PXP_reporter项目有个问题。当我用extended_sleep模式加载这个项目时,它在2.85V以上正确工作。当电池电压低于2.85V时,设备停止工作,停止广告。
有人能观察到这个问题吗?
任何帮助都将不胜感激。
嗨Jitendraprasad,
你的问题与这个论坛主题无关,所以请创建一个新的论坛主题,我会在那里回答你的问题。
谢谢,PM_Dialog
对造成的不便表示歉意。我试图找到新的线程来发布这个问题,但没有找到创建新线程的选项。那么,你能否发送我可以创建新线程的链接?
嗨Jitendraprasad,
没问题,我会指导你创建一个新的岗位。请按照以下步骤创建一个新的论坛帖子:
步骤1:请访问我们的支持论坛页面https://support.dialog-semiconductor.com/forum
步骤2:然后,进入对话框“Smartbond蓝牙低能耗软件”论坛。
步骤3:最后,打到“新主题”并创建一个新的帖子。
因为你已经创建了一个新线程,你的问题将在大约24小时内得到回答。
谢谢,PM_Dialog