你好,
我目前正在处理基于ble_all_in_one示例的示例应用程序。ble_all_in_one示例上的更改如下
1.特征和服务的变化
2.编写自定义应用程序数据到SPI flash。
3.按钮事件变化(我们已经为相同的按钮注册了一个唤醒ISR,以检测短按和长按)
添加了一个函数,叫做.app_going_to_sleep,它可以拉下一个GPIO接口,这个接口可以在定制硬件上完全打开
问题陈述
1.看来,董事会不会进入延长休眠模式和.app_going_to_sleep功能是没有得到调用。我们测量由板所消耗的电压,它是相同的为一体,在操作模式中所消耗。测试点被以这样的方式,如果功率被从电路板切断,TP应低至0.06V作图。
2.检测活动后,董事会应进入电源切断模式。
我试着什么
1.我尝试了使用Dialog提供的睡眠模式教程,但我还是没能成功。
2.我试图从代码中删除所有arch_force_active_mode()和arch_force_restore_sleep()调用。
3.我试图注销有关外围断开的GPIO使用wkupct_disable_irq按钮()函数唤醒回调。
4.显式调用arch_set_extended_sleep()函数把板在低功率模式。
如果您需要更多的细节,请随时与我联系。请通过您解决这个问题的宝贵见解指导我。
提前感谢您
问候
Dhruv直升机沙阿
关键词:
设备:
嗨dhruv11593,
我正在处理你的问题,我会尽快给你答复。
谢谢,PM_Dialog
嗨PM_Dialog,
期待您的回复。如果你需要任何技术上的帮助,请告诉我
嗨dhruv11593,
你能告诉我你是怎么理解你的设备不会延长睡眠模式的吗?我试图复制您的问题,但在我这边,.app_going_to_sleep回调函数总是在进入延长睡眠模式之前被触发。由于.app_going_to_sleep被触发,您是否尝试在将要执行的函数中添加断点,并通过热附加调试器运行您的代码?
谢谢,PM_Dialog
嗨PM_Dialog,
非常感谢您为在您这端重新创建我的测试场景所付出的努力。
在我们的定制板,以实现更长的电池寿命,我们有一个系统触发GPIO,它保持系统活跃,直到它保持高,并切断电压,以系统时,降低。当板机启动时,我们在pherip_init()函数中将这个GPIO配置为high。在.app_going_to_sleep回调函数中,我们将拉出这个GPIO低点,它将切断SoC的电源。
当SoC电源关闭时,测试板上的理想电压大约是0.01到0.03 V,当系统是活跃的,电压是相同的电池的电流容量。如果.app_going_to_sleep回调被触发,我们应该会看到电压从~ 3v降至0.01 V,但这是不可能的。我们测量了1年后系统上的电压。3.和5分钟的理想时间,但董事会仍然消耗电力从电池。
据我了解,在做步进调试时,板子总是处于主动模式。如果有,请说明。
问候,
Dhruv直升机沙阿
嗨dhruv11593,
正如我从你的文章中所提到的那样,你已经对SDK的ble_app_外围示例做了一些修改,以实现你的应用程序。如果您尝试使用SDK的默认示例测试.app_going_to_sleep回调函数,您是否可以在进入睡眠之前让我知道这个回调函数是否被触发?请尝试使用一些断点并运行您的代码与热附加调试器。你能看到代码停止到注册回调吗?
app_going_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_going_to_sleep被触发。
此外,DA14583会在广告和连接间隔之间进入延长的睡眠模式。你能告诉我你的板的耗电量吗?如果你使用扩展的睡眠模式,user_config.h头中的app_default_sleep_mode值应该这样配置:
量静态sleep_state_t app_default_sleep_mode = ARCH_EXT_SLEEP_ON;
谢谢,PM_Dialog