⚠️
大家好. .谢谢你来参加论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,并包含在Dialog主网站中。所有的帖子和账户都已迁移。我们现在只接受新论坛的流量-请张贴任何新的线程//www.xmece.com/support.我们将在未来几天修复漏洞/优化搜索和标签。
71个职位/ 0个新职位
最后发表
Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
休眠模式配置

你好,

我一直在使用DA14583 MCU。现在我的定制板已经准备好了PIR传感器Azoteq(IQS621) MCU。

我的所有功能都工作得很好,与DA14583接口的Azoteq传感器没有任何问题。

现在,我需要做一个睡眠模式配置,我的自定义设备持续2年的电池寿命。

我正在使用2个AAA电池为设备供电。

我不能配置中断的睡眠模式,因为Azoteq传感器每10ms中断Dialog MCU进行I2C通信。

所以,谁能帮助我如何将Dialog MCU配置为最大时间的睡眠模式配置,只要有来自Azoteq传感器的数据,它就应该唤醒。

与此同时,我正在与Azoteq MCU检查如何减少当前的消耗,如果你帮助Dialog MCU部分进行睡眠模式配置,这将非常有帮助。

感谢和问候

罗希特R

设备:
MHv_Dialog
离线
最后看到:1个月6天前
工作人员"title=
加入:15 2013-12-06
嗨罗希特,

嗨罗希特,

对不起,从你的问题中不清楚你是否想要从传感器的外部中断上唤醒。

您可以启用睡眠模式,并指定一个或多个gpio来生成唤醒(有关唤醒计数器的详细信息,请参阅SW参考手册)。接近报告器项目利用了这种唤醒机制。

如果你不想在传感器中断时被唤醒,你只需要启用延长睡眠,并设置一个定时器来唤醒设备以查询来自传感器的数据,从而决定是保持清醒还是回到睡眠状态。

/ MHv

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨MHv,

嗨MHv,

我不想用GPIO中断唤醒设备。由于传感器中断是每10毫秒,所以我不能用它来唤醒设备,因为它和设备不睡眠状态一样好。我在硬件端没有任何按钮。

“如果你不想在传感器中断时被唤醒,你只需要启用延长睡眠,并设置定时器唤醒设备以查询传感器的数据,从而决定是保持清醒还是重新进入睡眠状态。”

-根据你的评论,以下是我的理解,如果我错了请指正。

1.我必须使用定时器0或定时器1,其中我必须在设备进入睡眠时启动定时器,并在计时器的中断处理程序中唤醒它。[调用处理程序的时间周期留给我作为每个应用程序]

但是,根据以上的了解,我没有什么疑问,我想知道您的建议

1.在当前的固件中,我已经配置定时器0为200ms来执行应用程序的其他任务。那么我是否应该按照你的建议使用相同的时间来实现唤醒算法或任何其他方式,以便我可以实现2年的电池寿命?

感谢和问候

罗希特R

MHv_Dialog
离线
最后看到:1个月6天前
工作人员"title=
加入:15 2013-12-06
嗨罗希特,

嗨罗希特,

推荐的方法是利用应用程序计时器(app_easy_timer)。让我们假设您希望每秒钟唤醒并查询传感器。这可以通过设置定时器来实现,如下所示:

cb_my_timeout app_easy_timer (100);

第一个参数指定在100 * 10ms = 1000ms = 1s后超时的计时器。此时调用回调cb_my_timerout()。在这个回调函数中,您将实现数据轮询并再次设置计时器。查看软件参考手册,了解app_easy_timer的详细信息(提示:它很容易使用;o)

你有非常大的电池,所以我预计你可以很容易地达到2年的电池寿命。

/ MHv

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨MHv,

嗨MHv,

谢谢您的反馈,

我将执行相同的操作,然后回复您。

谢谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
感谢MHv_Dialog

感谢MHv_Dialog的建议!

嗨Rajapurerohit,

