你好,
我一直在使用DA14583 MCU。现在我的定制板已经准备好了PIR传感器Azoteq(IQS621) MCU。
所有功能都在没有任何问题的情况下工作,而Azoteq传感器与DA14583接口。
现在,我需要做一个睡眠模式配置,我的定制设备可以持续2年的电池寿命。
我使用2个AAA电池为设备供电。
我无法使用中断配置睡眠模式,因为Azoteq传感器每隔10毫秒中断对话MCU进行I2C通信。
所以,有没有人可以帮助我如何配置Dialog MCU在睡眠模式配置最大的时间,它应该醒来时,有Azoteq传感器的数据。
同时,我正在检查Azoteq MCU如何减少当前的消耗,如果你帮助Dialog MCU部分进行睡眠模式配置,将会非常有帮助。
感谢和问候
罗希特河
设备:
嗨,罗希特,
对不起,如果您想要或不想从传感器唤醒外部中断,则不清楚您的问题。
您可以启用睡眠模式并指定一个或多个GPIO以生成唤醒(有关唤醒计数器的详细信息,请参阅SW参考手册)。邻近报告器项目利用了这种唤醒机制。
如果您不想在中断时从传感器中醒来,您只需启用延长睡眠,并设置一个计时器来唤醒设备,以从传感器查询数据,从而决定是否保持清醒或返回睡眠。
/ MHv
嗨mhv,
我不想用GPIO中断唤醒设备。由于传感器中断是每10毫秒,所以我不能用它来唤醒设备,因为它和设备不是睡眠状态一样好。在硬件方面我没有任何按钮。
“如果你不想在传感器中断时醒来,你只需启用延长睡眠,并设置计时器来唤醒设备,以从传感器查询数据,从而决定是否保持清醒或返回睡眠。”
-根据你的评论,以下是我的理解,如果我错了,请纠正。
1.我必须使用定时器0或计时器1,其中我必须在设备睡觉时启动定时器并在计时器的中断处理程序中唤醒它。[调用处理程序的时间段按照申请留给我]
但是根据以上的理解,我有一些疑问,我想知道您的建议
1.在当前固件中,我已将计时器0配置为200ms,以执行应用程序的其他任务。那么,我是否应该根据您的建议使用相同的时间来实现唤醒算法,或者以任何其他方式来实现2年的电池寿命?
感谢和问候
罗希特河
嗨,罗希特,
推荐的方法是利用应用程序计时器(app\u easy\u timer)。假设您希望每秒钟醒来并查询传感器。这可以通过如下所示设置计时器来实现:
应用程序轻松计时器(100,cb\U我的\U超时);
第一个参数指定在100 * 10 ms = 100ms = 1s后的超时计时器。此时回调CB_MY_Timerout()调用。在此回调函数中,您将实现数据轮询并再次设置计时器。SE SE SW参考手册,了解APP_EASY_TIMER的详细信息(提示:易于使用; o)
你有非常大的电池,所以我希望你可以很容易地达到2年的电池寿命。
/ MHv
嗨mhv,
感谢您的反馈,
我会实施同样的方法,然后回复你。
感谢致敬
罗希特河
感谢MHv_Dialog提供您的建议!
嗨Rajapurerohit,
很抱歉,在这个论坛的帖子跳。如果您需要进一步的支持,请告知我们?
谢谢,下午好
嗨PM_Dialog,
我正在努力,我的实现还没有完成。
因为我也并行地处理其他任务。所以我没有回复。
一旦我完成了实施,我会给你回复的。
谢谢你的理解
罗希特河
嗨Rajapurerohit,
好的,请告诉我们你们什么时候开始实施
谢谢,下午好
嗨PM_Dialog,
我已经开始使用app_easy_timer()实现睡眠模式,并按照前面的建议在回拨中醒来。
但我并不怀疑,
案例1:
1)我已将设备配置为user_config.h中的ARCH_EXT_SLEEP_ON
2) 然后使用5秒计时器作为计数,经过5秒时间后,调用app_easy_timer()start[2sec],然后使用arch_set_extended_sleep()函数启用睡眠。
3)然后,在app_easy_timer的回调函数禁用睡眠,首先试图唤醒只通过调用arch_disable_sleep()没有成功,所以下一个尝试下面的函数
拱_禁用_睡眠();
if(GetBits16(系统状态寄存器,PER向下))
{
periph_init();
}
如果(arch_ble_ext_wakeup_get ())
{
ARCH_SET_SLEEP_MODE(app_default_sleep_mode);
拱力唤醒();
拱门可外接唤醒关闭();
app_easy_wakeup();
}
4) 调试后,我知道我的5秒定时器功能只是不执行,所以这导致整个睡眠逻辑失败。
案例2:
1) 然后我在user_config.h中关闭了ARCH_SLEEP_
2)步骤与案例1相同。但这一次,在计时器经过5秒后执行arch_set_extended_sleep()函数,设备停止发布
3) 但回调cb_my_timeout()函数未执行,因此我无法看到设备正常唤醒和播发。
不明白是什么问题,请你帮忙我做错了什么。
如果你指导我发展睡眠模式,那对我会很有帮助。
感谢和问候
罗希特河
嗨Rajapurerohit,
请检查SDK5.0.4的ble_应用程序_睡眠模式示例,好吗?它位于projects\target\u apps\ble\u examples\ble\u app\u sleepmode SDK路径下。在本例中,app_easy_timer()用于停止广告并将系统置于睡眠模式。然后,您可以通过GPIO中断唤醒芯片。
如果您正在启动新的设计或项目,我们建议首发我们最新的SmartBond设备名为DA14531。SDK有很大改进,我们有很多代码示例和改进的文档,还有软件路线图支持。DA14580产品系列和SDK5没有任何软件路线图支持。
请查看DA14531产品页面:
//www.xmece.com/亚博电竞菠菜products/connectivity/bluetooth-low-energy/products/da14531
DA14531应亚博国际官网平台网址用程序:
-连接的消费者:信标、智能标签、遥控器、接近标签、连接的手表、触笔、鼠标、玩具、低功耗传感器、蓝牙LE附加到现有应用程序的“BLE管道”亚博国际官网平台网址
-联网健康:联网注射器、吸入器、血糖监测仪、智能贴片、血压计、温度计
-汽车:轮胎压力,监测系统和低功率无线传感器
DA14531最大的好处是超低的成本和功率!
谢谢,下午好
嗨PM_Dialog,
谢谢你的回复,
我看到了BLE_SLEEP榜样,但对我来说是没有用的。因为我不使用任何外部GPIO来唤醒设备,因为没有在本产品的设计中使用的GPIO引脚。
在ble_睡眠示例中,他们使用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秒),如果没有数据存在睡眠模式并在一段时间再次唤醒后再检查数据。如果有数据连续保持清醒不要睡觉。应该发生这种重复行动“
不,我不是在开始一个新项目。
它是一个已经开发的设备,使用SDK5.0.4和DA14583 MCU。所有功能都经过验证,并且电路板已准备好进行最终部署。只有在开发中,此设备的电源管理才可用。所以现在我把重点放在睡眠模式上。
我将查看DA14531设备相关文件,了解你所分享的目的。
但是我需要帮助的是SDK 5和DA14583设备相关的开发。
使用ble_app_sleepmode示例,我将尝试实现睡眠模式并管理设备睡眠,唤醒算法。如果有任何更新,我会尽快回复你。
感谢和问候
罗希特河
嗨,罗希特,
请在SDK的ble_app_sleep模式示例中找到一个diff文件,用于实现定期唤醒和睡眠。为了从永久休眠模式中唤醒,使用了BLE定时器。在这个演示中,系统广告5秒,然后停止广告,进入睡眠模式。它将在5秒后醒来,它将重新开始广告。请记住,在广告和连接之间,设备会进入睡眠模式。此外,当处于睡眠模式时,所有外围域都将关闭电源。这个简单的演示演示了如何使用app_easy_timer() API来唤醒和休眠。您可以根据您的项目需求进行调整。
谢谢,下午好
嗨PM_Dialog,
感谢您对示例的更新。
我正在通过示例文件,但我不了解评论哪一行代码并使用它。
差异文件不支持,所以我在笔记本++上打开它,但有些线条正在制作混淆。
关闭支架和开放括号正在制造混乱,而不是了解@@代表和某些线路显示+和某种线路。
例如,
静态孔隙app_button_press_cb(空白)
+*/
+静态无效应用程序\唤醒\ cb(无效)//哪个是左括号,哪个是右括号,哪一部分要排除
{
- 如果(getBits16(sys_stat_reg,per_is_down))
+定期唤醒定时器使用=容易定时器无效定时器;
+
+
+ if(getbits16(sys_stat_reg,per_is_down))
{
periph_init();
}
@@-239,39+245,14@@静态无效应用程序按钮按下cb(无效)
拱门可外接唤醒关闭();
app_easy_wakeup();
}
- }
-
-/**
- ****************************************************************************************
- * @brief应用唤醒回调函数。在API消息实用程序中注册。
-*@返回无效
- ****************************************************************************************
- * /
-静态无效应用程序\唤醒\ cb(无效)
- {
+
//如果state不是空闲的,忽略消息
if (ke_state_get(TASK_APP) == APP_CONNECTABLE)
——{
+ {
user_app_adv_start ();
}
}
很抱歉,如果可能的话,请您以不同的格式共享该文件,该文件可以轻松打开,并了解使用了哪行代码,哪些未使用,这将真正帮助我进一步理解和开发。
根据我对你分享的diff文件的理解。我已经尝试在我的项目文件user peripheral .c和.h中实现相同的功能。请找到相同的txt文件。但该设备正在做广告,无法看到它在睡眠5秒后醒来。为了检查这个,我使用了BLE_Scaneer移动应用程序。如果我在配置中做错了什么,让我知道。
谢谢你的理解
感谢和问候
罗希特河
嗨PM_Dialog,
请尽快让我知道你的反馈。
这对我来说非常紧迫。
感谢和问候
罗希特河
嗨Rajapurerohit,
很抱歉耽搁了。请找到附件中你应该在SDK的ble_app_sleepmode示例中做的修改。请尝试SDK提供的干净的ble_app_sleepmode示例中的建议步骤。
谢谢,下午好
嗨PM_Dialog,
谢谢你更新的文件。
现在我能够打开文件,我已经按照文件中提到的步骤。
在下面的步骤2中,我使用了Arch_set_exted_sleep()函数而不是Arch_set_deep_sleep()函数
并在user_config.h文件中启用ARCH_EXT_SLEEP_ON
/*步骤2:修改user_app_adv_start() */
无效用户\应用\高级\启动(无效)
{
app_add_data_update_timer_used = app_easy_timer(app_add_data_update_to,avd_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_extended_sleep ();
app_easy_gap_undirected_advertise_start ();
}
但是一旦设备进入睡眠模式,无法唤醒。不理解为什么?
我遵循了文件中提到的相同步骤。
请让我知道我在第二步做错了什么。
感谢和问候
罗希特河
嗨,罗希特,
您在哪个项目中遵循了建议的步骤?你可以在调试模式下运行它,并在app_wakeup_cb()中添加一个断点吗?
谢谢,下午好
嗨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);
if((development_debug)&&(use_power_optimizations))
{
slp_period_retained = slp_period;
//如果此断言命中,则LP ISR持续时间超过该时间
//已通过LP_ISR_TIME_XTAL32_CYCLES和LP_ISR_TIME_USEC保留。
If (sleep_lp_cycles && (sleep_lp_cycles < slp_period))
断言警告(0);-->在这一行,代码在一段时间后停止运行rwble.c文件
}
请尽快让我知道您的反馈
感谢和问候
罗希特河
嗨,罗希特,
此断言最可能的原因是因为LP_Hanlder执行时间太长。这种警告意味着BLE堆芯的唤醒时间比计算值要长。sleep_lp_cycles是BLE核心进入睡眠前编程的睡眠量。slp_周期是设备最终醒来时测量的实际睡眠时间。为此,如果实际睡眠时间大于编程设置的睡眠时间,则可能会错过一个BLE事件。
如果设备是清醒的,并且中断被禁用,但是
因此,请检查您是否手动禁用代码任何部分中的中断。
因为它是一个自定义代码和自定义板,我不能复制或调试它。我的建议是使用SDK的ble_app_sleepmode示例和我建议的步骤。你能复制这个吗?
另外,我假设您没有修改任何SDK文件。
谢谢,下午好
嗨PM_Dialog,
1)“如果设备清醒并且禁用中断但” - 我没有明白这一点,则可以发生这种情况
2)”因此,请检查您是否在代码的任何部分手动禁用中断。-不,没有使任何部分失效
3)“由于它是一种自定义代码和自定义板,我无法复制或调试这一点。我的建议是使用我建议的步骤使用SDK的BLE_APP_SLEEPMODE示例。你能够复制这个吗?” - 好的,用于测试app_easy_timer我可以测试ble_sleep exampt但我的最终项目基于ble_peripheral,现在我无法将整个项目转移到ble_sleep examps,它现在是生产阶段。所以这对我来说是不可能的。
- 另外,如果需要,我可以与您共享我的项目文件,让我知道您的反馈。
4)“另外,我假设您没有修改任何SDK文件。” - 否,我没有修改任何SDK文件。
感谢和问候
罗希特河
嗨,罗希特,
是的,如果可能的话,请分享你的项目。
谢谢,下午好
嗨PM_Dialog,
请找到项目,但请确保项目应该是私人的。
它应该是你和我都能进入的。
链接-https://drive.google.com/file/d/1j3vk3sf2if9o180pdlde-w79oypc9xcj/view?u ...
我无法上传一个完整的项目,以便在驱动器上上传。让我知道它是否可以访问您。
感谢和问候
罗希特河
嗨,罗希特,
我要求访问。
谢谢,PM_DIalog
嗨PM_Dialog,
你能检查一下吗?
嗨,罗希特,
我已经下载了它,并将其本地保存到我的电脑上。我会检查代码并让您知道,
谢谢,下午好
嗨PM_Dialog,
有什么最新消息吗?
感谢和问候
罗希特河
嗨,罗希特,
我为我迟来的反应道歉。我们已经从论坛上离线,并要求我们的地区直接联系您。
谢谢,下午好
嗨PM_Dialog,
ya,我收到了分发商的邮件,他们发送了相同的文件差异文件,您已经建议的相同步骤。我不能重复已经完成的相同的东西。所以请你请尽早帮助我,这是我解决这个问题的迫切。
谢谢你的理解。我期待着在这个问题上得到积极的回应。
问候
罗希特河
嗨,罗希特,
请按照下面的步骤在您的自定义代码和主板中开始调试它。由于它是一个自定义代码,许多事情可能是根本原因,但我不能调试它,因为它是基于一个自定义板。
谢谢,下午好
嗨PM_Dialog,
谢谢你的反馈,
我在这里,
3.在调试中运行代码--“在调试中成功运行代码"
4.在app_easy_timer过期5秒之后,BKPT必须命中。——“失败。BKPT没有达到标准。”
从第一天起,只有我被困在这里。
感谢和问候
罗希特河
嗨,得益于他们,
请在User_App_Adv_Undirect_Complete()回调函数中添加BKPT到IF(Status == Gap_Err_Canceled)行中吗?它击中了吗?如果是,请按F10步骤执行代码。这是行为吗?
谢谢,下午好
嗨PM_Dialog,
keep BKPT on if (status == GAP_ERR_CANCELED) line——"失败,BKPT也没有击中此处“
我想这是因为,我启用了延长睡眠模式
const static sleep\u state\u t app\u default\u sleep\u mode=ARCH\u EXT\u sleep\u ON;在user_config.h文件中
如果我删除这个函数,那么user\u app\u adv\u undirect\u complete()函数正在执行,否则不会执行。
这里的问题是什么?启用延长睡眠模式是强制性步骤,对吗?但不了解不执行的原因。
感谢和问候
罗希特河
嗨,罗希特,
一旦广告停止或取消,就会触发user_app_adv_undirect_complete()回调函数。这意味着当adv_data_update_timer_cb()被触发并且广告被停止时,出现了一些错误。您能在adv_data_update_timer_cb()中添加一个BKPT吗?此外,您是否启用或禁用了看门狗?如果您在调试模式下运行代码而不添加任何BKPT,它会在任何地方卡住吗?它是否陷入了您在前面的评论中提到的断言中?
谢谢,下午好
嗨PM_Dialog,
如果我在use_config.h文件中启用EXT_SLEEP,并在user_peripheralc文件中user_app_adv_start中调用arch_set_extended_sleep()函数,如你建议的diff文件或demo文件。
然后用户\应用\ adv \ u无向\ u完成()、adv \ u数据\ u更新\ u计时器\ u cb()和其他功能不执行。
是的,上面的睡眠配置在一段时间后,代码被卡在assert警告中,这在前面的评论中提到。
关于看门狗,我没有改变任何与看门狗有关的东西。一直是 , /****************************************************************************************************************/
/ *启用看门狗定时器。* /
/****************************************************************************************************************/
#定义CFG_WDOG
感谢和问候
罗希特河
嗨,罗希特,
我已经使用我们的DA14580 Pro DK在SDK的ble_app_外围示例中测试了此逻辑,并且我能够定期唤醒设备。我将与附加的diff文件共享。请在SDK的ble_app_外围示例中进行相同的更改。我的建议是在干净的SDK安装中遵循更改,并且应该按照SDK提供的方式使用示例。
之所以会出现此断点,是因为BLE_WAKEUP_LP_Handler()花费的时间比它应该花费的时间长,因此您的代码会进入您之前发布的断言中。唤醒时,从BLE_WAKEUP_LP_Handler()调用periph_init()函数。因此,在periph_init()函数中,应用程序代码可能需要更长的时间。此外,如果此断言命中,则LP ISR的持续时间将长于通过LP_ISR_time_XTAL32_CYCLES和LP_ISR_time_USEC保留的时间。
我检查了您发送给我的项目中的peripher_init()函数,我看到您放置的一段代码极大地延迟了系统。您应该删除I2C和Timer 0初始化,所有SPI flash事务和“更新数据库”。
谢谢,下午好
嗨PM_Dialog,
非常感谢您的回复,
我已经按照您共享的diff文件遵循了这些步骤,很少有代码行与其他代码行重叠,但根据我的理解,我做了相同的更改。
如果可能的话,你可以像以前一样共享一个文件,这样我就不会错过代码的任何部分/行。
/**************************************************************************
" periodic_wake_up_timer_used = EASY_TIMER_INVALID_TIMER; "
if(GetBits16(系统状态寄存器,PER向下))
{
periph_init();
}"
*********************************************************************************/
- 上面提到的代码部分在App_WakeUp_cb()函数中存在于先前共享的文件中,但在当前BLE_PERITALAL_DIFF文件中,未提及。你能告诉我是否需要或不是?
“我检查了您发送了我的项目中的Periph_init()函数,我看到你已经放置了一段代码,延迟了系统。您应该删除I2C和Timer 0初始化,所有SPI闪存事务,以及“更新数据库”。“ -如果我移除这个,那么我应该在哪里初始化这些函数?因为这些对我的项目是必要的"
感谢和问候
罗希特河
嗨PM_Dialog,
我根据差异文件进行了更改,并仅在我的最终代码中的理解。
以下是步骤,
1) 注释了I2C和定时器0初始化、所有SPI闪存事务以及periph_init()函数中的“更新数据库”所有初始化函数。
2) 据我所知,已根据diff文件进行配置,已在用户配置文件和应用唤醒cb()中启用EXT_SLEEP,已修改用户应用adv_Undirective_complete()和用户应用adv_start()函数。
3)保持BKPT在线- "periodic_wake_up_timer_used = app_easy_timer(APP_PERIODIC_WAKE_UP_TO, app_wakeup_cb);"-“执行成功”
4)保持BKPT在线- "if (arch_ble_ext_wakeup_get())"-“执行成功”
5)每5秒步骤3和步骤4执行
但是如果取消注释所有初始化函数(步骤2),然后再次回调代码不执行(步骤3和步骤4)。然后在哪里初始化这些函数?所有这些都是必要的。
感谢和问候
罗希特河
嗨,罗希特,
请查找您应该做的更改。您可以在User_App_Init()回调函数中取悦该函数。在这里,我们通常会放置所有初始化代码。
谢谢,下午好
嗨PM_Dialog,
我比较了文件和我的文件,两者都是一样的。我已经按照您建议的步骤配置了相同的步骤。
执行,
1) 保持BKPT在线-“定期唤醒定时器使用=应用程序轻松定时器(应用程序定期唤醒至,应用程序唤醒至);”-“执行成功”
2) 保持BKPT在线—“如果(搜索引擎外部唤醒获取())”-“执行成功”
并且还初始化了US_APP_INIT()回调函数中的所有I2C,TIMER和Flash。代码现在正在执行步骤1和步骤2。
接下来,我将用这些集成测试最终代码,并进行端到端测试。
我将测试最终代码并相应地向您报告。
感谢和问候
罗希特河
嗨PM_Dialog,
我已经在最终代码中集成了所有的步骤,并能够执行之前共享的两个步骤[5秒唤醒]。
但我无法连接设备,无法读取I2C传感器数据。我正在调试同样的程序。
同时,如果你能向我建议什么可能是错误的,那么我也会调试它。
感谢和问候
罗希特河
嗨,罗希特,
请在user_app_on_connection(0回调函数)中添加一个断点,并尝试步进您的代码。连接后代码做什么?
谢谢,下午好
嗨PM_Dialog,
以下两行仅执行两次,
执行,
1) 保持BKPT在线-“定期唤醒定时器使用=应用程序轻松定时器(应用程序定期唤醒至,应用程序唤醒至);”-“已成功执行x2”
2) 保持BKPT在线—“如果(搜索引擎外部唤醒获取())”-“已成功执行x2”
之后的代码不是执行,设备不是宣传
正如你所建议的,我已经在user_app_init()函数中初始化了i2c、timer和flash,但我无法读取传感器数据。
感谢和问候
罗希特河
嗨PM_Dialog,
分步调试后,注意以下几点:,
1) 我已经按照你的建议配置了我的最终代码
2)然后,首先注释所有初始化形式的peripher_init()函数。
3)并且,按照您的建议在user_app_init()中初始化相同
4) 在调试模式下运行代码,只需执行两次睡眠步骤(我上周向您编写了这些步骤,但仍然没有回复),I2C不工作。无法从传感器获取值。
5)如此,我也删除了来自user_app_init()函数的所有初始化(I2c,timer,flash读取所有函数删除),并且观察到睡眠步骤是根据您共享的文件执行的。
我的结论是,如果我们删除I2C和其他初始化函数,那么sleep工作,否则它不会工作。
但我不理解在哪里以及如何初始化函数?
我急需帮助,因为我错过了截止日期。
感谢和问候
罗希特河
嗨Rahu,
请以调试模式运行代码。你提到没有被执行。
我的问题是:由于它没有执行,因此您的代码是什么?
它是自定义设计,它基于定制板,因此我无法复制您的任何问题。请在调试模式下运行代码,并帮助我了解行为。
每隔5秒,设备就会停止广告并进入永久休眠模式。
当处于睡眠模式时,所有外围域(包括I2C)都将关闭电源。此外,系统将进入睡眠模式之间的广告和连接间隔。因此,当没有任何I2C、flash等活动时,睡眠模式可以正常工作。也许您应该在app_wakeup_cb()中重新初始化这些函数。但这是特定于应用程序的。
为了使I2C、SPI等活动,系统应该处于活动模式。
谢谢,下午好
嗨PM_Dialog,
请查找测试所遵循的步骤,
例1)
1) 睡眠模式配置为10秒
2) 在user_app_init()函数中仅调用I2C init函数
3) I2C初始化步进和步过执行
4) 传感器配置寄存器写入步进和步进-执行
5) 执行两次唤醒回调功能
6)设备停止广告
例2)
1) 睡眠模式配置10秒
2) 在user_app_init()函数中仅调用计时器初始化函数
3)timer_init()步入和步骤过度执行
4)执行两次唤醒回调函数
5)设备停止广告
例3)
1) 睡眠模式配置为10秒
2) 在user_app_init()和wakeup回调函数中调用I2C init和timer函数
3) I2C初始化和定时器步进和步过-执行
4) 传感器配置寄存器写入步进和步进-执行
5) 执行两次唤醒回调功能
6)设备停止广告
例4)
1) 睡眠模式配置为10秒
2) 注释了用户_app_init()和唤醒回调函数中的所有I2C init、计时器函数
3)执行两次以上唤醒回调函数
4)但是当使用BLE扫描仪应用程序尝试连接到设备时,它连接但在一段时间后(10SEC大约)设备断开连接
5) 然后设备从未进行广告(广告停止)
例5)
1) 禁用睡眠模式配置
2) 初始化用户_app_init()函数中的I2C计时器
3) 设备广告和能够读取传感器数据
4)连接也稳定
让我知道什么是错误的,你对此的反馈。我进一步测试了,如果我会更新你,但让我知道你的观点。
感谢和问候
罗希特河
自从你停止做广告,进入睡眠模式和起床。还可以将外围设备重新初始化到app_wakeup_cb()回调中。
如果我理解正确,案例1-2-3-5按照预期执行。但你的意思是:
1) 睡眠模式配置为10秒
2) 在user_app_init()函数中仅调用I2C init函数
您的意思是在设备唤醒后初始化I2C吗?
在案例5:
4)但是当使用BLE扫描仪应用程序尝试连接到设备时,它连接但在一段时间后(10SEC大约)设备断开连接
将断点添加到user_app_on_connection()中,然后尝试执行代码?你有任何断言还是代码粘在任何地方?连接后的代码行为是多少?可能你应该取消“期间计时器”,但我不确定,因为我无法在我身边复制它。
谢谢,下午好
嗨PM_Dialog,
如果我理解正确,案例1-2-3-5按照预期执行。-“不,在案例1-2-3-4中,代码没有按预期执行,它只会被唤醒两次,之后,没有广告,代码也不会被任何地方卡住。只有情况5正在执行并能够读取传感器数据,因为我已禁用睡眠模式“
1)配置为10sec的睡眠模式 -“意思是你建议配置5秒,我已经配置了10秒”
2)在user_app_init()函数中只调用I2C_init函数意味着,除了i2c_init(),我已经注释了所有其他函数timer和flash read“
4)但是当使用BLE扫描仪应用程序尝试连接到设备时,它连接但在一段时间后(10SEC大约)设备断开连接
在用户\u app\u on\u connection()中添加断点,然后尝试单步执行代码?您是否得到任何断言,或者代码是否在任何地方卡住了?连接后的代码行为是什么?也许你应该取消“周期计时器”,但我不确定,因为我无法在我的身边复制它-“我确实在user_app_connection()函数中介入,没有断言警告,否,代码不粘在任何地方。App_easy_timer取消功能已存在于连接功能中”
感谢和问候
罗希特河
嗨PM_Dialog,
有什么进展吗?
感谢和问候
罗希特河
嗨,罗希特,
我对您的代码中发生的事情感到非常困惑,因为它是自定义项目/板,我无法复制您的任何问题。
在案例5中,您提到禁用睡眠模式。你的意思是周期性的广告吗?
您是否启用了WDOG或禁用?在案例1-4中,代码行为是什么?您是否尝试添加断点并执行代码?
谢谢,下午好
嗨PM_Dialog,
“我对您的代码中发生的事情感到非常困惑,因为它是自定义项目/板,我无法复制您的任何问题。”-是的,我同意这是一个自定义项目,但没有实现任何新的东西,我们正在使用基于I2C的传感器和定时器,这是必需的,闪存以存储除了没有包含的数据之外的数据。我不明白为什么在睡眠模式下,I2C数据不读,即使在根据您的建议初始化之后。我对什么是错误的,并且我将BKT保存到User_PeripherAlAn.c文件中的每个函数,代码没有停止任何断言警告或任何错误消息。
“在案例5中,您提到您禁用了睡眠模式。你是说定期广告吗?”-是的,完全禁用睡眠模式,user_config.h SLEEP_OFF启用并删除app_easy_timer周期唤醒。
“你启用了还是禁用了WDOG ?”在案例1-4中,代码行为是什么?您是否尝试添加断点并逐步执行代码?”-是的,WDOG是启用的,除了user_提到的文件,我没有修改任何SDK文件。
您是否启用了任何I2C,与睡眠功能实现的项目,如果是,那么请与我一起,我会将这个例子与我的检查有什么问题?
感谢和问候
罗希特河
嗨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 ();
#如果((外部唤醒)&&(!BLE_APP_PRESENT))//外部唤醒,仅在外部处理器设计中
//禁用外部唤醒中断
ext_wakeup_disable ();
# endif
//恢复ARM休眠模式
//重置SCR[2]=SLEEPDEEP位,否则模式=空闲WFI将导致深度睡眠
//而不是处理器停止
渣打银行——>可控硅& = ~ (1 < < 2);
}
你能解释一下哪里出了问题吗?
感谢和问候
罗希特河
页