当在DA14681 Dev Board上启动BLE连接时,I2C和SPI退出

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
13个员额/ 0个新员额
最后发表
jetsonindustries
离线
最后看到:2年5个月前
加入:2016-12-06 08:36
当在DA14681 Dev Board上启动BLE连接时,I2C和SPI退出

我们正在使用Dialog DA14681 MCU、LIS331HH加速度计和MMC3416磁力计开发物联网设备。

一切都连接良好,我们可以从两个传感器(通过SPI accel和通过I2C Magneto)获得读数。

当我们开始BLE连接的那一刻,一切都变得非常糟糕。

对于LIS加速度计,在最初8秒的操作中,加速度计似乎通过SPI给出了正确的读数,然后对所有3轴只输出0。当使用UART调试器进行测试时,我们会看到一大堆明显不正确的奇怪数据。当我们将它切换到12C接口来测试时,UART调试器在8-10秒后停止,没有给我们任何结果。

I2C上的磁力计也会出现非常类似的问题。

作为一个相当新的组件,DA14681有点像一场噩梦,但我希望有人遇到过同样的问题,我们错过了一些简单的东西来解决这个问题。

任何建议都是非常方便的!我附上了一些屏幕截图,这样你就可以看到发生了什么。

关键词:
设备:
STS_Dialog(未验证)
请发送截屏。

请发送截屏。

jetsonindustries
离线
最后看到:2年5个月前
加入:2016-12-06 08:36
https://drive.google.com/open

https://drive.google.com/open?id=0BxQAX5Lh1nJvLTl4Q2ttaUY1Qmc

是磁力计的调试屏幕吗

https://drive.google.com/open?id=0BxQAX5Lh1nJvV0VSNExPRXI0VFE

就是我们在加速度计上看到的。

干杯

STS_Dialog(未验证)
你好,

你好,

请以zip格式发送这些文件。

谢谢,

达沃

jetsonindustries
离线
最后看到:2年5个月前
加入:2016-12-06 08:36
嘿,Stavros图片附上

嘿,Stavros图像附在Zip

STS_Dialog(未验证)
你好,

你好,

我认为问题的根源就在睡觉之后。默认情况下,我们的示例代码使用XTAL32K作为低功耗时钟和在系统进入睡眠之前,我们大约要等8秒晶体稳定下来.在那之后,系统可以进入睡眠模式,这就是事情结束噩梦的地方。首先,我们需要一些信息,更具体地说:

1.使用什么版本的SDK和开发工具包?
2.您是否使用我们的示例代码(例如ble_adv)构建了您的源代码?
3.低功耗时钟(XTAL32K, RCX)的来源是什么?

下面是一些建议和步骤:

1.我们强烈推荐您使用pm_mode_extended_sleep睡眠模式。

2.您是否使用适配器来访问外围模块?请注意,适配器不仅确保对外围总线的独家访问,而且CPM(电源管理单元)在强制系统进入休眠之前照顾各种活跃的模块。因此,如果您使用低级驱动程序而不是适配器,那么系统就不会意识到例如SPI/I2C活动的存在,并且在进入睡眠状态时,它会变得一团糟。

我不认为这个问题与外部总线的错误使用有关,因为你可以读取值。此外,BLE活动似乎不会破坏来自传感器的读数,因为你能够在前8秒获得一些值。请确认,如果在观察到问题之前,使用SmartSnippets工具箱有正常的BLE活动(广告)。

BR,
STS_Dialog。

jetsonindustries
离线
最后看到:2年5个月前
加入:2016-12-06 08:36
我们正在通过

当传感器不工作时,我们通过蓝牙接收信号。

通过适配器访问外围设备。

DA1468x_DA15xxx_SDK_1.0.10.1072是SDK版本,对于硬件,我们使用DA14681 pro开发工具包。

我们的构建是基于SDK的源代码——而不是自定义编写的。

时钟设置与示例代码相同,只有32.768KHz。RCX是禁用的,但我们测试了启用它,没有改变。

还有其他建议吗?

STS_Dialog(未验证)
你好,

你好,

