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