关于睡眠模式的问题,我真的很困惑这是如何工作的。
如果我把它放在system_init()中:
pm_set_wakeup_mode(真正的);
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_addata_set(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设置睡眠模式的成一个弗兰克-威廉姆斯,你要做的唯一的事就是set_pm_sleep_mode (pm_mode_extended_sleep),所有其他的配置,你只是醒来设备由一个特定的销(虽然你没有配置销,我不要看到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_EXTEDDE_SLEEP)。
在pm_set_sleep_mode(pm_mode_extended_sleep)上,V33是3.1V且非常嘈杂。
在PM_SET_SLEEP_MODE(PM_MODE_ACTION)上,V33为3.3V,而不是嘈杂。
两个问题:
a.睡眠配置和V33之间有关联吗?澄清一下,我指的不是睡眠模式,而是睡眠配置。
b.如果我把命令pm_set_sleep_mode(pm_mode_extended_sleep)放在代码后面的一些地方(例如在一个计时器之后或在第一个间隙连接/断开之后),它是否工作?
谢谢。
你好,支持,
现在我真的迷路了!!!!!
在我的应用程序中,我有一个自定义特性,可以直接写入LED输出。在这个测试中,我禁用了所有附加到V33电源输出的电子设备,所以基本上我拥有与dev.kit相同的设置。
现在我有:
现在完全使它全部令人困惑的是,在两种情况下,我可以通过电池电平特性读取电池电量,并且在两种情况下,通过物理改变电池电量来读回变化。
更改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低温)解释了为什么我的额外电子设备停止工作!!!!!!!!!!!!!
是否有关于特性的文档?
嗨myken,
睡眠配置禁用了定时器2的68x器件上的外围设备(只有Timer1为激活的RTOS),您可以看一下UM-B-044-DA1468x软件平台参考.pdf以检查哪些部分当设备进入睡眠模式时,设备会停止供电。另请注意,当设备进入睡眠模式时,所有导轨都处于低功耗模式,这意味着设备在大约3mA的睡眠模式下可以提供的电流,因此在V33和V18上挂钩的外部设备无法消耗比这更电流。此外,所有GPIO在设备进入睡眠模式时都会锁定到其最后状态,并且在Periph_setup函数中唤醒时,必须设置引脚的状态,因为它们重新配置。
由于MT_dialog
这一定和语言有关。但我困惑。
我不是英语母语的作家,所以请原谅我,我不想直言不讳,只是想说清楚。
"睡眠配置"我指的是
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都锁存到它们的最后一个状态,你将不得不在外围设置功能中设置引脚的状态,因为它们被重新配置。
这是否意味着我必须调用外围设置函数(
静态void prvsetuphardware(void)
在我的情况下)当醒来?如果我想在VBUS_Handler()中断上唤醒,我该在哪里做呢?
VBUS_Handler()不具有用户可定义的回调函数。
谢谢。
嗨myken,
我认为,大多数情况下,你误解了系统的功能,当睡觉时,我理解和可能发生在你的设置:
由于MT_dialog
没错!
我没注意到的是设备会在广告间隙进入休眠模式。完全不是我停止广告后想的那样。
我的外部设备确实消耗了大量的电力在那一点上,一个ASSERT是非常可能的。
关于重新初始化GPIO后唤醒后,您指的是Periph_setup函数,没有periph_setup函数。
然而
静态void pm_init_wake_up(void)
功能,将“唤醒后初始化系统”。在这个函数中有以下代码:
if(periph_init!= null){
periph_init();//对外围设备和GPIO的电源
}
peripher_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()。
如果你指的“peripher_setup”函数是“name_of_function_that_initialize_the_gpio”函数,那么它最终是有意义的。
我使用的dk_apps/features/ble_peripheral/模板有以下代码:
pm_system_init(空);
因此,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