嗨对话小组,
我正在使用SDK文件夹中的“BLE_APP_NONCONN”示例的自定义板。我的项目要求如下。
- 当没有ble或其他活动时,进入睡眠模式(ARCH_EXT_SLEEP_ON)。
- 当外部传感器提供数据时,对话框芯片将唤醒引脚更改中断并使用计时器0开始从传感器中解码数据。
- 解码数据并在广告字符串上更新它。
- 使用'user_app_adv_start()'启动广告,并启动一个易于计时器,将在6秒内过期。直到那时广告数据被宣传。当App_easy Timer到期时,使用'app_easy_gap_advertise_stop()'停止广告,这将使芯片睡眠。
- 在停止广告之前,当下一个数据准备好时,唤醒引脚将使芯片从睡眠中唤醒。
我在调试模式下填写上述步骤。当我在RAM上运行我的程序并断开调试器时,电流消耗会降低到2.4μA。当外部中断发生时,电流上升到大约50μA,振荡在2.4μA至50μA之间。(我猜这是由于广告Internvals之间的睡眠)。所以我认为上面的概念可以很好地工作。
但我陷入了两个问题。
1)在休眠模式(调试器断开状态),当我的芯片发布时,我认为它只发布一次。因为我在BLE扫描仪应用程序上检查它,我注意到RSSI值只更新一次。它只会传播一次吗?如果只传输一次,为什么电流在2.4µA到50µA之间振荡6秒?
2)上述条件有效期为一段时间和突然间,电流增加到350μA,然后根本没有广告。我的节目停止了吗?
请注意,仅当我断开调试器时,才会出现上述两个条件。
是什么导致了睡眠中的这两个问题?
问候,
马克
设备:
嗨马克,
在睡眠模式下执行任何类型的测量时,您不应以调试模式运行固件。否则,该设备无法进入睡眠模式,并且功耗将大大增加。为此,我的建议将成为调试器未连接,因为这可以防止系统睡眠。此外,非常重要的提示是,如果您在您的自定义板中使用SPI Flash,则应将其供电。
你可以尝试再试一次吗?请在调试模式下运行它 - 在此步骤中的功耗并不重要。你提到的是广告一次......在第一个广告之后,FW是什么?WDOG已启用或禁用?我建议您启用它,否则如果FW粘在某个地方,您将不会收到通知。如果您完全确定FW按预期运行(未发生WDOG或NMI),请使用SmartSnippets Toolbox的电源分布程序检查它是否未广告一次。
谢谢,PM_DIALOG.
嗨pm_dialog,
在调试模式下运行时,代码正常通告,固件不会卡住任何地方。我在调试模式下运行了一小时的代码,它可以正常工作。当我断开调试器并运行它时,问题(如第一个帖子中所述)发生。
我确实有别的疑问。您的示例代码在“MISC”文件夹中的“BLE_APP_NONCONN”是否支持扩展睡眠模式?因为在调试模式下连接时它正常工作。但是当我断开调试器时,问题就开始了。
我是广告6秒钟并停止它。但它仅广告一次,但整个6秒内的当前消耗量有振荡。这意味着它在广告间隔之间唤醒,但为什么不发送数据包。?
问候,
马克
嗨马克,
SDK6.0.12的ble_app_nonconn项目默认不支持休眠模式。但是,您可以更改休眠模式配置。由于它是一个自定义代码和自定义板,是否有可能共享您所做的更改,以便在睡眠模式下配置它?另一种选择是开始调查哪个是路由的原因,可能是开始切换GPIO或打印一些调试消息,因为固件gests只在非调试模式下卡住。在调试模式下,我假设您已经启用了WDOG ..
谢谢,PM_DIALOG.
嗨pm_dialog,
我的固件不会被卡住。它仅在整个6秒持续时间传输单个广告。但是在调试模式下,它会在6秒持续时间传输4到5次。为什么它只在非调试模式中传输一次?是影响BLE广告的睡眠模式吗?
对于睡眠模式,我已经进行了以下更改。
6秒后,我停止了广告,我的芯片进入延长睡眠。
问候,
马克
嗨马克,
不确定发生了什么,因为它是自定义板/代码。您能否请在user_app_adv_start()和user_app_adv_nonconn_complete()中使用Arch_Printf()在user_app_adv_nonconn_complete()中?另外,请你发给我一个电力分布器的屏幕截图吗?当调试器附加并取消连接时。
谢谢,PM_DIALOG.
你好,
我没有选择在我的自定义板中打印邮件。我正在使用万用表来测量当前消耗。
我认为问题在于当我准备再次发布时调用user_app_adv_start()函数。
我附上以下代码供您参考。
嗨pm_dialog,
正如你建议的那样,我拉下了一个gpioperiph_init()然后在睡前睡觉之前把它拉高Arch_Goto_Sleep(Sleep_Mode)在arch_main.c。附上了示波器输出的截图。我面临的问题是,当我调用user_app_adv_start()时,芯片只传输一次数据。我通过查看android BLE扫描仪应用程序上的RSSI值确认了这一点。我也附上了样本代码。
正如我对我的产品的紧急演示一样,我已经改变了广告间隔到200ms和以某种方式通过调用'user_app_adv_start()'和1秒后我停止它以及在我打电话的广告完整功能之后宣传数据。user_app_adv_start()'再次。我在我的应用中重复了6秒钟,我正在获得多面广告命中。每次我打电话'user_app_adv_start()',我在我的应用程序中只有1个点击,直到我停止广告并再次调用它。
为什么'user_app_adv_start()'只广告数据一次?
请您可以分享我的标志数据的示例代码,用于在外部中断上唤醒并修改广告字符串并传输并睡眠。
问候,
马克
嗨马克,
让我查一下,然后给你答复。
谢谢,PM_DIALOG.
嗨马克,
arch_main.c是SDK文件,强烈建议不要修改任何SDK文件。所有的修改都应该在应用层,在以user_开头的字段中完成。所有其他SDK相关的文件,如果其中任何一个被修改,我们不能保证应用程序将正常工作。SDK应该使用,因为它是对话框提供的,没有任何其他修改。
关于你的源代码,我不能编译它,因为我得到了一对错误。请参阅下面的diff文件,了解如何停止非连接广告,将设备置于睡眠模式,并唤醒它。我的建议是从ble_app_sleepmode SDK的例子开始,其中包含广告数据更新。如何构建应用程序以及如何更新信标数据由您决定。请按照SDK的ble_app_sleepmode示例中的步骤执行。
谢谢,PM_DIALOG.
嗨pm_dialog,
1)你编译我的代码时,你得到了什么样的错误?
2)我修改了你的Arch_main.c文件,因为当我的传感器发送中断时,我必须等待大约20ms来获取数据,但如果我不等待我的代码将恢复入睡,我会错过数据。这就是为什么我修改了ARCH_MAIN.c文件等待我的数据,然后将芯片放入睡眠状态。如何延长芯片的唤醒时间?你能建议一个想法吗?
3)当我开始我的广告时,我添加到Arch_main.c的大多数代码内容都不会执行,因为我正在检查主循环中的条件,我不会在我广告时执行它。为什么会影响你的SDK和广告序列?
4)当我收到中断时,直到我从传感器处理数据时,我就不会启动广告。在我收到数据后,我将开始广告,我相信我的代码都不会在广告期间运行。那么为什么这对SDK给出了任何问题?
谢谢,
马克
嗨pm_dialog,
请支持上面的积分。正如您所建议的那样,我已经开始在BLE_Examples的SleepMode项目上工作。我最大的怀疑是当我的外部传感器给出中断并仅在20ms后提供数据时,我如何在从睡眠中醒来后,我如何防止芯片进入睡眠。
问候,
马克
嗨马克,
请使用Keil IDE中的错误查找日志文件。指示您正在使用的SDK版本是非常有帮助的。不确定SDK版本,但我们强烈建议使用最新版本(SDK6.0.12)。
谢谢,PM_DIALOG.
嗨pm_dialog,
在添加外部32kHz晶体振荡器后,该问题被整理出来。
似乎BLE_APP_SLEEPMODE代码在没有32kHz水晶的情况下不稳定。但是你的数据表说,这32kHz是可选的,这是非常误导的。请纠正数据表,也可以误导别人。我在这个问题上花了3-4个月,没有任何内容,没有任何内容。
任何方式,谢谢你的在线支持。
问候,
马克
嗨马克,
很高兴你有工作。这是对我们之前的会议呼叫讨论的内容。谢谢你的迹象。
问候,pm_dialog