你好,
我一直在与DA14583 MCU。现在我的定制电路板愿与PIR传感器Azoteq(IQS621)MCU。
我的Azoteq传感器与DA14583接口的所有功能都工作正常,没有任何问题。
现在,我需要在我的定制设备持续时间长的2年电池寿命的睡眠模式配置。
我正在使用2个AAA单元来为设备供电。
我无法配置与中断的Azoteq传感器中断每隔10ms的I2C通信对话框MCU休眠模式。
所以,任何一个可以帮助我如何能在最长时间睡眠模式配置配置对话框MCU,它应该醒来每当有来自Azoteq传感器数据。
同时,我正在检查Azoteq MCU如何减少当前的消耗,如果你帮助Dialog MCU部分进行睡眠模式配置,将会非常有帮助。
感谢和问候
Rohit R.
设备:
嗨rohit,
对不起,这不是从你的问题,如果你想或不想醒来来自传感器的外部中断清除。
您可以启用睡眠模式并指定一个或多个GPIO以生成唤醒(有关唤醒计数器的详细信息,请参阅SW参考手册)。邻近记者项目利用这种唤醒机制。
如果您不想在中断时从传感器中醒来,您只需启用延长睡眠,并设置一个计时器来唤醒设备,以从传感器查询数据,从而决定是否保持清醒或返回睡眠。
/ MHv
嗨MHv,
我不想用GPIO中断唤醒设备。由于传感器中断是每10毫秒,所以我不能用它来唤醒设备,因为它和设备不是睡眠状态一样好。在硬件方面我没有任何按钮。
“如果你不想在传感器中断时醒来,你只需启用延长睡眠,并设置计时器来唤醒设备,以从传感器查询数据,从而决定是否保持清醒或返回睡眠。”
-根据你的评论,以下是我的理解,如果我错了,请纠正。
1.我必须使用计时器0或计时器1,其中我必须在设备进入睡眠状态时启动计时器,并在计时器的中断处理程序中唤醒它。[根据应用程序调用处理程序的时间周期留给我]
但是根据以上的理解,我有一些疑问,我想知道您的建议
1.在当前固件中,我已配置Timer 0才能执行200ms的其他任务。那么我应该同时使用根据您的建议或任何其他方式实现唤醒算法,以便我可以实现2年的电池寿命?
感谢和问候
Rohit R.
嗨rohit,
推荐的前进道路是采取应用定时器(app_easy_timer)的优势。让我们假设你要唤醒和查询传感器每秒。这可以通过设置定时器acheieved如下所示:
app_easy_timer(100,cb_my_timeout);
第一个参数指定定时器超时后100 * 10毫秒= 1000毫秒= 1秒。此时回调cb_my_timerout()获取叫。在这个回调函数中您将实现数据的查询,并重新设置计时器。硒为app_easy_timer细节的SW参考手册(提示:它是易于使用; O)
你有非常大的电池,所以我希望你可以很容易acheieve 2年电池寿命。
/ MHv
嗨MHv,
感谢您的反馈意见,
我将实施相同并回复您。
感谢和问候
Rohit R.
谢谢mhv_dialog为您的建议!
嗨Rajapurerohit,
抱歉在这个论坛线程中跳跃。如果您需要进一步支持,您可以让我们知道吗?
谢谢,PM_DIALOG.
嗨PM_Dialog,
我正在努力,我的实现还没有完成。
由于我的工作平行于其他任务也。所以,我没有回信。
一旦我完成实施,我会回复你。
感谢您的理解
Rohit R.
嗨Rajapurerohit,
好的,请告诉我们你们什么时候开始实施
谢谢,PM_DIALOG.
嗨PM_Dialog,
我已经开始执行使用app_easy_timer()睡眠模式,并在回呼醒如先前建议。
但我并不怀疑,
情况1:
1)我在user_config.h配置装置ARCH_EXT_SLEEP_ON
2)然后,使用5秒定时器作为计数时,5秒时间逝去称为app_easy_timer(后)开始[2秒]然后启用使用arch_set_extended_sleep睡眠()函数。
3)然后,在app_easy_timer禁用睡眠的回调函数,第一次尝试只通过调用arch_disable_sleep()并没有成功唤醒等下次尝试这样做下面的功能
ARCH_DISABLE_SLEEP();
if(getBits16(sys_stat_reg,per_is_down))
{
periph_init();
}
如果(arch_ble_ext_wakeup_get())
{
arch_set_sleep_mode (app_default_sleep_mode);
ARCH_BLE_FORCE_WAKEUP();
ARCH_BLE_EXT_WAKEUP_OFF();
app_easy_wakeup ();
}
4)调试后来知道我的5秒定时器函数只不执行,所以这导致了整个睡眠逻辑的错误。
案例2:
1)然后,我保持ARCH_SLEEP_OFF在user_config.h
2)步骤与案例1相同。但这一次,在计时器经过5秒后执行arch_set_extended_sleep()函数,设备停止发布
3)但是回调cb_my_timeout()函数不执行,所以我没能看到设备唤醒并正常投放广告。
不了解您的问题是什么问题,请帮助我做错事。
如果您引导我开发睡眠模式,对我来说非常有帮助。
感谢和问候
Rohit R.
嗨Rajapurerohit,
请检查SDK5.0.4的BLE_APP_SLEEPMODE示例吗?它位于Projects \ target_apps \ ble_examples \ ble_app_sleepmode sdk路径下。在此示例中,app_easy_timer()用于停止广告并将系统放入睡眠模式。然后,您可以通过GPIO中断唤醒芯片。
如果您正在开始一个新的设计或项目,我们建议从我们最新的名为DA14531的Smartbond设备开始。SDK得到了很大的改进,我们有很多代码示例和改进的文档,还有软件路线图支持。DA14580产品族和SDK5没有任何软件路线图支持。
请查看DA14531产品页面:
https://www.dialog-seminile.com/produ亚博电竞菠菜cts/connectivity/bluetooth-low-energy/products/da14531
DA14531应亚博国际官网平台网址用:
- 连接的消费:信标,智能标签,遥控器,感应标签,连手表,手写笔,鼠标,玩具,低功耗传感器,蓝牙LE的“BLE管”添加到现有的应用程序亚博国际官网平台网址
-联网健康:联网注射器、吸入器、血糖监测仪、智能贴片、血压计、温度计
-汽车:轮胎压力,监测系统和低功率无线传感器
DA14531最大的好处是超低的成本和功率!
谢谢,PM_DIALOG.
嗨PM_Dialog,
感谢您的答复,
只见ble_sleep榜样,但这对我来说是没有用的。因为我没有使用任何外部GPIO唤醒设备,因为在该产品的设计中没有GPIO引脚。
在BLE_SLEEP示例中,它们正在使用GPIO而不是定期唤醒设备。在我的系统中,我想要定期睡眠并唤醒逻辑。
所以请有关定期唤醒和睡眠帮助。
我的设备,它的作用如下,请找到该设备和帮助我如何能实现这个设备的电池寿命为2年的运作。
1)使用IQS621 I2C基代理传感器与我们的对话框DA14583 MCU接口
2)这里,我读取“RDY”引脚上的数据。IQS621传感器的RDY引脚每10ms提供中断读取数据[如Touch, Proxy和ALS]。基本上这个RDY引脚10ms中断窗口读取传感器I2C数据。[这个RDY中断我不能用于从睡眠中唤醒设备,因为它每10毫秒中断一个窗口]
3)接下来,如果触摸数据可用,我将操作命令发送到其他设备,如果检测到任何Person时刻[即。然后我再次向其他设备发送操作命令。
4)在此,在读取数据PIR [人时刻]我检查ALS数据与一些阈值,如果两者都正则仅发送操作命令给设备。如果一个不存在,则不会发送命令。
5)上述功能是有效的,并且得到了验证。设备正常工作。
6)现在,为了设备长寿命,我的下一步是睡眠mod配置。
因此,我想开发一个没有任何GPIO中断的睡眠模式配置。我的最终目标是“检查是否有任何数据从I2C基础传感器几秒钟(例如2到5秒),然后如果没有数据,进入睡眠模式,并在一段时间后醒来,再次检查数据。如果有数据持续保持清醒不要去睡觉。这个重复动作应该发生"
不,我没有开始一个新项目。
使用DA14583 MCU使用SDK 5.0.4已开发的设备。所有功能都已经过验证,电路板已准备好仅在开发下进行最终部署,是此设备的电源管理。所以现在我专注于睡眠模式。
我将查看DA14531设备相关文件,了解你所分享的目的。
但我需要帮助SDK 5和DA14583设备相关的开发。
使用ble_app_sleepmode例子,我将尽力实现睡眠模式和管理设备的睡眠,醒来的算法。在任何更新的情况下,我会尽快给你趁早。
感谢和问候
Rohit R.
嗨rohit,
请在SDK的ble_app_sleep模式示例中找到一个diff文件,用于实现定期唤醒和睡眠。为了从永久休眠模式中唤醒,使用了BLE定时器。在这个演示中,系统广告5秒,然后停止广告,进入睡眠模式。它将在5秒后醒来,它将重新开始广告。请记住,在广告和连接之间,设备会进入睡眠模式。此外,当处于睡眠模式时,所有外围域都将关闭电源。这个简单的演示演示了如何使用app_easy_timer() API来唤醒和休眠。您可以根据您的项目需求进行调整。
谢谢,PM_DIALOG.
嗨PM_Dialog,
感谢您对示例的更新。
我经历的例子文件,但我不理解这行代码被注释掉和使用。
diff文件不支持,所以我在notepad++上打开了它,但有些行令人困惑,难以理解。
右括号和左括号混淆了,不理解@@代表什么,有些行前面显示+,有些行前面显示-。
例如,
-static空隙app_button_press_cb(无效)
+ * /
+静态无效app_wakeup_cb(无效)//哪个是左括号,哪个是右括号,哪一部分要排除
{
- if (GetBits16(SYS_STAT_REG, PER_IS_DOWN))
+ serialic_wake_up_timer_used = easy_timer_invalid_timer;
+
+
+ if (GetBits16(SYS_STAT_REG, PER_IS_DOWN))
{
periph_init();
}
@@ -239,39 +245,14 @@静态void app_button_press_cb(void)
ARCH_BLE_EXT_WAKEUP_OFF();
app_easy_wakeup ();
}
- }
-
- / **
- **********************************************************
- * @brief应用唤醒回调函数。在API消息实用程序中注册。
- * @return void
- **********************************************************
- * /
-static空隙app_wakeup_cb(无效)
- {
+
//如果state不是空闲的,忽略消息
如果(ke_state_get(TASK_APP)== APP_CONNECTABLE)
——{
+ {
user_app_adv_start();
}
}
抱歉,但如果可能的话,请您在不同的格式中共享文件,可以轻松打开,了解使用哪一行代码,并且不使用它,那么它将真正帮助我进一步了解和发展。
按我与您共享的差异文件的理解。我试图实现同样的在我的项目文件中的用户周边的.c和.h。请找到相同的txt文件。但该设备的广告,无法看到它睡了5秒,之后醒来。要检查这个我已经使用BLE_Scaneer移动应用程序。让我知道如果我在配置上做了什么错事。
感谢您的理解
感谢和问候
Rohit R.
嗨PM_Dialog,
请尽快让我知道你的反馈。
这对我来说是非常紧迫的。
感谢和问候
Rohit R.
嗨Rajapurerohit,
很抱歉耽搁了。请找到附件中你应该在SDK的ble_app_sleepmode示例中做的修改。请尝试SDK提供的干净的ble_app_sleepmode示例中的建议步骤。
谢谢,PM_DIALOG.
嗨PM_Dialog,
感谢您更新的文件。
现在,我能打开该文件,我按照文件中提到的步骤。
在下面的步骤2我已经使用arch_set_extended_sleep()函数而不是arch_set_deep_sleep()函数
在user_config.h文件中启用ARCH_EXT_SLEEP_ON
/ *步骤2:修改user_app_adv_start()* /
空隙user_app_adv_start(无效)
{
app_adv_data_update_timer_used = app_easy_timer(APP_ADV_DATA_UPDATE_TO,adv_data_update_timer_cb);
struct gapm_start_advertise_cmd * cmd;
CMD = app_easy_gap_undirected_advertise_get_active();
//动态添加特定制造商的数据
mnf_data_update();
App_add_ad_struct (cmd, &mnf_data, sizeof(struct mnf_specific_data_ad_structure));
//在广告期间设置深度睡眠
ARCH_SET_DEEP_SLEEP();/ /函数arch_set_extended_sleep ();
app_easy_gap_undirected_advertise_start ();
}
但一旦设备进入睡眠模式,就无法再醒来。不理解为什么?
当你在文件中提到的我都遵循相同的步骤。
请让我知道我在第二步做错了什么。
感谢和问候
Rohit R.
嗨rohit,
在该项目中是否遵循建议的步骤?可以请你在调试模式下运行,并在app_wakeup_cb添加断点()?
谢谢,PM_DIALOG.
嗨PM_Dialog,
我的项目是基于ble_peripheral的例子。
我只在调试模式下运行,我一直保持断点,但程序没有执行到app_wakeup_cb()函数。
在user_app_adv_start()函数之后,不再执行其他函数。
我所遵循的配置睡眠模式的步骤
1) user_config.h文件启用ARCH_EXT_SLEEP_ON
2),随后的睡眠模式配置按照由您共享该文件。广告和连接之间配置睡眠
而经过一段时间的程序是停留在下面的功能rwble.c文件,
//启动校正
ble_deep_sleep_corr_en_setf (1);
如果((DEVELOPMENT_DEBUG)&&(USE_POWER_OPTIMIZATIONS))ASSERT_WARNING(0);- >在此行代码后,在某些时间后停止了Rwble.c文件
{
slp_period_retained = slp_period;
//如果这个断言命中,则LP ISR比持续的时间长
//已经通过LP_ISR_TIME_XTAL32_CYCLES和LP_ISR_TIME_USEC保留。
如果(sleep_lp_cycles &&(sleep_lp_cycles
}
请尽快让我知道您的反馈
感谢和问候
Rohit R.
嗨rohit,
最可能的原因说法是因为LP_Hanlder花费太多的时间来执行。这种警告意味着对于BLE核心更多的时间已被带到唤醒比计算值的。该sleep_lp_cycles是BLE核心进入睡眠状态之前编程的睡眠量。该slp_period是当最终的设备已被唤醒测量的实际睡眠。要做到这一点,如果实际的睡眠比再编程较大可能你会错过一个BLE事件。
这可以通过在唤醒设备也发生且中断停止,但
因此,请检查您在代码的任何部分手动禁用中断。
因为它是一个自定义代码和自定义板,我不能复制或调试它。我的建议是使用SDK的ble_app_sleepmode示例和我建议的步骤。你能复制吗?
此外,我认为你没有修改任何的SDK文件。
谢谢,PM_DIALOG.
嗨PM_Dialog,
1)“这也可以,如果唤醒设备发生而中断被禁止,但” - 我没有得到这一点
2)“所以,请检查您是否手动禁用在你的代码的任何部分中断。” - 不,不是禁用任何部分
3)”因为它是一个自定义代码和自定义板,我不能复制或调试它。我的建议是使用SDK的ble_app_sleepmode示例和我建议的步骤。你能复制这个吗?-好的,为了测试app_easy_timer,我可以测试ble_sleep示例,但我的最终项目是基于ble_peripheral,现在我不能将整个项目转移到ble_sleep示例,它现在是生产阶段。所以对我来说是不可能的。
-此外,如果需要,我可以与你分享我的项目文件,让我知道你的反馈。
4)“另外,我假设你没有修改任何SDK文件。” - 不,我没有修改的任何SDK文件。
感谢和问候
Rohit R.
嗨rohit,
是的,如果有可能,请分享你的项目。
谢谢,PM_DIALOG.
嗨PM_Dialog,
请找到项目,但请确保项目应该是私人的。
它应该是你和我的,请。
链接-https://drive.google.com/file/d/1J3VK3sf2iF9O180pDlde-w79oyPc9xcJ/view?u..。
我无法上传一个完整的项目,以便在驱动器上上传。让我知道它是否可以访问您。
感谢和问候
Rohit R.
嗨rohit,
我已请访问。
谢谢,PM_DIalog
嗨PM_Dialog,
你现在能检查一下吗?
嗨rohit,
我已经下载了它,我必须在本地到我的电脑。我将通过代码,并让你知道,
谢谢,PM_DIALOG.
嗨PM_Dialog,
有我的任何更新?
感谢和问候
Rohit R.
嗨rohit,
我为我迟到的回复道歉。我们已经从论坛中脱机了,我们已经要求我们的Dist直接与您联系。
谢谢,PM_DIALOG.
嗨PM_Dialog,
是的,我收到了分销商的邮件,他们发送了相同的文件diff文件,和你之前建议的步骤一样。我不能重复已经做过的事情。所以恳请您尽快帮助我,我急需解决这个问题。
感谢您的理解。我期待着对这个问题产生积极的回应。
问候
Rohit R.
嗨rohit,
请按照下面的步骤在您的自定义代码和主板中开始调试它。由于它是一个自定义代码,许多事情可能是根本原因,但我不能调试它,因为它是基于一个自定义板。
谢谢,PM_DIALOG.
嗨PM_Dialog,
感谢您的反馈,
我在这里,
3.在Debug中运行代码 - “在调试中成功运行代码“
4.在app_easy_timer过期5秒之后,BKPT必须命中。——“失败。BKPT没打行”
从这里一天一个只有我坚持。
感谢和问候
Rohit R.
嗨Rofit,
能否请您加入BKPT到如果(状态== GAP_ERR_CANCELED)在user_app_adv_undirect_complete()回调函数行?是否打?如果是,请按F10键步骤的代码。这是行为?
谢谢,PM_DIALOG.
嗨PM_Dialog,
保持BKPT上,如果(状态== GAP_ERR_CANCELED)线 - “失败,Bkpt也没有击中这里“
我认为这是由于,我已经启用了扩展睡眠模式
量静态sleep_state_t app_default_sleep_mode = ARCH_EXT_SLEEP_ON;在user_config.h文件
如果删除此,则user_app_adv_undirect_complete()函数否则执行。
这里的问题是什么?启用延长睡眠模式的强制性步骤右键吗?但不理解未执行的原因。
感谢和问候
Rohit R.
嗨rohit,
一旦广告停止或取消user_app_adv_undirect_complete()回调函数是越来越触发。这意味着,出事了,当adv_data_update_timer_cb()被触发,广告被停止。能否请您加入到BKPT adv_data_update_timer_cb()?此外,你有启用或禁用看门狗?如果你不添加任何BKPT运行在调试模式下的代码,它卡住地方?它是否会被卡住的说法,你在以前的评论中提到?
谢谢,PM_DIALOG.
嗨PM_Dialog,
如果我在use_config.h文件中启用EXT_SLEEP,并在user_peripheralc文件中user_app_adv_start中调用arch_set_extended_sleep()函数,如你建议的diff文件或demo文件。
然后user_app_add_undirect_complete(),adv_data_update_timer_cb()和其他功能不执行。
是的,上面的睡眠配置在一段时间后,代码被卡在assert警告中,这在前面的评论中提到。
关于看门狗,我没有改变任何与看门狗有关的东西。一直是 , /****************************************************************************************************************/
/ *启用看门狗定时器。* /
/ ********************************************************************************** /
#定义CFG_WDOG
感谢和问候
Rohit R.
嗨rohit,
我已经在使用我们的DA14580临DK的SDK ble_app_peripheral例子测试了这个逻辑,我能够周期性地唤醒设备。我将与安装一个差异文件共享。请不要在SDK的ble_app_peripheral例子同样的变化。我的建议是遵循在干净的SDK更改安装并通过SDK提供应该使用的示例。
这的断点,因为BLE_WAKEUP_LP_Handler()需要更长的时间比它应该,所以你的代码进入你之前发布的断言。所述periph_init()函数是从BLE_WAKEUP_LP_Handler()调用唤醒时。因此,也许到periph_init()函数,应用程序代码需要更长的时间,它应该。此外,这一论断打那么LP ISR持续时间超过已通过LP_ISR_TIME_XTAL32_CYCLES和LP_ISR_TIME_USEC保留的时间。
我在项目检查periph_init()函数,你送我,我看到了你已经放置一段代码,延迟大大系统。您应该删除的I2C和定时器0的初始化,所有的SPI闪存交易和“更新数据库”。
谢谢,PM_DIALOG.
嗨PM_Dialog,
非常感谢你的回复,
我按照步骤按照你所共享的差异文件,并有几行代码的其他线路是重叠的,但按我的理解,我所做的更改测试相同。
如果可能,请您可以共享以前共享的文件,以便我不应该错过代码的任何部件/行。
/ ********************************************
“periodic_wake_up_timer_used = EASY_TIMER_INVALID_TIMER;
if(getBits16(sys_stat_reg,per_is_down))
{
periph_init();
}“
*********************************************************************************/
- 代码的上述部分是存在于app_wakeup_cb()函数先前共享的文件,但在当前的ble_peripheral_diff文件,它没有提到。你能告诉我它是否需要或不?
“我在项目检查periph_init()函数,你送我,我看见你把一块代码,延迟大大系统。您应该删除的I2C和定时器0的初始化,所有的SPI闪存交易,并“更新数据库”。“ -如果我移除这个,那么我应该在哪里初始化这些函数?因为这些对我的项目是必要的"
感谢和问候
Rohit R.
嗨PM_Dialog,
我所做的更改,按diff文件和我在我唯一的最终代码的理解。
以下是步骤,
1)评论I2C和Timer 0初始化,所有SPI闪存事务和“更新数据库”来自Periph_Init()函数的所有初始化功能。
2)根据我理解的extr_sleep在user_config.h文件和app_wakeup_cb()中,修改了user_app_add_undirect_complete()和User_App_Adv_Start()函数。
3)保持BKPT在线- "periodic_wake_up_timer_used = app_easy_timer(APP_PERIODIC_WAKE_UP_TO, app_wakeup_cb);"-“执行成功”
4)不停BKPT上线 - “如果(arch_ble_ext_wakeup_get())” -“执行成功”
5)每5秒步骤3和步骤4中执行
但是如果取消注释所有初始化函数(步骤2),然后再次回调代码不执行(步骤3和步骤4)。然后在哪里初始化这些函数?所有这些都是必要的。
感谢和问候
Rohit R.
嗨rohit,
请附上你应该做的改变。你可以请在user_app_init()回调函数的功能。在这里,我们通常把所有的初始化代码。
谢谢,PM_DIALOG.
嗨PM_Dialog,
我比较了文件和我的文件,两者都是一样的。我已经按照您建议的步骤配置了相同的步骤。
执行,
1)不停BKPT上线 - “periodic_wake_up_timer_used = app_easy_timer(APP_PERIODIC_WAKE_UP_TO,app_wakeup_cb);”-“执行成功”
2)在线保持bkpt - “if(arch_ble_ext_wakeup_get())” -“执行成功”
并初始化user_app_init()回调函数中的所有i2c、timer和flash。代码现在正在执行第1步和第2步。
接下来,我将测试这些整合的最终代码并执行端到端测试。
我将测试最终代码和相应的举报你。
感谢和问候
Rohit R.
嗨PM_Dialog,
我已经集成的所有步骤在最后的代码,并能够执行它们共享先前[5秒醒来]这两个步骤。
但我无法连接设备,无法读取I2C传感器数据。我正在调试同样的程序。
同时,如果你能向我建议我可能是什么问题,那么我也会调试它。
感谢和问候
Rohit R.
嗨rohit,
请在user_app_on_connection(0回调函数)中添加一个断点,并尝试步进您的代码。连接后代码做什么?
谢谢,PM_DIALOG.
嗨PM_Dialog,
下面两行仅执行两次,
执行,
1)不停BKPT上线 - “periodic_wake_up_timer_used = app_easy_timer(APP_PERIODIC_WAKE_UP_TO,app_wakeup_cb);”-“成功执行X2”
2)在线保持bkpt - “if(arch_ble_ext_wakeup_get())” -“成功执行X2”
后来代码不执行和设备不是广告
正如你所建议的,我已经在user_app_init()函数中初始化了i2c、timer和flash,但我无法读取传感器数据。
感谢和问候
Rohit R.
嗨PM_Dialog,
步步调试之后,观察到以下点,
1)我已经配置我的最终代码,按您的建议
2)然后,首先注释所有初始化形式的peripher_init()函数。
3)而且,在初始化user_app_init()按照你的建议相同
4)在调试模式下运行代码,只有两次执行的睡眠步骤(我上周写了这些步骤,仍然没有回复该)和i2c不起作用。没有传感器的值。
5)如此反复,我删除了所有来自user_app_init()函数也(I2C,定时器,初始化闪存读取所有功能移除),然后观察睡眠步骤,执行按照由你共享的文件。
我的结论是,如果我们删除I2C和其他初始化函数,那么sleep工作,否则它不会工作。
但我不理解在哪里以及如何对其进行初始化函数?
我需要这个紧急帮助失踪我的最后期限。
感谢和问候
Rohit R.
嗨Rahu,
请以调试模式运行代码。你提到的没有被执行。
我的问题是:什么是你的代码做,因为它没有执行?
它的定制设计,它基于定制电路板,所以我不能够复制你的任何问题。请以调试模式运行你的代码,并帮助我理解的行为。
每隔5秒,设备就会停止广告并进入永久休眠模式。
当处于睡眠模式时,所有外围域(包括I2C)都将关闭电源。此外,系统将进入睡眠模式之间的广告和连接间隔。因此,当没有任何I2C、flash等活动时,睡眠模式可以正常工作。也许您应该在app_wakeup_cb()中重新初始化这些函数。但这是特定于应用程序的。
为了使I2C、SPI等活动,系统应该处于活动模式。
谢谢,PM_DIALOG.
嗨PM_Dialog,
请找到测试的步骤,
情况1)
1)配置为10SEC的睡眠模式
2)仅在user_app_init()函数中仅调用I2C Init函数
3)I2C初始化步骤进入和步过 - 执行
4)传感器配置寄存器写入步骤结束,步骤进 - 执行
5)两次唤醒回调函数执行
6)设备停止广告
情况2)
1)10秒的睡眠模式配置
2)仅在User_App_Init()函数中仅调用Timer Init函数
3) timer_init()步进和步进执行
4)两次唤醒回调函数执行
5)设备停止广告
情况3)
1)配置为10SEC的睡眠模式
2)在User_App_Init()和唤醒回调函数中称为I2C init和Timer函数
3)I2C init和计时器步骤进入和步过 - 执行
4)传感器配置寄存器写入步骤结束,步骤进 - 执行
5)两次唤醒回调函数执行
6)设备停止广告
情况4)
1)配置为10SEC的睡眠模式
2)评论了所有I2C init,timer函数在user_app_init()和唤醒回调函数中
3)执行两次以上唤醒回调函数
4)但当使用BLE Scanner应用程序试图连接设备时,它是连接的,但在一段时间后(大约10秒)设备断开
5)然后设备从未宣传过(广告已停止)
壳体5)
1)禁用睡眠模式配置
2)初始化I2C,计时器在User_App_Init()函数中
3)设备广告和能够读取传感器数据
4)连接也是稳定
让我知道什么可能是错误的和你的反馈。我正在进一步测试,如果有什么我将更新你,但让我知道你对这一点的看法。
感谢和问候
Rohit R.
自从你停止做广告,进入睡眠模式和起床。还可以将外围设备重新初始化到app_wakeup_cb()回调中。
如果我理解正确,案例1-2-3-5按照预期执行。但你的意思是:
1)配置为10SEC的睡眠模式
2)仅在user_app_init()函数中仅调用I2C Init函数
您是否意味着您在设备醒来后初始化I2C?
在案例5:
4)但当使用BLE Scanner应用程序试图连接设备时,它是连接的,但在一段时间后(大约10秒)设备断开
在user_app_on_connection()中添加一个断点,并尝试步进代码?你是否得到任何断言,或者代码是否在任何地方卡住了?连接后的代码行为是什么?也许你应该取消“周期计时器”,但我不确定,因为我无法复制它在我的身边。
谢谢,PM_DIALOG.
嗨PM_Dialog,
如果我理解正确,案例1-2-3-5按照预期执行。-“否,在1-2-3-4的情况下,代码没有按预期执行,它只唤醒两次,之后,没有广告也没有代码在任何地方粘滞。只有案例5正在执行并能够读取传感器数据,因为我已经禁用了睡眠模式“
1)构造成用于10秒休眠模式 -“意思是你建议配置5秒,我已经配置了10秒”
2)称为user_app_init()函数只I2C_init功能 - “除I2C_INIT()之外的手段,我已经评论了所有其他功能计时器和闪存读取“
4)但当使用BLE Scanner应用程序试图连接设备时,它是连接的,但在一段时间后(大约10秒)设备断开
将断点添加到user_app_on_connection()中,然后尝试执行代码?你是否得到任何断言,或者代码是否在任何地方卡住了?连接后的代码行为是什么?可能你应该取消“期间计时器”,但我不确定,因为我无法在我身边复制它 -“我在做user_app_connection跳过()函数,没有断言警告,不,代码没有卡住任何地方。app_easy_timer取消功能已经存在于连接功能”
感谢和问候
Rohit R.
嗨PM_Dialog,
有什么进展吗?
感谢和问候
Rohit R.
嗨rohit,
因为它是自定义项目/董事会,我对代码发生的事情非常困惑,我无法复制您的任何问题。
在情况5中,你提到你禁用了睡眠模式。你是指定期的广告吗?
你有启用或禁用的WDOG?在案例1-4中,代码行为是什么?你尝试加入破发点,并加强你的代码?
谢谢,PM_DIALOG.
嗨PM_Dialog,
“我非常困惑代码中发生的事情,因为它是自定义项目/董事会,我无法复制您的任何问题。”-是的,我同意这是一个定制项目,但没有新的实现,我们使用的是基于I2C的传感器和定时器,这是必需的,并闪存存储数据,除了什么都没有合并。我不理解为什么在睡眠模式下I2C数据不读取,即使按照你的建议初始化它。我困惑什么是错误的,我保持BKT到每个函数在user_peripheral.c文件,代码没有停止任何assert警告或任何错误消息。
“在案例5中,您提到禁用睡眠模式。你的意思是定期的广告吗?”-是的,完全禁用睡眠模式,user_config.h SLEEP_OFF启用并删除app_easy_timer周期唤醒。
“你启用了还是禁用了WDOG ?”在案例1-4中,代码行为是什么?您是否尝试添加断点并逐步执行代码?”-是的,WDOG是启用的,除了user_提到的文件,我没有修改任何SDK文件。
你有任何I2C启用,BLE和睡眠功能实现项目,如果有,那么请与我,我会比较我的例子和检查什么是错误的?
感谢和问候
Rohit R.
嗨PM_Dialog,
我观察了几点,你能帮忙吗?
1)在测试时,我强制暂停代码,因为设备不是广告,没有来自i2c传感器的数据,然后代码暂停到下面一行从i2c_read_byte()函数,
——“WAIT_WHILE_I2C_FIFO_IS_FULL ();//等待如果Tx FIFO是满的" -这行代码暂停,你可以检查我的代码和什么是问题。
2)下我上面说的线和ADV_UPDATE时间减少到只有100 ms,保持WAKEUP_TIME 5秒然后我看到一些I2C数据但发送数据包在宣传广告就没有更新的数据,所以我再次停顿了一下下面的代码它停止函数的最后一行——“渣打银行——>可控硅& = ~(1 < < 2);“
静态内联void arch_resume_from_sleep(void)
{
//为特定于应用程序的任务在唤醒后
app_sleep_exit_proc ();
#如果((EXTERNAL_WAKEUP)&&(!BLE_APP_PRESENT))//外部醒来,只能在外部处理器设计
//禁用外部唤醒中断
ext_wakeup_disable();
# endif
//恢复ARM睡眠模式
//重置SCR [2] = SLEEPDEEP位否则该模式=空闲WFI将导致深度睡眠
//而不是处理器停止
渣打银行——>可控硅& = ~ (1 < < 2);
}
能否请您解释我什么可能是错误的。
感谢和问候
Rohit R.
页面