关于睡眠模式的问题,我真的很困惑这应该如何工作。
如果我把它放在我的system_init()中:
pm_set_wakeup_mode(true);
pm_set_sleep_mode(pm_mode_extended_sleep);
我把它放在我的prvsetuhardware()中:
/*初始化唤醒计时器*/
hw_wkup_init(空);
hw_wkup_set_counter_threshold (1);
hw_wkup_set_debounce_time(10);
hw_wkup_register_interrupt (wkup_cb, 1);
然后没有什么可以配置睡眠模式,右图?
一旦没有更多的BLE活动,设备将进入睡眠模式。
sinds I没有唤醒按钮唯一可能的唤醒是VBU上有电源。
然而,我的设备在启动后会立即进入睡眠模式。即使我有
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(间隙连接模式无方向);
在我的ble_peripheral_task()中配置。
btw我使用dk_apps / features / ble_perieral /作为我的项目的模板。
所以据我所知,应该有BLE活动,但设备进入睡眠模式。
我错过了什么?
设备:
嗨Myken,
您确定您看到的是睡眠,而不是设备由于断言而卡住吗?SDK将设备保持在睡眠模式外约8秒,以便XTAL32稳定下来,因此在启动时,设备应保持活动状态8秒。对于SDK,要将睡眠模式设置为fw,您唯一需要做的就是设置_pm_sleep_模式(pm_mode_extended_sleep),所有其他配置都只是通过特定的pin唤醒设备(尽管您尚未配置哪个pin,我没有看到一个hw_wkup_configure_pin()函数来为中断指定一个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。
测试与开发工具包,工作正常。测试我的应用程序,它工作良好“如果”我从V33电源断开所有附加电子器件。
看起来睡眠配置对电源配置有直接影响。显然,这在启动时造成了问题。额外的电子在启动时使用一些电力(最大20 mA),但如果将DA1468X配置为pm_set_sleep_mode(pm_mode_extended_sleep),看起来DA1468X无法交付。
在pm_设置_睡眠_模式(pm_模式_扩展_睡眠)下,V33为3.1V,噪音非常大。
在pm_set_sleep_mode(pm_mode_active)时,V33是3.3V,没有噪声。
所以有两个问题:
一种。睡眠配置与V33之间是否存在相关性?只是为了澄清,我不是指睡眠模式,但睡眠配置。
B如果我将命令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事件Page 83 .pdf。
该设备处于睡眠模式,在点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函数中唤醒时,您必须设置引脚的状态,因为它们重新配置它们。”
这是否意味着我必须调用此periph_设置函数(
prvsetuhardware (void)
在我的情况下)什么时候醒来?如果我想在VBUS_Handler()中断时醒来,我在哪里可以这样做?
VBUS_HANDLER()不接缝以具有用户可定义的回拨功能。
谢谢。
嗨Myken,
我认为,大多数情况下,您在睡觉时误解了系统的功能,我理解的情况以及您的设置可能发生的情况:
谢谢mt_dialog.
对!
我错过的一件事是,该设备将进入睡眠模式之间的广告间隔。在我完全停止做广告后,我就不这么想了。
我的外部设备在那点消耗到大量电力,并且断言非常可能。
关于唤醒后gpio的重新初始化,您引用了一个peripher_setup函数,没有peripher_setup函数。
但是有一个
静态孔隙pm_init_wake_up(空白)
函数,该函数将“唤醒后初始化系统”。在此功能中有以下代码:
if (peripher_init != NULL) {
periph_init ();//打开外部设备和gpio
}
periph_init是指向初始化gpio的函数的指针。这个指针在
空白pm_system_init (periph_init_cb peripherals_initialization)
功能。因此,为了在唤醒时自动初始化gpio,必须调用函数
pm_system_init(初始化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.