大家好,
我一直在使用DA14583单片机。现在我的定制板已经准备好了PIR传感器Azoteq(IQS621)MCU。
我的Azoteq传感器与DA14583接口的所有功能都工作正常,没有任何问题。
现在,我需要做一个睡眠模式配置,我的定制设备可以长时间使用20年的电池寿命。
我使用2个AAA电池为设备供电。
我无法使用中断配置睡眠模式,因为Azoteq传感器中断对话框MCU每10ms用于I2C通信。
那么,有谁能帮助我在睡眠模式下配置Dialog MCU以获得最长时间,并在有来自Azoteq传感器的数据时将其唤醒。
与此同时,我用Azoteq MCU检查我如何降低当前消耗量,如果您有助于对话框MCU部分进行睡眠模式配置,它将真正有帮助。
感谢和问候
罗希特R
设备:

嗨,罗希特,
对不起,从您的问题中不清楚您是否希望或不希望从传感器的外部中断中醒来。
您可以启用睡眠模式并指定一个或多个GPIO以生成唤醒(有关唤醒计数器的详细信息,请参阅SW参考手册)。邻近报告器项目利用了这种唤醒机制。
如果您不想从传感器中断唤醒中断,则只需启用延长睡眠并设置计时器以唤醒设备即可从传感器查询数据,从而决定是否保持清醒或返回睡眠状态。
/ mhv.
嗨MHv,
我不想用gpio中断唤醒设备。由于传感器中断为每10ms,因此我无法使用它来唤醒设备,因为它与设备不仅仅是休眠状态。我没有硬件侧的任何按钮。
“如果您不想从传感器上中断唤醒,您只需启用扩展睡眠并设置一个定时器以唤醒设备即可从传感器查询数据,从而决定是否保持清醒或返回睡眠状态。“
- 根据您的评论,以下是我的理解,如果我错了,请纠正我。
1.我必须使用计时器0或计时器1,其中我必须在设备进入睡眠状态时启动计时器,并在计时器的中断处理程序中唤醒它。[根据应用程序调用处理程序的时间周期留给我]
但是,根据上述了解,我对此我想了解你的建议很少
1.在当前固件中,我已配置Timer 0才能执行200ms的其他任务。那么我应该同时使用根据您的建议或任何其他方式实现唤醒算法,以便我可以实现2年的电池寿命?
感谢和问候
罗希特R
嗨,罗希特,
向前推荐的方式是利用应用程序计时器(app_easy_timer)。让我们假设您想每秒唤醒并查询传感器。这可以通过设置定时器来实现这一点,如下所示:
app_easy_timer(100,cb_my_timeout);
第一个参数指定在100 * 10ms = 1000ms = 1s之后超时的定时器。此时将调用回调cb_my_timerout() get。在这个回调函数中,您将实现数据轮询并再次设置计时器。Se SW参考手册,了解app_easy_timer的详细信息(提示:它很容易使用;o)
你有非常大的电池,所以我希望你可以很容易地达到2年的电池寿命。
/ mhv.
嗨MHv,
谢谢你的反馈,
我会实施同样的方法,然后回复你。
感谢和问候
罗希特R
感谢MHv_Dialog提供您的建议!
嗨Rajapurerohit,
很抱歉在这个论坛里跳出来。如果你在这方面需要进一步的支持,请告诉我们。
谢谢,PM_DIALOG.
你好,下午对话,
我正在努力,我的实现尚未完成。
因为我同时也在做其他的工作。所以我没有回答。
一旦我完成了实施,我会给你回复的。
谢谢你的理解
罗希特R
嗨Rajapurerohit,
是的,请告诉我们当您继续执行时
谢谢,PM_DIALOG.
你好,下午对话,
我已经开始使用app_easy_timer()实现睡眠模式,并如前所述唤醒回电。
但我很少有疑惑,
案例1:
1)我已经在user_config.h中将设备配置为ARCH_EXT_SLEEP_ON
2)然后使用5SEC计时器作为计数,在5SEC时间被调用APP_EASY_TIMER()启动[2SEC]之后,然后使用ARCH_SET_EXTEDDE_SLEEP()函数启用休眠状态。
3) 然后,在app_easy_timer disabled sleep()的回调函数中,第一次尝试仅通过调用arch_disable_sleep()来唤醒,但没有成功,因此下一次尝试下面的函数
拱_禁用_睡眠();
如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
{
periph_init();
}
if(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_off.h
2)与病例1相同的步骤1.但是此时间在5SEC定时器经过的arch_set_extended_sleep()函数和设备停止广告
3)但回调CB_MY_TIMEOUT()函数未执行,所以我无法看到设备唤醒并正常宣传。
不明白是什么问题,请你帮忙我做错了什么。
如果你能指导我开发睡眠模式,那将对我很有帮助。
感谢和问候
罗希特R
嗨Rajapurerohit,
请检查SDK5.0.4的ble_应用程序_睡眠模式示例,好吗?它位于projects\target\u apps\ble\u examples\ble\u app\u sleepmode SDK路径下。在本例中,app_easy_timer()用于停止广告并将系统置于睡眠模式。然后,您可以通过GPIO中断唤醒芯片。
如果您正在开始一个新的设计或项目,我们建议从我们最新的名为DA14531的Smartbond设备开始。SDK得到了很大的改进,我们有很多代码示例和改进的文档,还有软件路线图支持。DA14580产品族和SDK5没有任何软件路线图支持。
请查看DA14531产品页面:
//www.wsdof.com/雷电竞官网登录products/connectivity/bluetooth-low-energy/products/da14531
DA14531应雷竞技安卓下载用程序:
- 连接的消费者:信标,智能标签,遥控器,近距离标签,连接手表,触控笔,鼠标,玩具,低功耗传感器,蓝牙LE在“BLE PIPE”上添加到现有应用程序雷竞技安卓下载
- 连接的健康:连接的注射器,吸入器,葡萄糖显示器,智能贴片,血压计,温度计
- 汽车:轮胎压力,监控系统和低功耗无线传感器
DA14531的大益处是超低成本和功率!
谢谢,PM_DIALOG.
你好,下午对话,
谢谢你的回应,
我看到ble_sleep的例子,但这对我没有用处。因为我没有使用任何外部的GPIO来唤醒设备,因为在这个产品的设计中没有使用GPIO引脚。
在ble_sleep的例子中,他们使用GPIO唤醒设备,而不是周期性的。在我的系统里,我需要周期性的睡眠和清醒的逻辑。
所以请帮助我们定期起床和睡觉。
我的设备正在运行,其功能如下,请查找设备的功能,并帮助我如何使该设备的电池寿命达到2年。
1)使用IQS621 I2C底座的代理传感器接口与DA14583单片机对话
2)这里,我在“RDY”引脚上读取数据。IQS621传感器的此Rdy引脚每10ms的中断可读取数据[类似触摸,代理和als]。基本上这个RDY引脚10MS中断窗口用于读取传感器I2C数据。[此RDY中断我无法使用睡眠中的设备从睡眠中打断时,每10ms窗口中断]
3)接下来,如果可用的触摸数据我将操作命令发送给其他设备,如果检测到任何人时刻[即,代理]然后我再次向其他设备发送操作命令。
4)在这里,当读取PIR数据[人时刻],我检查一些阈值的ALS数据,如果两者都是正的,然后只向设备发送操作命令。如果一个人不在场,那么就不要发出命令。
5)上述功能是有效的,并且得到了验证。设备正常工作。
6)现在,为了设备长寿命,我的下一步是睡眠mod配置。
因此,我想开发一个没有任何GPIO中断的睡眠模式配置。我的最终目标是“检查是否有任何数据从I2C基础传感器几秒钟(例如2到5秒),然后如果没有数据,进入睡眠模式,并在一段时间后醒来,再次检查数据。如果有数据持续保持清醒不要去睡觉。这个重复动作应该发生"
不,我不是在开始一个新项目。
它是一个已经开发的设备,使用SDK5.0.4和DA14583 MCU。所有功能都经过验证,并且电路板已准备好进行最终部署。只有在开发中,此设备的电源管理才可用。所以现在我把重点放在睡眠模式上。
我将检查DA14531的设备相关文档以了解您共享的目的。
但我需要的帮助是SDK 5和DA14583设备相关的开发。
使用BLE_APP_SLEEPMODE示例我将尝试实现睡眠模式并管理设备睡眠,唤醒算法。如果有任何更新,我会尽早回复您。
感谢和问候
罗希特R
嗨,罗希特,
请查找附加的差异文件,用于实现定期唤醒并睡眠在SDK的BLE_APP_SLEEP模式示例中。为了从永久睡眠模式唤醒,使用BLE定时器。在这个演示中,系统是为5秒的广告,然后停止广告并进入睡眠模式。它将在5秒后醒来,它将重新启动广告。牢记而不是设备进入广告和连接间隔之间的睡眠模式。此外,何时在睡眠模式下,所有外围域都会断电。这个简单的演示展示了如何使用app_easy_timer()API唤醒和睡眠。您根据您的项目要求调整它。
谢谢,PM_DIALOG.
你好,下午对话,
感谢您使用该示例的更新。
我正在通过示例文件,但我不理解哪行代码是注释和使用。
diff文件不支持,所以我在notepad++上打开了它,但有些行令人困惑,难以理解。
右括号和左括号混淆了,不理解@@代表什么,有些行前面显示+,有些行前面显示-。
例如,
-静态无效应用按钮按下cb(无效)
+*/
+静态void app_wakeup_cb(void)//开放支架,其是关闭支架,哪个部分排除在外
{
- if (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消息实用程序。
- * @return void
- ****************************************************************************************
- * /
-static void app_wakeup_cb(void)
——{
+
//如果状态不空闲,请忽略该消息
if(ke_state_get(TASK_APP)=APP_CONNECTABLE)
- {
+ {
用户_应用_adv_start();
}
}
很抱歉,如果可能的话,请您以不同的格式共享该文件,该文件可以轻松打开,并了解使用了哪行代码,哪些未使用,这将真正帮助我进一步理解和开发。
根据我对您共享的diff文件的理解。我已经尝试在我的项目文件user peripheral.c和.h中实现同样的功能。请找到相同的txt文件。但该设备正在做广告,无法看到它正在睡眠5秒,然后醒来。为了检查这一点,我使用了BLE_Scaneer移动应用程序。如果我在配置中做错了什么,请告诉我。
谢谢你的理解
感谢和问候
罗希特R
你好,下午对话,
请尽早告诉我您的反馈意见。
这件事对我来说很紧急。
感谢和问候
罗希特R
嗨Rajapurerohit,
为延迟道歉。请在SDK的BLE_APP_SLEEPMODE示例中找到附加的修改。请尝试SDK提供的清洁BLE_APP_SLEEPMODE示例中的建议步骤。
谢谢,PM_DIALOG.
你好,下午对话,
谢谢你的更新文件。
现在我可以打开文件了,我已经按照文件中提到的步骤进行了操作。
在下面的步骤2中,我使用了arch_set_extended_sleep()函数而不是arch_set_deep_sleep()函数
并且在user_config.h文件中启用了ARCH_EXT_SLEEP_ON
/*步骤2:修改用户\u app\u adv\u start()*/
void user_app_adv_start(void)
{
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_数据_更新();
app_add_ad_struct(cmd,&mnf_data,sizeof(struct mnf_specific_data_ad_structure));
//在广告期间设置深睡眠
足弓设置深睡眠();/ /函数arch_set_extended_sleep ();
app_easy_gap_undircated_advertise_start();
}
但一旦设备进入睡眠模式,就无法再醒来。不理解为什么?
我遵循了文件中提到的相同的步骤。
请让我知道在第2步中我做错了什么。
感谢和问候
罗希特R
嗨,罗希特,
您在哪个项目中遵循了建议的步骤?你能在调试模式下运行它并在app_wakeup_cb()中添加一个断点吗?
谢谢,PM_DIALOG.
你好,下午对话,
我的项目基于BLE_PERITELAL示例。
我只在调试模式下运行,我保留了断点,但程序没有执行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))assert_warning(0);- >在这一行,代码在一段时间后停止运行rwble.c文件
{
slp_期_保留=slp_期;
//如果此断言命中,则LP ISR的持续时间将长于此时间
//通过LP_ISR_TIME_XTAL32_CYCLES和LP_ISR_TIME_USEC保留。
if(睡眠周期&(睡眠周期
}
请尽快让我知道你的反馈
感谢和问候
罗希特R
嗨,罗希特,
此断言的最可能原因是因为LP_Hanlder需要太多时间来执行。这种警告意味着,已经采取了更多的时间核心唤醒比计算值。睡眠_LP_CYCLES是在BLE核心睡觉之前编程的睡眠量。SLP_PERIOD是最终唤醒时测量的实际睡眠。要这样做,如果实际睡眠大于编程,那么可能会错过一个BLE事件。
如果设备处于唤醒状态且中断被禁用,但
因此,请检查您是否手动禁用代码任何部分中的中断。
因为它是一个自定义代码和自定义板,所以我无法复制或调试它。我的建议是使用SDK的ble_app_sleepmode示例和我建议的步骤。你能复制这个吗?
此外,我假设您没有修改任何SDK文件。
谢谢,PM_DIALOG.
你好,下午对话,
1)”这也可以发生,如果设备是清醒的,中断被禁用,但“-我没有得到这一点
2) “因此,请检查您是否手动禁用代码任何部分中的中断。”-不,没有禁用任何部件
3)”因为它是一个自定义代码和自定义板,所以我无法复制或调试它。我的建议是使用SDK的ble_app_sleepmode示例和我建议的步骤。你能复制这个吗?-好的,为了测试app_easy_timer,我可以测试ble_sleep示例,但我的最终项目是基于ble_peripheral,现在我不能将整个项目转移到ble_sleep示例,它现在是生产阶段。所以对我来说是不可能的。
-此外,如果需要,我可以与你分享我的项目文件,让我知道你的反馈。
4)”此外,我假定您没有修改任何SDK文件。-不,我没有修改任何SDK文件。
感谢和问候
罗希特R
嗨,罗希特,
是的,如果有可能请分享您的项目。
谢谢,PM_DIALOG.
你好,下午对话,
请找到该项目,但请确保该项目应该是私密的。
你和我都应该可以拿到。
关联 -https://drive.google.com/file/d/1J3VK3sf2iF9O180pDlde-w79oyPc9xcJ/view?u..。
我无法上传一个完整的项目,以便在驱动器上上传。让我知道它是否可以访问您。
感谢和问候
罗希特R
嗨,罗希特,
我请求进入。
谢谢,下午好
你好,下午对话,
你现在能检查一下吗?
嗨,罗希特,
我已经下载了它,我把它当地到我的电脑。我会经过代码,让你知道,
谢谢,PM_DIALOG.
你好,下午对话,
有我的最新消息吗?
感谢和问候
罗希特R
嗨,罗希特,
很抱歉回复晚了。我们已经把这个从论坛离线,我们已经要求我们的信徒直接联系你。
谢谢,PM_DIALOG.
你好,下午对话,
是的,我收到了分销商的邮件,他们发送了相同的文件diff文件,和你之前建议的步骤一样。我不能重复已经做过的事情。所以恳请您尽快帮助我,我急需解决这个问题。
谢谢你的理解。我期待着在这个问题上得到积极的回应。
问候
罗希特R
嗨,罗希特,
请按照以下步骤开始调试您的自定义代码和电路板。自定义代码以来,许多事情可能是根本原因,但由于它基于自定义板,我无法调试它。
谢谢,PM_DIALOG.
你好,下午对话,
谢谢你的反馈,
在这里,我跟着,
3.在调试中运行代码--“在调试中运行代码成功"
4. 5SEC APP_EASY_TIMER呼出后,BKPT必须击中。- “失败。BKPT没有击中线路“
从这里的第一天起,我就被困在这里。
感谢和问候
罗希特R
嗨,罗菲特,
你可以在user_app_adv_undirect_complete()回调函数的if (status == GAP_ERR_CANCELED)行中添加一个BKPT吗?它打击吗?如果是,请按F10进入代码。行为是什么?
谢谢,PM_DIALOG.
你好,下午对话,
保持BKPT在if(状态==间隙错误取消)行--“失败了,BKPT也没打到这里。”
我想这是因为,我启用了延长睡眠模式
const static sleep_state_t app_default_sleep_mode = arch_ext_sleep_on;在user_config.h文件中
如果我删除这个函数,那么user\u app\u adv\u undirect\u complete()函数正在执行,否则不会执行。
这里的问题是什么?启用延长睡眠模式是强制性步骤,对吗?但不了解不执行的原因。
感谢和问候
罗希特R
嗨,罗希特,
一旦广告停止或取消,就会触发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()和其他功能不执行。
是的,在某些时间代码被困在断言警告中,在睡眠配置之后,在早期的评论中提到的。
关于看门狗,我没有改变与看门狗相关的任何东西。保存,因为,/ **************************************************************************************************************** /
/*开启看门狗定时器。*/
/****************************************************************************************************************/
#定义CFG_WDOG
感谢和问候
罗希特R
嗨,罗希特,
我已经使用DA14580 Pro-DK在SDK的BLE_APP_PERIENTAL示例中测试了此逻辑,我可以定期唤醒设备。我将与附加的差异文件共享。请在SDK的BLE_APP_PHERIALLAL示例中执行相同的更改。我的建议是按照SDK提供的SDK安装中的更改,并使用SDK提供。
此断点击中,因为BLE_WAKEUP_LP_HANDLER()需要更长的时间,因此您的代码进入您之前发布的断言。唤醒时从BLE_WAKEUP_LP_HANDLER()中调用PERIPH_INIT()函数。因此,也许进入Periph_init()函数,您的应用程序代码需要更长时间。此外,此断言命中率为LP ISR持续时间长于通过LP_ISR_TIME_TITE_XTAL32_CYCLES和LP_ISR_TIME_USEC保留的时间。
我检查了您发送给我的项目中的periph_init()函数,我看到您放置的一段代码大大延迟了系统。您应该删除I2C和定时器0初始化、所有SPI闪存事务和“更新数据库”。
谢谢,PM_DIALOG.
你好,下午对话,
非常感谢您的回复,
我遵循了你的差异文件的步骤,并且很少的行与其他代码线重叠,但根据我的理解,我使更改测试相同。
如果可能的话,请您共享一个文件,就像以前共享的那样,以便我不应该错过任何部分/行代码。
/**************************************************************************
“定期唤醒计时器使用=简易计时器无效计时器;
如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
{
periph_init();
}"
********************************************************************************* /
-上面提到的部分代码出现在以前的共享文件app_wakeup_cb()函数中,但在当前的ble_peripheral_diff文件中没有提到。你能告诉我是否需要吗?
“我检查了您发送给我的项目中的peripher_init()函数,我看到您放置了一段代码,严重地延迟了系统。您应该删除I2C和Timer 0初始化、所有SPI flash事务和“更新数据库”。”- - -如果我删除此,我应该在哪里初始化所有这些函数?因为这些是我的项目所必需的“
感谢和问候
罗希特R
你好,下午对话,
我已经根据diff文件和我在我的最终代码中的理解做出了更改。
以下是步骤,
1)注释I2C和Timer 0初始化,所有SPI flash事务和“update database”所有初始化函数都来自于外围init()函数。
2) 据我所知,已根据diff文件进行配置,已在用户配置文件和应用唤醒cb()中启用EXT_SLEEP,已修改用户应用adv_Undirective_complete()和用户应用adv_start()函数。
3)保持在行中的bkpt - “句号_wake_up_timer_used = app_easy_timer(app_periodic_wake_up_to,app_wakeup_cb);”-“成功执行”
4) 保持BKPT在线—“如果(搜索引擎外部唤醒获取())”-“成功执行”
5)每5秒执行步骤3和步骤4
但如果取消注释所有初始化函数(步骤2)然后再次调用码不执行(步骤3和步骤4)。然后在哪里初始化这些功能?并且一切都是必要的。
感谢和问候
罗希特R
嗨,罗希特,
附件是你需要做的修改,请查收。你可以在user_app_init()回调函数中调用这个函数。我们通常在这里放置所有初始化代码。
谢谢,PM_DIALOG.
你好,下午对话,
我已经将文件与我的文件进行了比较,两者都是一样的。我已根据您的建议步骤配置相同。
执行,
1)在线保持bkpt - “serialic_wake_up_timer_used = app_easy_timer(app_periodic_wake_up_to,app_wakeup_cb);”-“成功执行”
2) 保持BKPT在线—“如果(搜索引擎外部唤醒获取())”-“成功执行”
并初始化user_app_init()回调函数中的所有i2c、timer和flash。代码现在正在执行第1步和第2步。
接下来,我将使用这些集成测试最终代码,并进行端到端测试。
我将测试最终代码并相应地报告您。
感谢和问候
罗希特R
你好,下午对话,
我已经在最终代码中集成了所有步骤,并且能够执行之前共享的两个步骤[5秒唤醒]。
但我无法连接设备并无法读取I2C传感器数据。我正在调试同样的调试。
同时,如果你能告诉我哪里出了问题,我也会进行调试。
感谢和问候
罗希特R
嗨,罗希特,
请在User_App_On_Connection中添加断点(0个回调函数并尝试缩短代码。代码在连接时做了什么?
谢谢,PM_DIALOG.
你好,下午对话,
下面两行代码只执行了两次,
执行,
1)在线保持bkpt - “serialic_wake_up_timer_used = app_easy_timer(app_periodic_wake_up_to,app_wakeup_cb);”-“成功执行x2”
2) 保持BKPT在线—“如果(搜索引擎外部唤醒获取())”-“成功执行x2”
后期代码未执行,设备未播发
当您建议我初始化I2C,Timer和Flash中的初始化I2C,Timer和Flash,但我无法读取传感器数据。
感谢和问候
罗希特R
你好,下午对话,
在步骤调试后,观察到以下几点,
1)我根据您的建议配置了我的最终代码
2)然后,首先对Periph_Init()函数的所有初始化表单进行了评论。
3) 并且,根据您的建议,在user_app_init()中初始化相同的
4) 在调试模式下运行代码,只需执行两次睡眠步骤(我上周向您编写了这些步骤,但仍然没有回复),I2C不工作。无法从传感器获取值。
5)所以,再次,我删除了所有初始化user_app_init()函数也(I2C,定时器,flash读取所有函数删除),它是观察到睡眠步骤正在执行的每个文件由您共享。
从我的结论是如果我们删除I2C和其他init函数,那么睡眠工作否则它将无法正常工作。
但是我不明白在哪里以及如何初始化函数?
我急需帮助,因为我错过了最后期限。
感谢和问候
罗希特R
嗨Rahu,
请在调试模式下运行代码。你说过不会被执行。
我的问题是:你的代码在没有执行的情况下做了什么?
这是自定义设计,它基于自定义板,所以我不能复制任何你的问题。请在调试模式下运行您的代码,并帮助我理解行为。
每5秒钟设备,设备停止adverting并进入永久睡眠模式。
在睡眠模式下,所有外围域包括I2C都会断电。此外,系统将在广告和连接间隔之间进入睡眠模式。因此,当没有任何I2C,闪光等活动时,TIS预计睡眠模式正常工作。可能您应该在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 init和定时器步骤进入和跨越执行
4)传感器配置寄存器写入步骤并进入 - 执行
5)执行的两次唤醒呼叫函数
6)设备停止广告
案例4)
1) 睡眠模式配置为10秒
2) 注释了用户_app_init()和唤醒回调函数中的所有I2C init、计时器函数
3)执行两次以上唤醒回调函数
4)但当使用BLE Scanner应用程序试图连接设备时,它是连接的,但在一段时间后(大约10秒)设备断开
5) 然后设备从未进行广告(广告停止)
案例5)
1) 禁用睡眠模式配置
2) 初始化用户_app_init()函数中的I2C计时器
3) 设备广告和能够读取传感器数据
4) 连接也很稳定
让我知道什么可能是错误的和你的反馈。我正在进一步测试,如果有什么我将更新你,但让我知道你对这一点的看法。
感谢和问候
罗希特R
由于您停止广告,进入睡眠模式并唤醒。您还可以将外围设备重新初始化到App_WakeUp_cb()回调。
如果我理解正确,案例1-2-3-5按预期执行。但是你的意思是什么:
1) 睡眠模式配置为10秒
2) 在user_app_init()函数中仅调用I2C init函数
您的意思是在设备唤醒后初始化I2C吗?
案例5:
4)但当使用BLE Scanner应用程序试图连接设备时,它是连接的,但在一段时间后(大约10秒)设备断开
在user_app_on_connection()中添加一个断点,并尝试步进代码?你是否得到任何断言,或者代码是否在任何地方卡住了?连接后的代码行为是什么?也许你应该取消“周期计时器”,但我不确定,因为我无法复制它在我的身边。
谢谢,PM_DIALOG.
你好,下午对话,
如果我理解正确,案例1-2-3-5按预期执行。-“不,在案例1-2-3-4中,代码没有按预期执行,它只会被唤醒两次,之后,没有广告,代码也不会被任何地方卡住。只有情况5正在执行并能够读取传感器数据,因为我已禁用睡眠模式“
1)睡眠模式配置为10秒“意味着您建议配置5SEC,我已配置为10SEC”
2) 在user_app_init()函数中仅调用I2C_init函数-意味着,除了i2c_init(),我已经注释了所有其他函数timer和flash read“
4)但当使用BLE Scanner应用程序试图连接设备时,它是连接的,但在一段时间后(大约10秒)设备断开
在user_app_on_connection()中添加一个断点,并尝试步进代码?你是否得到任何断言,或者代码是否在任何地方卡住了?连接后的代码行为是什么?也许你应该取消“周期计时器”,但我不确定,因为我不能复制它在我的身边-"我确实在user_app_connection()函数中跨了一步,没有assert警告,不,代码没有卡在任何地方。App_easy_timer取消函数已经存在于连接函数中"
感谢和问候
罗希特R
你好,下午对话,
对我有任何更新吗?
感谢和问候
罗希特R
嗨,罗希特,
我很困惑在你的代码中发生了什么,因为它是自定义项目/板,我不能复制任何你的问题。
在情况5中,你提到你禁用了睡眠模式。你是指定期的广告吗?
你启用了还是禁用了WDOG ?在案例1-4中,代码行为是什么?您是否尝试添加断点并逐步执行代码?
谢谢,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和睡眠功能实现项目,如果有,那么请与我,我会比较我的例子和检查什么是错误的?
感谢和问候
罗希特R
你好,下午对话,
我注意到了几点,你能帮忙吗,
1)在测试时,我强行暂停代码,因为设备未广告,并且没有来自I2C传感器的数据,那么代码I从I2C_READ_BYTE()函数下面暂停到以下行,
- “wait_whille_i2c_fifo_is_full(); //等待TX FIFO已满” - 此行代码停止,您可以查看我的代码,什么是问题。
2)接下来我评论了上面的线条,减少了adv_update时间只有100ms并将wakeup_time作为5sec,然后我看到了一些i2c数据,但是在广告上发送数据包然后在广告数据上没有更新,所以我再次暂停它停止的代码,它会停止它的函数最后一行 - “scb-> scr&=〜(1 << 2);”
静态内联void arch_resume_from_sleep(void)
{
//醒来后的应用程序特定任务
app_sleep_exit_proc();
#if((hyperent_wakeup)&&(!ble_app_present))//外部唤醒,只在外部处理器设计中
//禁用外部唤醒中断
外部唤醒禁用();
#万一
//恢复ARM睡眠模式
//重置SCR[2]=睡眠深度位,否则模式=空闲WFI将导致深度睡眠
//而不是处理器暂停
scb-> scr&=〜(1 << 2);
}
你能给我解释一下有什么问题吗。
感谢和问候
罗希特R
页