在DA14681开发板上启动BLE连接时,I2C和SPI会断开

⚠️
你好。。谢谢你来到论坛。令人兴奋的消息!我们现在正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有员额和帐户都已迁移。我们现在只接受新论坛的流量-请在//www.xmece.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
13个员额/0个新员额
最后一篇文章
喷气式飞机工业
离线
最后一次见到:2年5个月前
加入:2016-12-06 08:36
在DA14681开发板上启动BLE连接时,I2C和SPI会断开

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

一切都连接良好,我们从两个传感器(通过SPI的加速度传感器和通过I2C的磁电机)获得读数。

一旦我们启动了一个令人震惊的连接,一切都变得非常糟糕。

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

I2C上的磁强计也出现了类似的问题。

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

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

关键词:
设备:
STS\U对话框(未验证)
请发送屏幕截图。

请发送屏幕截图。

喷气式飞机工业
离线
最后一次见到: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\U对话框(未验证)
你好

你好

请用zip发送文件。

谢谢

斯塔夫罗斯

喷气式飞机工业
离线
最后一次见到:2年5个月前
加入:2016-12-06 08:36
嘿,斯塔夫罗斯图片附呈

嘿,Stavros图片附在Zip中

附件:
STS\U对话框(未验证)
你好

你好

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

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

下面是一些要遵循的提示和步骤:

1.我们强烈建议您使用pm_模式_延长_睡眠作为睡眠模式。

2.您是否使用适配器访问外围模块?请注意,适配器不仅确保对外围总线的独占访问,还确保对CPM(电源管理单元)的独占访问在强制系统进入睡眠状态之前,会处理处于活动状态的各个模块。因此,如果使用低级别驱动程序而不是适配器,则系统不会意识到SPI/I2C活动的存在,并且在进入睡眠状态时,会导致混乱。

我不认为问题与不正确使用外围总线有关,因为您能够读取值。此外,BLE活动似乎不会损坏传感器的读数,因为您能够在前8秒获得一些值。请确认,如果在发现问题之前,存在正常的BLE活动(广告),例如使用SmartSnippets工具箱。

比尔,
STS_对话。

喷气式飞机工业
离线
最后一次见到:2年5个月前
加入:2016-12-06 08:36
我们正在接收一个信号

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

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

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

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

时钟设置与示例代码相同,仅为32.768KHz。RCX已禁用,但我们在启用它的情况下进行了测试,没有任何更改。

还有其他建议吗?

STS\U对话框(未验证)
你好

你好

您使用适配器或任务的方式可能有问题。您使用的SDK示例代码是什么?另外,如果8秒钟后您尝试与设备建立任何连接,并看到此故障,或者系统在未尝试连接到芯片的情况下正在发布广告,请告知我。

以下几点提示可能会有所帮助:

1.在使用SPI/I2C功能时,最好使用DMA。它们具有更好的通信/功能,并能处理某些情况,例如,当一个更高优先级的任务在仍处于活动状态时中断外围总线的操作。

2.系统进入睡眠状态后,如何从传感器读取值?您如何配置系统,使其收到阅读时间的通知?您是否使用在固定时间段调用的RTOS计时器?如果使用任何延迟,必须特别注意。在RTOS中使用延迟时,任务实际上进入暂停模式。如果是系统进入睡眠状态的时间(延迟时),CPM(电源管理单元)会发现任务已暂停,并强制系统进入睡眠状态(任务尚未完成其操作)

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

比尔,

STS_对话。

喷气式飞机工业
离线
最后一次见到:2年5个月前
加入:2016-12-06 08:36
当我们删除pm时

当我们删除pm_模式_extended_睡眠时,一切似乎都正常。这显然与睡眠通话有关,是否有其他设置可用于此?

STS\U对话框(未验证)
删除上述内容

删除前面提到的宏(pm_模式_延长_睡眠)系统从不休眠。有别无选择如果你想使用睡眠模式。正如我们第一次说的和怀疑的那样,睡眠后的配置出现了问题。请检查并验证我的上述评论。否则我们就无能为力了。还有一些可能有助于解决此问题的提示:

1.您在哪里为各种功能(SPI/I2C/UART)配置引脚?你用这个吗periph_init()函数,以便在每次唤醒时调用后者?如果没有,则CPM不会在唤醒后将引脚重新配置为其先前的状态。(他们睡觉前的状态)

2.此外,当设备进入睡眠状态时,请检查外围总线,并检查是否有任何与传感器的接口?(使用逻辑分析仪)。如果您得到零和无关数据等值,我认为没有交互,您只是打印空变量。

比尔,

STS_对话。

吉滕德拉普拉萨德
离线
最后一次见到:2年7个月前
加入:2017-10-02 10:38
你好,对话,

你好,对话,

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

当我调试I2C代码时,我发现下面的函数程序卡住了:
初始化_事件(&i2c_信号);

我每500毫秒读取一次OS_定时器触发事件中的磁强计(通过I2C接口)数据。

请查找磁强计I2C驱动程序代码的附加文档文件。
请查看附件中的调试屏幕截图。在此屏幕截图中,调试将在8秒后在第354行停止。

谢谢

吉坦德拉

附件:
吉滕德拉普拉萨德
离线
最后一次见到:2年7个月前
加入:2017-10-02 10:38
你好,对话,

你好,对话,

我尝试在设备进入睡眠模式前后读取“I2C_ENABLE_STATUS_REG”状态。睡眠模式前“I2C\u启用\u状态\u注册表”
状态为“1”,在睡眠模式“I2C_启用_状态_注册”后,状态为“0”。

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

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

任何帮助都将不胜感激。

当做

吉坦德拉

MT_对话框
离线
最后一次见到:7个月1周前
工作人员
加入:2015-06-08 11:34
嗨,吉滕德拉普拉萨德,

嗨,吉滕德拉普拉萨德,

我看不出任何明显的原因让设备在初始化init_event()时陷入困境。函数所做的只是创建一个信号量,而且我无法从您所附的数据中得出有效的结论。我想您已经以外围设备演示中的i2c功能为例,并将该功能转移到支持BLE的演示中,显然在转移代码时出了问题。

有一些论坛帖子涉及I2C交易,请查看下面的一些帖子,以防有所帮助:

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

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

谢谢你的对话