可能您使用适配器或任务的方式有问题。你在我们的SDK中使用了哪个示例代码?也请让我知道,如果8秒后你试图与设备连接,看到这个失败或只是系统广告没有任何尝试连接芯片。

以下几点可能会有帮助:

1.在使用SPI/I2C功能时,最好使用dma。他们有更好的通信/功能,并照顾一些情况,例如,当一个更高优先级的任务,中断外围总线的操作,而仍然活跃。

2.在系统进入睡眠状态后,如何从传感器读取值?如何配置系统以通知该读取时间?你是否使用任何在常规时间周期被调用的RTOS定时器?如果有任何延误,必须特别注意。当在RTOS中使用延迟时,任务实际上进入了挂起模式。如果是系统进入睡眠的时间(虽然有延迟),CPM(电源管理单元)看到任务被挂起,并强制系统进入睡眠(在任务没有完成其操作的情况下)

3.当使用任何睡眠模式时,UART外围设备必须与流量控制功能RTS/CTS一起使用。请注意,在DA14681芯片中只有UART2有这个功能。

BR,

STS_Dialog。

jetsonindustries
离线
最后看到:2年5个月前
加入:2016-12-06 08:36
当我们删除pm

当我们删除pm_mode_extended_sleep时,一切似乎都工作了。这显然和睡眠呼叫有关,有没有其他的设置可以用来做这个?

STS_Dialog(未验证)
删除前面提到的

删除上述宏(pm_mode_extended_sleep)系统从不休眠。有没有其它选择如果你想使用睡眠模式。正如我所说的,从一开始就怀疑你睡眠后的配置有问题。请核实我以上的评论。否则我们就无能为力了。以下是一些可能有助于解决这个问题的提示:

1.具体在哪里配置各种功能的引脚(SPI/I2C/UART)?你是否使用periph_init ()函数,以便后者在每次唤醒时被调用?如果不是,那么CPM不会在唤醒后将引脚重新配置为以前的状态。(睡觉前的状态)

2.另外,请检查设备休眠时的外围总线,检查是否有与传感器的接口?(使用逻辑分析仪)。如果你得到的值是0或者不相关的数据,我认为没有交互作用,你只是输出空变量。

BR,

STS_Dialog。

Jitendraprasad
离线
最后看到:2年7个月前
加入:2017-10-02 38
你好,对话框,

你好,对话框,

我已经按照上面的建议做了,但是8秒后我仍然面临I2C问题。

当我调试I2C代码时,我发现下面的函数程序卡住了:
init_event (&i2c_signal);

我每500毫秒在OS_TIMER触发事件中读取磁力计数据(通过I2C接口)。

请查收附件磁力计I2C驱动代码的文档文件。
请找到附件中的调试截图。在这个屏幕截图中,调试在行号354停止8秒后。

谢谢

Jitendra

附件:
Jitendraprasad
离线
最后看到:2年7个月前
加入:2017-10-02 38
你好,对话框,

你好,对话框,

我尝试在设备进入睡眠模式之前和之后读取“I2C_ENABLE_STATUS_REG”状态。在休眠模式"I2C_ENABLE_STATUS_REG"之前
“I2C_ENABLE_STATUS_REG”休眠模式后状态为“0”。

然后,我将尝试使用“HW_I2C_REG_SETF(id, I2C_ENABLE, CTRL_ENABLE, 1);”调用来启用I2C寄存器。但I2C状态仍然为“0”。

此外,我尝试在设备进入睡眠模式后使用“hw_gpio_configure”进行gpio硬件配置。

任何帮助都将不胜感激。

问候,

Jitendra

MT_dialog
离线
最后看到:7个月1个星期前
工作人员
加入:2015-06-08 34
嗨Jitendraprasad,

嗨Jitendraprasad,

我没有看到任何明显的原因,设备在初始化init_event()的所有函数是创建一个信号量,我也不能达到一个有效的结论,从你所附的数据。我假设您已经将peripherals_demo中的i2c功能作为示例,并将该功能转移到一个启用了BLE的演示程序中,显然在转移代码时发生了一些问题。

有一些论坛帖子是关于I2C交易的,请查看下面的帖子,以防有帮助:

https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。

https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。

由于MT_dialog