你好,
我目前正在基于ble_all_in_one示例开发示例应用程序。ble_all_in_one示例上的更改如下
1.特性和服务的变化
2.将自定义应用程序数据写入SPI flash。
3.按钮事件变化(我们已经注册了一个唤醒ISR来检测短按和长按)
增加了一个调用.app_going_to_sleep的函数,该函数可以拉下一个GPIO接口,完全关闭自定义硬件上的单板
问题陈述
似乎电路板没有进入扩展的睡眠模式,而且.App_Goop_to_sleep函数未被调用。我们测量电路板消耗的电压,它与操作模式所消耗的电压相同。绘制测试点以这样的方式绘制,如果电源从电路板切断,则TP应低至0.06V。
2.检测不活动后,电路板应进入电源截止模式。
我试着什么
1.我尝试遵循Dialog提供的睡眠模式教程,但我还是不走运。
2.我试图从我的代码中删除所有的arch_force_active_mode()和arch_force_restore_sleep()调用。
3.我试图使用WKUPCT_DISABLE_IRQ()函数对GPIO按钮取消注册唤醒回调。
4.明确称为ARCH_SET_EXTEDDED_SLEEP()函数以将电路板放在低功率模式下。
如果你需要更多的细节,请随时联系我。请为我提供解决这个问题的宝贵意见。
先谢谢你
问候
dhruv shah.
关键词:
设备:
嗨dhruv11593,
我正在处理你的问题,我会尽快给你答复。
谢谢,PM_DIALOG.
嗨PM_Dialog,
期待您的回复。如果你需要任何技术上的帮助,请告诉我
嗨dhruv11593,
你能告诉我你是如何理解你的设备不会延长睡眠模式的吗?我试图复制您的问题,但在我这边,.app_going_to_sleep回调函数总是在进入扩展睡眠模式之前被触发。您是否尝试在函数中添加断点,在触发.app_going_to_sleep后执行该断点,并使用热附加调试器运行代码?
谢谢,PM_DIALOG.
嗨PM_Dialog,
非常感谢你在你那端努力重现了我的测试场景。
在我们的定制板上,为了实现更长的电池寿命,我们有一个系统触发GPIO,它保持系统的活动,直到它保持高和切断电压,当系统降低。一旦板启动,我们就在pherip_init()函数中将这个GPIO配置为高。在.app_going_to_sleep回调函数中,我们将这个GPIO拉低,从而切断SoC的电源供应。
当SoC断电时,测试板上的理想电压大约在0.01到0.03 V之间,当系统激活时,电压与电池的电流容量相同。如果.app_going_to_sleep回调被触发,我们应该看到电压从~3 V降至0.01 V,这是从来没有的情况。我们测量了1后系统上的电压。3.理想时间为5分钟,但电路板仍然消耗电池的能量。
就我的理解而言,当进行步骤调试时,板子将始终处于活动模式。如果有,请说明。
问候,
dhruv shah.
嗨dhruv11593,
从你在文章中提到的我可以理解,为了实现你的应用程序,你对SDK的ble_app_peripheral示例做了一些修改。如果你尝试使用SDK的默认示例测试.app_going_to_sleep回调函数,就像它一样,你能让我知道在进入睡眠之前会触发回调函数吗?请尝试使用一些断点并使用热连接调试器运行您的代码。您是否能够看到代码停止到已注册的回调?
.app_ging_to_sleep回调函数从app_sleep_entry_proc(sleep_mode)调用;将其放入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_ging_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.