关于睡眠模式的问题,我真的很困惑这应该是如何工作的。
如果我把它放在我的system_init()中:
pm_set_wakeup_mode(true);
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_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 / features / ble_perieral /作为我的项目的模板。
因此,据我所知应该有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后立即发生,您还应将设备配置为充电器或作为数据DG_CONFIGUSE_USB或DG_CONFIGUSE_USB_CHARGER以及您希望将设备提供给Perfom特定功能,您应该通知您的特定功能通过usb_attach_cb钩子的任务。
2)我不太了解闪存中的代码后不太了解情况(当设备配置在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_EXTEDDED_SLEEP),V33为3.1V,非常嘈杂。
在PM_SET_SLEEP_MODE(PM_MODE_ACTION)上,V33为3.3V,而不是嘈杂。
这么两个问题:
一种。睡眠配置与V33之间是否存在相关性?只是为了澄清,我不是指睡眠模式,但睡眠配置。
湾如果我把命令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事件Page 83 .pdf。
该设备处于睡眠模式,在点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函数(
静态void prvsetuphardware(void)
在我的情况下)醒来时?如果我想在VBUS_HANDLER()中断上中断我在哪里做?
VBUS_HANDLER()不接缝以具有用户可定义的回拨功能。
谢谢。
嗨myken,
我认为,在睡觉时,大多数是你的函数误解了系统的功能,我理解的是什么,可能会发生在你的设置上:
谢谢mt_dialog.
对!
我错过的是,该设备将在广告间隔之间进入睡眠模式。在我完全停止广告后,据我所知。
我的外部设备在那点消耗到大量电力,并且断言非常可能。
关于重新初始化GPIO后唤醒后,您指的是Periph_setup函数,没有periph_setup函数。
然而有一个
静态void pm_init_wake_up(void)
功能,将“唤醒后初始化系统”。在此功能中有以下代码:
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_PERITERAL /模板我使用具有以下代码:
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-semicondiondiondum/forum.
第2步:然后,输入对话框“SmartBond蓝牙低能量 - 软件”论坛。
第3步:最后,击中了“新话题”并创建一个新的帖子。
由于您创建了一个新的线程,因此您的问题将在左右24小时内回答。
谢谢,PM_DIALOG.