大家好,
我目前正在基于BLE_ALL_IN_ONE示例的示例应用程序工作。BLE_ALL_IN_ONE示例顶部的更改如下
1.特点和服务的变化
2.将自定义应用程序数据写入SPI Flash。
3.按钮事件更改(我们已注册唤醒ISR以检测短按和长按)
4,添加的函数被称为.App_GoGing_to_sleep,它拉下一个GPIO接口,在自定义硬件上完全从电路板上源
问题陈述
1.看起来电路板没有进入扩展睡眠模式,.app_going_to_sleep函数没有被调用。我们正在测量电路板所消耗的电压,它与在操作模式下所消耗的电压相同。测试点被绘制成这样一种方式:如果从板上切断电源,TP应该低至0.06V。
2.检测到不活动后,单板应进入断电模式。
我尝试了什么
1.我尝试过对话框提供的睡眠模式教程,但仍然存在,我不运气。
2.我尝试从我的代码中删除所有ARCH_FORCE_ACTE_MODE()和ARCH_FORCE_RESTORE_SLEEP()调用。
3.我尝试在外围设备断开连接时使用wkupct_disable_irq()函数注销GPIO按钮的唤醒回调。
4.显式调用arch_set_extended_sleep()函数,将单板置于低功耗模式。
如果您需要再次详细信息,请随时与我联系。请通过您通过您的宝贵见解来引导我解决这个问题。
提前感谢你
问候
Dhruv沙
设备:
嗨DHRUV11593,
我正在研究你的问题,我会尽快回复你。
谢谢,PM_Dialog
嗨pm_dialog,
期待你的回复。如果您需要任何技术帮助,请告诉我
嗨DHRUV11593,
你能告诉我你如何理解你的设备无法扩展睡眠模式吗?我试图复制你的问题,但在我的侧面,.App_Goop_To_Sleep回调函数始终触发,然后再进入扩展睡眠模式。您是否尝试将断点添加到您的函数中,以来将触发.App_Gook_to_sleep以来将被触发并使用热附加调试器运行代码?
谢谢,PM_Dialog
嗨pm_dialog,
非常感谢您,为您的测试场景进行重新创建努力。
在我们的定制板上实现较长的电池寿命,我们有一个系统触发GPIO,使系统保持活跃,直到它保持高,然后在低电平时切断电压到系统。一旦电路板启动,我们就会将此GPIO配置为Pherip_Init()函数中的高。在.app_ging_to_sleep回调函数中,我们将该GPIO降低,切断了SOC的电源。
当SOC断电时,测试垫上的理想电压为约0.01至0.03 V,并且当系统有效时,电压与电池电流容量的电压相同。如果.App_Going_to_sleep回调被触发,我们应该看到从〜3 v到0.01 v的电压下降,这绝不是这种情况。我们在1. 3. 3.和5分钟的理想时间内测量了系统上的电压,但电路板仍然从电池耗电。
就我的理解而言,当执行步骤调试时,电路板将始终处于活动模式。如果否则请澄清。
问候,
Dhruv沙
嗨DHRUV11593,
正如我能从您的帖子中提到的那样了解,您已经在SDK的BLE_APP_PERITED示例中进行了一些修改,以实现您的应用程序。如果您尝试使用SDK的默认示例测试.app_ging_to_sleep回调函数,因为它可以让我知道在睡觉前触发回调吗?请尝试使用一些断点并使用热连接调试器运行代码。您是否能够看到代码停止进入注册回调?
从app_sleep_entry_proc(sleep_mode)调用.app_going_to_sleep回调函数;它被放置到arch_goto_sleep (sleep_mode_t current_sleep_mode)函数中。arch_goto_sleep()函数在arch_main.c文件的main_func()的while(1)循环中被调用。请使用热连接的调试器运行代码,并检查sleep_mode变量的值。如果您检查arch.h头文件中的sleep_mode_t枚举,您将看到sleep_mode变量的可能值。因此,如果您使用扩展睡眠模式,sleep_mode的值应该是0x02。另外,请检查arch_goto_sleep()函数是否被触发。我从我这边进行了测试,触发了.app_going_to_sleep。
此外,DA14583在广告和连接间隔之间进入扩展睡眠模式。你能告诉我关于你董事会的电力消耗吗?如果使用扩展睡眠模式,则应配置user_config.h标题中的app_default_sleep_mode值:
const static sleep_state_t app_default_sleep_mode = ARCH_EXT_SLEEP_ON;
谢谢,PM_Dialog