你好所有的,
我使用Dialog的DA14583基于Dev Kit和一个基于I2C的电容式接近传感器与触摸键。
我的主要应用是感测接近变化(即,触摸检测到),并根据更新广告数据包的数据字节来进行以下几个数据字节,该广告数据包由另一个设备收集。
该传感器具有以下优惠
- 它具有额外的数据中断引脚,除了传感器侧的基本I2C通信引脚,理想地保持高。
-当数据准备好并准备将其通过各自的I2C引脚发送到MCU时,传感器拉出数据中断引脚LOW。
我已经将传感器的数据中断管脚连接到我的MCU GPIO管脚,该管脚被配置为在该管脚处于低电平时给予中断。
我已经将传感器编程为这样一种方式,即每当有一个接近变化(即,触摸检测到),传感器将拉动数据中断引脚LOW,然后MCU可以启动Read操作。此外,我已编程传感器在低功耗模式,以减少功耗。
在我的应用程序数据中断引脚,人体运动检测将中断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在睡眠模式。
- 使用数据中断引脚I唤醒设备,然后检查传感器数据并执行更新广告分组的相应操作。
- 在此之后,我再次在睡眠模式下发送设备等待下一个中断。
现在,当我纳入睡眠模式,我不能从设备得到适当的响应,整个逻辑失败,我不能得到适当的中断或适当的数据
因此,我还尝试了唤醒逻辑的以下更改
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 ();
我的问题是,睡眠是否影响I2C数据通信,如果是,我该如何解决?
并且是MCU的最小特定睡眠时间,即如果我每30秒都将成功4到5中断,睡眠模式会正常工作。
请尽快帮我
感谢和问候
嗨Utkarash,
是的,睡眠模式对I2C通讯有影响。当设备处于任何睡眠模式时,所有外围域(SPI。I2C、UART等)断电。这意味着当设备处于扩展睡眠模式时,不可能有任何I2C活动。此外,请记住,如果设备配置为睡眠模式,那么它将在广告和连接间隔之间进入睡眠模式。
请问使用DA14583是否有具体原因?您有什么特别的要求吗?
如果您正在开始一个新的设计/项目,我们强烈建议您从DA14531或DA14585/586产品和我们最新的SDK6.0.14开始雷电竞官网登录,因为它得到了更多的改进。我们有很多代码示例和改进的文档,也有软件路线图支持。T这里没有对DA14580产品族和SDK5的软件路线图支持。
请查看DA14531:
//www.wsdof.com/雷电竞官网登录products/connectivity/bluetooth-low-energy/products/da14531
我们还有一个DA14531模块,即DA14531 SmartBond TINY™模块!它有非常小的尺寸和非常低的功率。按照以下链接查找模块的数据表、文档和HW附带资料:
//www.wsdof.com/雷电竞官网登录products/bluetooth-module-da14531-smartbond-tiny
还有参考设计,您将帮助您减少开发阶段,因为您不需要花费这么多时间开发您的应用程序代码。
CodeLes
无附件允许您快速使用一组AT命令使用无线IOT应用程序。雷竞技安卓下载Dodeless AT命令平台允许通过BLE控制本地UART连接的设备以及远程设备。您可以创建简单的演示/应用程序/概念证明,而无需任何代码开发雷竞技安卓下载或在顶部构建您自己的应用程序!
https://www.dialog-seminile.com/produ雷电竞官网登录cts/smartbond-codeless-commands.
对话框串行端口服务(DSP)
DSP模拟串行电缆通信。它为RS-232连接提供了简单的替代品,包括通过蓝牙低能量的熟悉的软件流控制逻辑。SPS软件分发包括应用程序和配置文件源代码并支持间隙中央/外设角色。
//www.wsdof.com/雷电竞官网登录products/dialog-serial-port-service-dsps
对于DA14531,您有一个完成的SW示例,用于读取I2C接口,并通过BLE通知将值发送到对等设备。您可以将其作为参考!
DA14531-DA14585-586读取I2C加速度计BLE
谢谢。PM_DIALOG.
谢谢您的回复和建议,
对不起,但是由于少量的采用,我将无法在此状态下更改对话框MCU或SDK,
在设备的下一个版本中,我将明确地参考您对新的MCU和SDK的建议,
但是,我要求您使用Curennt版本的SDK和MCU帮助睡眠配置。
我已经分享了我为睡眠配置参考的代码片段,所以你可以检查他们,并让我知道我是否正确?
同样,在引用ble_app_sleep_mode示例之后,我对扩展睡眠模式进行了睡眠配置,同时牢记DA14583的限制。
我陈述了Follwing行为。-
一旦我刷新代码并重新推回它,设备是广告,如果我再次重新推回设备,那么设备就停止了广告。
那么你可以帮忙,为什么设备停止广告是有什么我错过的?
请尽快帮忙
感谢致敬
Utkarash
嗨Utkarash,
您是否从SPI Flash或System-RAM启动?您能否在调试模式下运行它,并检查它是否符合stauck(nmi,wdg,断言等)?
我想再次亮点,即当设备处于睡眠模式时,无法具有任何I2C活动。
谢谢,PM_Dialog
谢谢您的回复和建议,
您是否从SPI Flash或System-RAM启动?——我正在引导使用SPI Flash,我使用十六进制文件生成后构建过程和使用智能片段工具我转储文件到我的板。
您能否在调试模式下运行它,并检查它是否符合stauck(nmi,wdg,断言等)?- 现在的代码不会被困在NMI或WDG中,并解决了我提到的广告的问题。
我想再次亮点,即当设备处于睡眠模式时,无法具有任何I2C活动。——我完全理解I2C在长时间睡眠中不起作用。然而,当我从睡眠中唤醒设备时,至少I2C应该工作。关于这个,我问我的睡眠配置是否正确?也就是说,
如前所述,
对于睡眠模式,我已经引用了“BLE_APP_SLEEP_MODE”和“PROXY_REPORTER”示例代码,并在代码中进行了相应的更改
—在user_config.h文件中
- 唤醒
-用于激活睡眠
现在请检查这些声明,并让我知道我是否使用正确的代码发送设备在睡眠和唤醒它?
等待你的答复。
感谢和问候
Utkarsh
嗨Utkarsh,
它似乎是正确的 - 你想停止广告并将设备放入永久睡眠模式吗?
您用这个实现测量的功耗是多少?
还请检查DA14580的睡眠模式教程 - 链接提供:
//www.wsdof.com/sites/default/files/training_04_sleep_mode_configurations.pdf
谢谢,PM_Dialog
谢谢您的回复和建议,
您想停止广告并将设备放入永久睡眠模式吗?- 不,我不想停止广告,也不想把设备放在永久睡眠中。请检查下面的指向GransanMD,我的设备应该睡觉,什么时候应该醒来?
当传感器更新广告包时,我唤醒设备,5秒后再次进入睡眠状态,等待下一个从传感器接收到的中断。
这是我如何需要睡眠来工作,如果你需要了解关于传感器和我的应用请参考我的最初的帖子。
您用这个实现测量的功耗是多少?--我已经断开了我的传感器,只测量了MCU电流,我得到的范围在50到150微安(电流在这个范围内变化),这对我来说不是理想的情况,我想要的电流不应该超过50微安,只有MCU。当连接我的传感器后,它将再次增加。同时,在测量电流时,我参考了你建议的相同教程。
还请检查DA14580的睡眠模式教程 - 链接提供: -我引用了本教程本身,并实现了我的睡眠逻辑,我也与你分享了。
除此之外,我还有一个问题,在实施睡眠时,我经历了几个帖子,我发现下面通过对话框提到注释。
“另外,由于是DA14583,如果flash现在掉电,那么消耗将再次增加。
有一个函数用于将SPI置于关机模式- spi_flash_power_down() -在这种情况下,你将无法与flash交互,除非你指示SPI flash上电。在开始与flash交互之前,您应该调用spi_flash_release_from_power_down()。
现在在我的情况下,我也使用DA14583,所以我应该为此烦恼吗?
如果是的,然后参照这个注释,我在我的代码中做了这些更改,请检查它是否正确?
如果没有,那么在我的情况下应该忽略这个评论吗?
请尽快帮忙。
感谢和独立
Utkarash
嗨Utkarsh,
您也可以使用 - SPI_FLASH_POWER_DOWN() - 在DA14583中,因此您可以关闭闪光灯。这将降低睡眠模式下的电流消耗。然后,当芯片唤醒时,您应该调用-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()谢谢你的建议,我会做相应的修改。
感谢致敬