大家好,
我目前正在开发一个基于ble_all_的示例应用程序。在一个示例中,ble_all_顶部的更改如下
1.特性和服务的变化
2.将自定义应用程序数据写入SPI闪存。
3.按钮事件更改(我们已为该按钮注册唤醒ISR,以检测短按和长按)
4,添加了要调用的函数。app_将进入睡眠状态,这将关闭一个GPIO接口,该接口在自定义硬件上完全断电
问题陈述
1.看起来电路板没有进入扩展睡眠模式,.app_going_to_sleep函数没有被调用。我们正在测量电路板所消耗的电压,它与在操作模式下所消耗的电压相同。测试点被绘制成这样一种方式:如果从板上切断电源,TP应该低至0.06V。
2.检测到不活动后,单板应进入断电模式。
我试过的
1.我试着遵循Dialog提供的睡眠模式教程,但仍然运气不佳。
2.我试图从代码中删除所有arch\u force\u active\u mode()和arch\u force\u restore\u sleep()调用。
3.我尝试在外围设备断开连接时使用wkupct_disable_irq()函数注销GPIO按钮的唤醒回调。
4.显式调用arch_set_extended_sleep()函数,将单板置于低功耗模式。
如果您需要更多详细信息,请随时与我联系。请引导我通过你的宝贵见解来解决这个问题。
先谢谢你
当做
Dhruv沙
设备:
您好,dhruv11593,
我正在处理你的问题,我会尽快回复你。
谢谢,PM_Dialog
你好,下午对话,
期待您的回复。如果您需要任何技术帮助,请告诉我
您好,dhruv11593,
请告诉我您是如何理解您的设备不会进入延长睡眠模式的?我试图复制您的问题,但在我这边,.app\u going\u to\u sleep回调函数总是在进入扩展睡眠模式之前触发。您是否尝试在函数中添加断点,该断点将在触发.app_going_to_sleep后执行,并在热附加调试器的情况下运行代码?
谢谢,PM_Dialog
你好,下午对话,
非常感谢您为重新创建我的测试场景而付出的努力。
在我们的定制电路板上,为了获得更长的电池寿命,我们有一个系统触发器GPIO,它可以保持系统处于活动状态,直到它保持高电平,并在低电平时切断系统的电压。一旦主板启动,我们就在pherip_init()函数中将这个GPIO配置为high。在.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沙
您好,dhruv11593,
正如我从你的帖子中所提到的,为了实现你的应用程序,你对SDK的ble_app_外围示例进行了一些修改。如果您尝试使用SDK的默认示例测试.app_going_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