大家好,
我正在使用基于DIAL的DA14583的DEV套件,其基于I2C基电容式接近传感器具有触摸键。
我的主要应用是感知邻近变化(即检测到触摸),并基于此共享的少量数据字节通过更新广告包,该广告包被其他设备收集。
该传感器具有下列特性
-它有一个额外的数据中断引脚,除了基本的I2C通信引脚在传感器一侧,理想情况下保持高。
- 每当数据准备就绪时,传感器会降低数据中断引脚,并且即将将其发送到MCU相应的I2C引脚。
我已经将传感器的数据中断管脚连接到我的MCU GPIO管脚,该管脚被配置为在该管脚处于低电平时给予中断。
我已经以这样的方式编程了传感器,即每当有接近变化(即,触摸检测到),传感器将拉低数据中断引脚,然后MCU可以启动读取操作。此外,我已经以低功耗模式编程了传感器,使其消耗更少的电源。
在我的应用程序中,人体运动检测的数据中断引脚将中断单片机,并根据读取的传感器值更新广告包中的数据。
此逻辑在活动模式下正常工作,但是我的设备将是电池操作我想要在此设备中实现扩展的睡眠模式。
对于睡眠模式,我引用了“ble_app_sleep_mode”和“proxy_reporter”示例代码,并在代码中做了相应的更改
—在user_config.h文件中
app_default_sleep_mode = ARCH_EXT_SLEEP_ON
——唤醒
arch_disable_sleep ();如果(GetBits16(SYS_STAT_REG, PER_IS_DOWN)) {peripher_init ();} if (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 ();}
- 激活睡眠
ARCH_SET_SLEEP_MODE(ARCH_EXT_SLEEP_ON);
对于更长的电池寿命,我已经改变了应用如下,
- 首先我执行相应的传感器配置和MCU配置,然后在睡眠模式下发送MCU。
—使用Data interrupt pin唤醒设备,然后检查传感器数据,并执行相应的更新广告包的操作。
-之后,我发送设备在睡眠模式再次等待下一个中断。
现在,当我进入睡眠模式时,我无法从设备获得适当的响应,整个逻辑失败,在那里我无法获得适当的中间或适当的数据
因此,我也尝试了以下提到的唤醒逻辑的变化
arch_disable_sleep ();如果(GetBits16(SYS_STAT_REG, PER_IS_DOWN)) {peripher_init ();} if (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 ();} i2c_init();
我的问题是,无论是睡眠AFTECTS I2C数据通信,如果是如何修复它?
如果我每30秒得到连续的4到5个中断,那么睡眠模式就会正常工作。
请尽快帮我
感谢和问候
嗨utkarash,
是的,睡眠模式对I2C通讯有影响。当设备处于任何睡眠模式时,所有外围域(SPI。I2C、UART等)断电。这意味着当设备处于扩展睡眠模式时,不可能有任何I2C活动。此外,请记住,如果设备配置为睡眠模式,那么它将在广告和连接间隔之间进入睡眠模式。
如果使用DA14583,您能让我们让我们让我们吗?您有任何特定要求吗?
如果您正在开始新的设计/项目,我们将强烈建议以DA14531或DA14585 / 586产品开发,以及我们最新的SDK6.0.14亚博电竞菠菜,因为它更加改善。我们有很多代码示例和改进的文档,还有软件路线图支持。T.以下是DA14580产品系列和SDK5的软件路线图支持。
请查看DA14531:
https://www.dialog-seminile.com/produ亚博电竞菠菜cts/connectivity/bluetooth-low-energy/products/da14531.
我们还有一个DA14531模块,即DA14531 SmartBond Tiny™模块!它的尺寸非常小,功率非常低。按照下面的链接查找模块的数据表,文档和HW抵押品:
https://www.dialog-seminile.com/produ亚博电竞菠菜cts/bluetooth-module-da14531-smartbond-tiny.
还有一些参考设计可以帮助您减少开发阶段,因为您不需要在开发应用程序代码上花费太多时间。
编纂者
CodeLess允许您使用一组AT命令快速入门无线物联网应用程序。亚博国际官网平台网址无代码AT命令平台允许通过BLE控制本地UART连接的设备以及远程设备。您可以创建简单的演示/应用程序/概念证明,而无需任何代码开发亚博国际官网平台网址或构建自己的应用程序!
//www.xmece.com/亚博电竞菠菜products/smartbond-codeless-commands
对话串行端口服务
dsp模拟串行电缆通信。它提供了一个简单的替代RS-232连接,包括熟悉的软件流量控制逻辑通过蓝牙低能量。SPS软件分发版包括应用程序和概要文件源代码,并支持GAP中心/外设角色。
https://www.dialog-seminile.com/produ亚博电竞菠菜cts/dialog-serial-port-service-dsps.
对于DA14531,有一个完整的SW示例用于读取I2C接口并通过BLE通知将值发送到对等设备。你可以把它作为参考!
DA14531-DA14585-586读取I2C加速度计BLE
谢谢。PM_Dialog
谢谢您的回复和建议,
抱歉,但由于一些限制,我将不能改变对话MCU或SDK在这个状态,
在设备的下一个版本中,我将明确地参考您对新的MCU和SDK的建议,
然而,我请求您帮助睡眠配置与当前版本的SDK和MCU。
我已经分享了我为睡眠配置参考的代码片段,所以你可以检查他们,并让我知道我是否正确?
同样,在引用ble_app_sleep_mode示例之后,我对扩展睡眠模式进行了睡眠配置,同时牢记DA14583的限制。
我观察到以下行为。-
一旦我闪光的代码和重新电源它的设备是广告和几分钟后,如果我再次重新电源它的设备停止广告。
所以你能帮助这个为什么设备停止广告有什么我错过了?
请尽快帮忙
感谢和问候
utkarash.
嗨utkarash,
您是从SPI Flash或系统ram引导吗?你能在调试模式下运行它并检查它是否栈(NMI, WDG,断言等)吗?
我想再次强调,当设备处于SLEEP模式时,不可能有任何I2C活动。
谢谢,PM_DIALOG.
谢谢您的回复和建议,
您是从SPI Flash或系统ram引导吗?——我正在引导使用SPI Flash,我使用十六进制文件生成后构建过程和使用智能片段工具我转储文件到我的板。
你能在调试模式下运行它并检查它是否栈(NMI, WDG,断言等)吗?代码现在不会被NMI和WDG卡住了,我之前提到的广告问题也解决了。
我想再次强调,当设备处于SLEEP模式时,不可能有任何I2C活动。- 我完全明白,I2C在延长睡眠中没有工作。但是,当我至少从睡眠唤醒设备时,I2C应该工作。还要参考这我询问我所做的睡眠配置是否正确?IE。,
如前所述,
对于睡眠模式,我引用了“ble_app_sleep_mode”和“proxy_reporter”示例代码,并在代码中做了相应的更改
—在user_config.h文件中
——唤醒
- 激活睡眠
现在请检查这些声明,并让我知道我是否使用正确的代码发送设备在睡眠和唤醒它?
等待你的回复。
感谢和问候
Utkarsh.
嗨utkarsh,
这似乎是正确的——你想停止广告并将设备设置为永久休眠模式吗?
使用此实现测量的功耗是多少?
请查看DA14580的睡眠模式教程-链接如下:
https://www.dialog-seminile.com/sites/default/files/training_04_sleep_mode_configurations.pdf.
谢谢,PM_DIALOG.
谢谢您的回复和建议,
你想停止广告并将设备设置为永久休眠模式吗?不,我不想停止广告,也不想让设备永久休眠。请检查以下几点,了解我的设备在睡眠时应该去哪里,什么时候应该醒来?
- 当传感器更新广告数据包的中断时,我唤醒了设备,然后再次睡眠,等待从传感器接收下一个中断。
这是我如何需要睡眠来工作,如果你需要了解关于传感器和我的应用请参考我的最初的帖子。
使用此实现测量的功耗是多少?-我已经断开了我的传感器,只测量了MCU电流,我得到的范围在50到150微安(电流在这个范围内变化),这对我来说不是理想的情况,我想要的电流不应该超过50微安,只有MCU。当连接我的传感器后,它将再次增加。同时,在测量电流时,我参考了你建议的相同教程。
请也检查DA14580的睡眠模式教程-链接如下我已经推荐了本教程本身并实现了我的睡眠逻辑,我也与您共享。
除此之外,我还有一个问题,当我执行睡眠时,我浏览了一些帖子,我发现了下面的对话评论。
“另外,由于它是DA14583,如果闪光灯现在断电,则消耗将再次增加。
有一个函数,以便将SPI放在下电模式 - SPI_FLASH_POWER_DOWN() - 并且在这种情况下,除非您指示SPI Flash供电,否则您将无法与Flash进行交互。在开始与Flash交互之前,您应该调用SPI_FLASH_RELEASE_FROM_POWER_DOWN()。“
现在在我的情况下,我也使用DA14583,所以我应该为此烦恼吗?
如果是的,然后参考此评论我在我的代码中进行了这些变化,请检查它是否正确?
如果不是,那么应该忽略我的案子中的这个评论?
请尽早帮忙。
谢谢并发生
utkarash.
嗨utkarsh,
您也可以在DA14583中使用- spi_flash_power_down(),以便您可以关闭flash。这将减少当前睡眠模式的消耗。然后,当芯片醒来时,您应该调用-da14583_spi_flash_release() -从电源关闭模式释放闪存。
在将设备发送到睡眠模式之前,我调用spi_flash_power_down,例如:
我没有看到任何工作 - 你正在调用正确的API。
>>>又同时唤醒设备,我再次重新安置SPI_POWER_DOWN模式,例如,
请尝试使用da14583_spi_flash_release()而不是spi_flash_release_from_power_down()。
谢谢,PM_DIALOG.
谢谢您的回复和建议,
请尝试使用da14583_spi_flash_release()而不是spi_flash_release_from_power_down()谢谢你的建议,我将提出各自的变化。
感谢和问候