当BLE连接在DA14681 DEV板上开始时,I2C和SPI删除

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
13个帖子/ 0新
最后发表
jetsonindustries
离线
最后一次露面:2年2个月前
加入:2016-12-06 08:36.
当BLE连接在DA14681 DEV板上开始时,I2C和SPI删除

我们正在使用对话框DA14681 MCU,LIS331HH加速度计和MMC3416磁力计工作。

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

我们发起BLE连接的那一刻,一切都变得可怕的错误。

使用LIS加速度计,在最初8秒的操作中,加速度计通过SPI给出正确的读数,然后只输出所有3个轴的0。当使用UART调试器进行测试时,我们看到一大堆奇怪的数据,这显然是不正确的。当我们把它切换到12C接口来测试UART调试器在8-10秒后停止了,什么也没有给我们。

磁力计通过I2C磁力计发生非常相似的问题。

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

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

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

请发送屏幕镜头。

jetsonindustries
离线
最后一次露面:2年2个月前
加入: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年2个月前
加入:2016-12-06 08:36.
嘿,斯塔夫罗斯,附上图片

嘿,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活动(广告)。

布罗尔,
STS_Dialog。

jetsonindustries
离线
最后一次露面:2年2个月前
加入: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.使用任何睡眠模式时,必须与流量控制功能RTS / CTS一起使用UART外围设备。请注意,只有UART2在DA14681芯片中有此功能。

布罗尔,

STS_Dialog。

jetsonindustries
离线
最后一次露面:2年2个月前
加入: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和无关数据的值,我认为没有交互,你只是打印空变量。

布罗尔,

STS_Dialog。

jitendraprasad.
离线
最后一次露面:2年3个月前
加入:2017-10-02 38
你好,对话框,

你好,对话框,

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

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

我每500毫秒读取OS_Timer触发事件中的磁力计(通过I2C)数据。

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

谢谢

Jitendra

附件:
jitendraprasad.
离线
最后一次露面:2年3个月前
加入: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”在休眠模式下使用“HW_GPIO_CONFIGURE”的GPIO硬件配置。

任何帮助将不胜感激。

问候,

Jitendra

mt_dialog.
离线
最后一次露面:4个月2天前
工作人员
加入:2015-06-08 11:34
嗨jitendraprasad,

嗨jitendraprasad,

我没有看到设备初始化init_event()所有功能的任何明显原因是创建一个信号量,我也无法从您附加的数据中获得有效的结论。我想你是一个例子,来自Peripherals_Demo的I2C函数实体,并且您已将该功能转移到启用的BLE启用的演示,显然在传输代码时出现问题。

有几个论坛帖子处理I2C交易,请查看以下一些帖子,以防有助于:

https://support.dialog-semicondiondiondum/forums/post/dialog-smartbond-bl ...

https://support.dialog-semicondiondiondum/forums/post/dialog-smartbond-bl ...

谢谢mt_dialog.