很抱歉在这个论坛里插话。如果您需要进一步的支持,请告诉我们。

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

我正在努力,我的执行还没有完成。

因为我同时也在做其他的工作。所以我没有回答。

一旦我完成执行,我就会给你答复。

谢谢您的理解

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨Rajapurerohit,

嗨Rajapurerohit,

是的,请让我们知道当你继续实施

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

我已经开始使用app_easy_timer()实现睡眠模式,并在前面建议的回调中唤醒。

但我并不怀疑,

案例1:

1)我已经在user_config.h中将设备配置为ARCH_EXT_SLEEP_ON

2)然后使用5sec定时器作为计数,5sec时间过去后调用app_easy_timer()启动[2sec]然后使用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)然后我在user_config.h中保留ARCH_SLEEP_OFF

2)步骤与案例1相同。但这一次,在5秒计时器过去后,执行arch_set_extended_sleep()函数,设备停止发布

3)但是回调cb_my_timeout()函数没有执行,所以我不能看到设备正常唤醒和发布。

不明白是什么问题,你能帮助我做错了什么。

如果你能引导我进入睡眠模式,对我很有帮助。

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨Rajapurerohit,

嗨Rajapurerohit,

你能检查一下SDK5.0.4的ble_app_sleepmode示例吗?它位于projects\target_apps\ble_examples\ble_app_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

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

谢谢你的回复,

我看过ble_sleep的例子,但对我来说没有用。因为我没有使用任何外部GPIO来唤醒设备,因为在这个产品的设计中没有使用GPIO引脚。

在ble_sleep的例子中,他们使用GPIO而不是周期性地唤醒设备。在我的系统中,我需要周期性的睡眠和唤醒逻辑。

所以请帮助我定期起床和睡眠。

我的设备是,它的功能如下,请找到设备的功能,并帮助我如何实现该设备的电池寿命为2年。

1)采用IQS621 I2C基代理传感器与我们的对话DA14583单片机接口

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单片机,使用SDK 5.0.4开发的设备。所有功能都已经过验证,只有在开发过程中,该设备的电源管理才可以进行最终部署。所以现在我专注于睡眠模式。

我会查阅DA14531设备相关文档,了解你分享的目的。

但我需要帮助的是SDK 5和DA14583设备的相关开发。

使用ble_app_sleepmode示例,我将尝试实现睡眠模式和管理设备睡眠,唤醒算法。如果有任何更新,我会尽快回复你。

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨罗希特,

嗨罗希特,

请找到附件中的diff文件,用于在SDK的ble_app_sleep模式示例中实现周期性唤醒和睡眠。为了从永久睡眠模式中唤醒,需要使用BLE定时器。在这个演示中,系统播放广告5秒,然后停止广告并进入睡眠模式。它将在5秒后醒来,并将重新开始广告。请记住,在广告和连接间隔之间,设备会进入睡眠模式。此外,当处于睡眠模式时,所有外围域都将关闭。这个简单的演示展示了如何使用app_easy_timer() API来唤醒和睡眠。你可以根据你的项目要求来调整它。

谢谢,PM_Dialog

附件:
Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

感谢您更新示例。

我正在浏览示例文件,但我不明白哪行代码被注释,哪行代码被使用。

diff文件不支持,所以我在notepad++上打开了它,但有些行让人难以理解。

右方括号和左方括号让人混淆,不明白@@代表什么,有些行显示+,有些行前面是-。

例如,

-static void app_button_press_cb(void)
+ * /
+静态void app_wakeup_cb(void)//哪个是左括号,哪个是右括号,哪个部分要排除

- if (GetBits16(SYS_STAT_REG, PER_IS_DOWN))
+ periodic_wake_up_timer_used = EASY_TIMER_INVALID_TIMER;
+
+
+ if (GetBits16(SYS_STAT_REG, PER_IS_DOWN))

periph_init ();

@@静态无效app_button_press_cb(无效)
arch_ble_ext_wakeup_off ();
app_easy_wakeup ();

- - - - - -}
-
- / * *
- ****************************************************************************************
- * @brief应用程序唤醒回调函数。在API消息实用程序中注册。
- * @返回void
- ****************************************************************************************
- * /
-static void app_wakeup_cb(void)
——{
+
//如果state不是idle,则忽略该消息
if (ke_state_get(TASK_APP) == APP_CONNECTABLE)
——{
+ {
user_app_adv_start ();

抱歉,如果可能的话,你能不能以不同的格式分享文件,这样可以很容易地打开,并了解哪行代码被使用,哪行没有被使用,然后它真的会帮助我进一步理解和发展。

根据我对你分享的diff文件的理解。我已经尝试在我的项目文件用户外设.c和.h中实现相同的功能。请找到相同的txt文件。但这款设备正在做广告,无法看到它正在沉睡5秒,然后在5秒后醒来。为了检查这一点,我使用了ble_scanner移动应用程序。如果我在配置中做错了什么,请告诉我。

谢谢您的理解

感谢和问候

罗希特R

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

请尽早让我知道你的反馈。

这对我来说很紧急。

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨Rajapurerohit,

嗨Rajapurerohit,

很抱歉耽搁了。请在附件中找到您应该在SDK的ble_app_sleepmode示例中进行的修改。请尝试SDK提供的干净的ble_app_sleepmode示例中的建议步骤。

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨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 ();

但是一旦设备进入睡眠模式就无法再唤醒。不明白为什么?

我已经按照你在文件中提到的步骤做了。

请让我知道我在第二步做错了什么。

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨罗希特,

嗨罗希特,

在哪个项目中你遵循了建议的步骤?你能在调试模式下运行它并在app_wakeup_cb()中添加一个断点吗?

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨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);

if ((DEVELOPMENT_DEBUG) && (USE_POWER_OPTIMIZATIONS))

slp_period_retain = slp_period;
//如果该断言命中,则LP ISR持续的时间长于该时间
//通过LP_ISR_TIME_XTAL32_CYCLES和LP_ISR_TIME_USEC保留。
If (sleep_lp_cycles && (sleep_lp_cycles < slp_period))
ASSERT_WARNING (0);-->在这一行代码在一段时间后停止了rwble.c文件

请尽快让我知道你的反馈

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨罗希特,

嗨罗希特,

最可能的原因是LP_Hanlder执行时间太长。这种警告意味着BLE核心唤醒的时间比计算值要长。sleep_lp_cycles是BLE核心进入睡眠之前的编程睡眠量。slp_period是当设备最终被唤醒时测量的实际睡眠时间。如果实际的睡眠时间比计划的要长,那么你可能会错过一个BLE事件。

如果设备处于唤醒状态且中断被禁用,也会发生这种情况

因此,请检查是否在代码的任何部分手动禁用了中断。

由于这是一个自定义代码和自定义板,我不能复制或调试这一点。我的建议是使用SDK的ble_app_sleepmode示例以及我建议的步骤。你能复制这个吗?

此外,我假设您没有修改任何SDK文件。

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

1)”如果设备处于唤醒状态,并且中断被禁用,但“-我不明白这一点

2)”因此,请检查是否在代码的任何部分手动禁用了中断。-不,没有禁用任何部分

3)”由于这是一个自定义代码和自定义板,我不能复制或调试这一点。我的建议是使用SDK的ble_app_sleepmode示例以及我建议的步骤。你能复制这个吗?-好吧,为了测试app_easy_timer,我可以测试ble_sleep的例子,但我的最终项目是基于ble_peripheral的,现在我不能将整个项目转移到ble_sleep的例子,现在是生产阶段。所以这对我来说不可能。

-此外,如果需要,我可以与你分享我的项目文件,让我知道你的反馈。

4)”此外,我假设您没有修改任何SDK文件。-不,我没有修改任何SDK文件。

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨罗希特,

嗨罗希特,

是的,如果可能的话,请分享你的项目。

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

请找到该项目,但请确保该项目应该是私有的。

你和我都能进入,拜托。

链接-https://drive.google.com/file/d/1J3VK3sf2iF9O180pDlde-w79oyPc9xcJ/view?u..。

我无法上传一个完整的项目,所以上传到驱动器上。让我知道它是否可以访问您。

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨罗希特,

嗨罗希特,

我已经请求访问了。

谢谢,PM_DIalog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

你现在能查一下吗?

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨罗希特,

嗨罗希特,

我已经下载了它,并在我的电脑上保存了它。我会检查一下代码,然后告诉你,

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

有什么最新消息吗?

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨罗希特,

嗨罗希特,

很抱歉我回复晚了。我们已经从论坛下线,我们已经要求我们的专家直接与您联系。

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

是的,我收到了经销商的邮件,他们发送了相同的文件diff文件,相同的步骤,你已经建议。我不能重复已经做过的事情。所以希望你能尽快帮助我,这是我迫切需要解决的问题。

谢谢你的理解。我期待在这个问题上得到一个积极的回应。

问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨罗希特,

嗨罗希特,

请按照下面的步骤开始在自定义代码和板中调试它。由于这是一个自定义代码,许多事情可能是根本原因,但我无法调试它,因为它是基于一个自定义板。

  1. 为0级(-O0)优化级别构建项目。(target ->C/ c++ -> Level 0的选项
  2. 在user_app_adv_undirect_complete()回调函数的下面一行中添加断点(BKTP)。
periodic_wake_up_timer_used = app_easy_timer(APP_PERIODIC_WAKE_UP_TO, app_wakeup_cb);
  1. 5秒app_easy_timer到期后,BKPT必须命中。
  2. 在app_easy_timer()中,Step Over (F10),当您到达create_timer(timer_id, delay)的调用时,Step Over (F11)代码并进入源代码。
  3. 如果您到达了这一点,向app_wakeup_cb()中添加一个BKPT并运行代码。BKPT成功了吗?

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

谢谢你的反馈,

我跟在后面,

  1. 为0级(-O0)优化级别构建项目。(目标选项->C/ c++ -> Level 0——"成功构建代码"
  2. 在user_app_adv_undirect_complete()回调函数的下面一行中添加断点(BKTP)。——“在下面提到的行上设置断点”
periodic_wake_up_timer_used = app_easy_timer(APP_PERIODIC_WAKE_UP_TO, app_wakeup_cb);

3.在调试中运行代码——”在调试中成功运行了代码

4.5秒app_easy_timer到期后,BKPT必须命中。——“失败。BKPT没有打到线。”

从第一天开始就只有我被困住了。

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨,得益于他们,

嗨,得益于他们,

你能在user_app_adv_undirect_complete()回调函数的if (status == gap_err_cancelled)行中添加一个BKPT吗?它能击中吗?如果是,请按F10步进代码。哪一种行为?

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

保持BKPT在if (status == gap_err_cancelled)行——"失败了,BKPT也没有击中这里。”

我想这是因为,我开启了延长睡眠模式

const static sleep_state_t app_default_sleep_mode = ARCH_EXT_SLEEP_ON在user_config.h文件中

如果我删除这个,那么user_app_adv_undirect_complete()函数正在执行,否则不执行。

这里的问题是什么?这是开启延长睡眠模式的强制步骤,对吗?但不明白不执行的原因。

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨罗希特,

嗨罗希特,

一旦发布停止或取消,就会触发user_app_adv_undirect_complete()回调函数。这意味着当触发adv_data_update_timer_cb()并停止广告时,出现了问题。你能在adv_data_update_timer_cb()中添加一个BKPT吗?此外,您是否启用或禁用了看门狗?如果在调试模式下运行代码而不添加任何BKPT,它会卡住吗?它是否会卡在前面评论中提到的断言中?

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

如果我在use_config.h文件中启用EXT_SLEEP,并在user_app_adv_start中的user_app_adv_start中调用arch_set_extended_sleep()函数,就像你建议的diff文件或演示文件。

然后user_app_adv_undirect_complete(), adv_data_update_timer_cb()和其他函数不执行。

是的,在一段时间后,使用上述睡眠配置,代码会卡在断言警告中,这在前面的评论中提到过。

关于看门狗,我没有改变任何与看门狗有关的东西。一直是 , /****************************************************************************************************************/
/*开启看门狗定时器。* /
/****************************************************************************************************************/
#定义CFG_WDOG

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨罗希特,

嗨罗希特,

我已经在SDK的ble_app_peripheral示例中使用我们的DA14580 Pro-DK测试了这个逻辑,我能够定期唤醒设备。我将与附件中的diff文件共享。请在SDK的ble_app_peripheral示例中进行相同的更改。我的建议是遵循一个干净的SDK安装中的更改,并且应该使用SDK提供的示例。

之所以会出现这个断点,是因为BLE_WAKEUP_LP_Handler()花费的时间比它应该花的时间长,所以您的代码会进入之前发布的断言中。当唤醒时,从BLE_WAKEUP_LP_Handler()调用perid_init()函数。因此,在使用peri_init()函数时,应用程序代码所花费的时间可能比预期的要长。此外,该断言命中时,LP ISR持续的时间比通过LP_ISR_TIME_XTAL32_CYCLES和LP_ISR_TIME_USEC保留的时间长。

我检查了你发给我的项目中的外围init()函数,我看到你已经放置了一段代码,大大延迟了系统。你应该删除I2C和Timer 0初始化,所有的SPI flash事务和“更新数据库”。

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

非常感谢你的回复,

我已经按照你分享的diff文件的步骤进行了操作,有几行代码与其他行代码重叠,但根据我的理解,我做了相同的更改测试。

如果可能的话,你可以像以前一样分享一个文件,这样我就不会错过代码的任何部分/行。

/**************************************************************************

" 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文件中,没有提到。你能告诉我是否需要吗?

“我检查了你发给我的项目中的外围init()函数,我看到你放置了一段代码,极大地延迟了系统。你应该删除I2C和Timer 0初始化,所有的SPI flash事务,以及“更新数据库”。”- - -如果我删除了这个,那么我应该在哪里初始化所有这些函数?因为这些对我的项目是必要的"

感谢和问候

罗希特R

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

我只在最后的代码中根据diff文件和我的理解做出了更改。

以下是步骤,

1)注释I2C和Timer 0初始化,所有SPI flash事务和“更新数据库”的所有初始化函数从外围init()函数。

2)根据我的理解,根据diff文件配置,在user_config.h文件和app_wakeup_cb()中启用EXT_SLEEP,修改user_app_adv_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在线- "if (arch_ble_ext_wakeup_get())"-“执行成功”

5)每5秒执行第3步和第4步

但是如果取消注释所有初始化函数(步骤2),然后再次回调不执行的代码(步骤3和步骤4),那么在哪里初始化这些函数?所有这些都是必要的。

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨罗希特,

嗨罗希特,

附件是你应该做的修改,请查收。您可以将该函数放在user_app_init()回调函数中。这里我们通常放置所有的初始化代码。

谢谢,PM_Dialog

附件:
Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨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。

接下来,我将使用这些集成测试最终代码,并进行端到端测试。

我将测试最终代码并相应地向您报告。

感谢和问候

罗希特R

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

我已经在最终代码中集成了所有步骤,并且能够执行之前共享的两个步骤[5秒唤醒]。

但我无法连接设备,无法读取I2C传感器数据。我也在调试。

同时,如果你能建议我什么可能是错误的,然后我也将调试。

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨罗希特,

嗨罗希特,

请在user_app_on_connection(0)回调函数中添加断点,并尝试步进代码。代码在连接时做什么?

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨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,定时器和flash,但我无法读取传感器数据。


感谢和问候

罗希特R

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

经过逐步调试,观察到以下几点:

1)我已经按照你的建议配置了我最终的代码

2)然后,首先注释所有的初始化形式的外围初始化()函数。

3)并且,根据您的建议在user_app_init()中初始化相同

4)在调试模式下运行代码,只执行两次睡眠步骤(我上周已经写了这些步骤给你,仍然没有回复),I2C不工作。没有从传感器获取值。

5)所以,再次,我从user_app_init()函数中删除了所有的初始化(I2C,定时器,flash读取所有函数删除),并且观察到睡眠步骤是按照您共享的文件执行的。

我的结论是,如果我们删除I2C和其他init函数,那么睡眠就可以工作,否则它就不会工作。

但我不明白在哪里和如何初始化函数呢?

我急需帮助,因为我错过了最后期限。

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨Rahu,

嗨Rahu,

请在调试模式下运行代码。你刚才提到没有执行。

我的问题是:既然你的代码没有被执行,它会做什么?

这是定制的设计,它基于定制板,所以我不能复制你的任何问题。请在调试模式下运行您的代码,并帮助我理解行为。

  • 在I2C初始化函数中添加BKPT:检查所有寄存器,确保正确地进行初始化。
  • 在其他I2C功能上做同样的事情吗
  • 逐步调试代码

每隔5秒,设备就会停止广告并进入永久睡眠模式。

当处于休眠模式时,所有外设域(包括I2C)都将断电。此外,在广告和连接间隔之间,系统将进入睡眠模式。因此,当没有任何I2C、闪存等活动时,预期睡眠模式是正确工作的。也许你应该在app_wakeup_cb()中重新初始化这些函数。但这是特定于应用程序的。

为了有I2C, SPI等活动,系统应该处于活动模式。

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

请查看测试的步骤,

例1)
1)休眠模式10秒
2) user_app_init()函数中只调用I2C init函数
3) I2C初始化步进和步过执行
4)传感器配置寄存器写步过和步进执行
5)执行两次唤醒回调功能
6)设备停止广告

例2)
1)休眠模式配置10秒
2) user_app_init()函数中只调用定时器init函数
3) timer_init()步进和步过执行
4)执行两次唤醒回调功能
5)设备停止广告

例3)
1)休眠模式10秒
2)在user_app_init()和唤醒回调函数中调用I2C init和timer函数
3) I2C初始化和定时器步进和步过执行
4)传感器配置寄存器写步过和步进执行
5)执行两次唤醒回调功能
6)设备停止广告

例4)
1)休眠模式10秒
2)在user_app_init()和唤醒回调函数中注释了所有I2C init,timer函数
3)执行两次以上唤醒回调功能
4)但当使用BLE扫描仪应用程序试图连接到设备时,它是连接的,但一段时间后(大约10秒)设备断开
5)然后该设备就不再做广告了(广告停止了)

例5)
1)关闭休眠模式配置
2)初始化user_app_init()函数中的I2C、定时器
3)设备广告,能够读取传感器数据
4)连接也稳定

让我知道什么可能是错误的和你的反馈对这一点。我正在进一步测试,如果有什么我会更新你,但让我知道你的看法。

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
既然你停止做广告

既然你停止做广告,进入睡眠模式,然后醒来。还可以将外围设备重新初始化到app_wakeup_cb()回调中。

如果我没理解错,案件1-2-3-5会按预期执行。但是你说下面的话是什么意思呢?

1)休眠模式10秒

2) user_app_init()函数中只调用I2C init函数

您的意思是在设备唤醒后初始化I2C ?

情形5:

4)但当使用BLE扫描仪应用程序试图连接到设备时,它是连接的,但一段时间后(大约10秒)设备断开

添加断点到user_app_on_connection()并尝试步进代码?您是否得到了任何断言,或者代码是否卡在了某个地方?连接后的代码行为是什么?也许你应该取消“period timer”,但我不确定,因为我无法在我身边复制它。

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨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扫描仪应用程序试图连接到设备时,它是连接的,但一段时间后(大约10秒)设备断开

添加断点到user_app_on_connection()并尝试步进代码?您是否得到了任何断言,或者代码是否卡在了某个地方?连接后的代码行为是什么?也许你应该取消“周期计时器”,但我不确定,因为我不能复制它在我的身边-“我在user_app_connection()函数中跳过,没有断言警告,不,代码不卡在任何地方。App_easy_timer取消函数已经出现在连接函数中"

感谢和问候

罗希特R

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

有什么最新消息吗?

感谢和问候

罗希特R

PM_Dialog
离线
最后看到:1天14小时前
工作人员"title=
加入:2018-02-08 11:03
嗨罗希特,

嗨罗希特,

我很困惑你的代码中发生了什么,因为它是自定义项目/板,我无法复制你的任何问题。

在案例5中,您提到禁用了睡眠模式。你是指定期的广告吗?

您是否启用或禁用了WDOG ?在案例1-4中,代码的行为是什么?您是否尝试添加断点和步进代码?

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

“我对你的代码中发生的事情感到非常困惑,因为这是自定义项目/板,我无法复制你的任何问题。”-是的,我同意这是一个自定义项目,但没有什么新的实现,我们使用的是基于I2C的传感器和定时器,这是必需的,闪存存储数据,除此之外,什么都没有合并。我不明白为什么在睡眠模式下I2C数据没有读取,即使在按照你的建议初始化它之后。我不知道哪里出了问题,我把BKT保留到user_peripheral.c文件中的每个函数,代码没有停止任何断言警告或任何错误消息。

“在案例5中,你提到你禁用了睡眠模式。你是指定期的广告吗?”-是,完全禁用睡眠模式,user_config.h SLEEP_OFF启用并删除app_easy_timer定时唤醒。

“您是否启用或禁用了WDOG ?”在案例1-4中,代码的行为是什么?你尝试过添加断点和步进代码吗?”-是的,WDOG是启用的,我没有修改任何SDK文件除了user_提到的文件。

你是否有任何I2C启用,BLE以及睡眠功能实现的项目,如果是,那么请和我一起,我会将这个例子与我的比较,并检查有什么问题?

感谢和问候

罗希特R

Rajapurerohit
离线
最后看到:1年2周前
加入:2017-04-20 09:17
嗨PM_Dialog,

嗨PM_Dialog,

我观察到了几点,你能帮忙吗?

1)在测试时,我强制暂停了代码,因为设备没有广告,也没有来自i2c传感器的数据,然后我将代码暂停到i2c_read_byte()函数的下面一行,

- " wait_while_i2c_fifo_is_full ();//如果Tx FIFO已满,请等待”-此行代码暂停,请检查我的代码,是什么问题。

2)接下来我在上面一行注释,将ADV_UPDATE时间减少到仅100ms,并将WAKEUP_TIME保持为5秒,然后我看到了一些I2C数据,但在广告上发送数据包,然后在广告数据上没有更新,所以我再次暂停代码,它暂停到下面函数的最后一行-“SCB->SCR &= ~(1<<2);”

静态内联void arch_resume_from_sleep

//挂起应用程序特定的任务
app_sleep_exit_proc ();

#if ((EXTERNAL_WAKEUP) && (!BLE_APP_PRESENT)) //外部唤醒,仅在外部处理器设计中
//禁用外部唤醒中断
ext_wakeup_disable ();
# endif

//恢复ARM Sleep模式
// reset SCR[2]=SLEEPDEEP位,否则mode=idle WFI将导致深度睡眠
//而不是处理器暂停
Scb -> scr &= ~(1<<2);

你能给我解释一下哪里出了问题吗?

感谢和问候

罗希特R

页面