我们正在使用对话框DA14681 MCU、LIS331HH加速计和MMC3416磁强计开发物联网设备。
一切连接良好,我们得到两个传感器的读数(通过SPI的加速度和通过I2C的磁电机)。
我们一开始就把事情搞砸了。
对于LIS加速计,在最初8秒的操作中,加速计似乎通过SPI提供正确的读数,然后仅为所有3个轴输出0。当使用UART调试器进行测试时,我们会看到一大堆明显不正确的奇怪数据。当我们把它换成12C接口来测试时,UART调试器在8-10秒后停止了,什么也没有给我们。
I2C上的磁强计也出现了类似的问题。
作为一个相当新的组成部分,DA14681已经有点噩梦,但我希望有人遇到了同样的问题,有一些简单的事情,我们已经错过了解决这个问题。
任何建议都非常方便!我附上了一些屏幕截图,这样你就可以看到发生了什么。
设备:
请发送屏幕截图。
https://drive.google.com/open?id=0BxQAX5Lh1nJvLTl4Q2ttaUY1Qmc
是磁强计的调试屏幕
以及
https://drive.google.com/open?id=0BxQAX5Lh1nJvV0VSNExPRXI0VFE
我们看到的是加速度计。
干杯
本
你好,
请用邮政编码发送文件。
谢谢,
斯塔夫罗斯
嘿,斯塔夫罗斯的图片附在拉链里
你好,
我相信问题的根源就在睡觉之后。默认情况下,我们的示例代码使用XTAL32K作为低功耗时钟在系统进入睡眠状态之前,我们要等大约8秒钟,让晶体稳定下来. 在那之后,系统可以进入睡眠模式,这就是事情最终变成噩梦的地方。首先,我们需要一些更具体的信息:
1使用什么版本的SDK和类型的开发工具包?
2您是否使用我们的示例代码(例如ble\u adv)构建了源代码?
三。低功耗时钟(XTAL32K,RCX)的来源是什么?
下面是一些提示和步骤:
1我们强烈建议您使用pm\U模式\U延长\U睡眠作为睡眠模式。
2您是否使用适配器访问外围模块?请注意,适配器不仅确保对外围总线的独占访问,而且在强制系统进入睡眠状态之前,CPM(电源管理单元)会处理处于活动状态的各个模块。因此,如果您使用低级别驱动程序而不是适配器,那么系统就不会意识到SPI/I2C活动的存在,一旦进入睡眠状态,就会导致混乱。
我不认为这个问题与不正确使用外设总线有关,因为您能够读取值。另外,BLE活动似乎不会破坏传感器的读数,因为您能够在前8秒获得一些值。请确认,如果在观察到问题之前,使用SmartSnippets工具箱有正常的可编辑活动(广告)。
比尔,
STS\U对话框。
当传感器不工作时,我们通过蓝牙接收信号。
通过适配器访问外围设备。
DA1468x\u DA15xxx\u SDK\u 1.0.10.1072是SDK版本,对于硬件,我们使用DA14681 pro开发工具包。
我们的构建基于SDK的源代码-而不是定制编写的。
时钟设置与示例代码相同,仅为32.768KHz。RCX被禁用,但我们测试它启用,没有变化。
还有其他建议吗?
你好,
您使用适配器或任务的方式可能有问题。您使用的SDK示例代码是什么?如果在8秒钟后您尝试与设备建立任何连接并看到此故障,或者系统正在发布广告而未尝试连接到芯片,请告知我。
一些可能有用的提示:
1.使用SPI/I2C时最好使用DMA功能。他们具有更好的通信/功能,并处理某些情况,例如,当一个更高优先级的任务在仍然活动时中断外围总线的操作时。
2系统进入休眠状态后,如何读取传感器的值?如何配置系统,使其收到阅读时间的通知?您是否使用在固定时间段调用的RTOS计时器?如果使用任何延迟,必须特别小心。在RTOS中使用延迟时,任务实际上进入挂起模式。如果到了系统进入睡眠的时间(延迟时),CPM(电源管理单元)会看到任务被暂停,并强制系统进入睡眠(任务尚未完成其操作)
三。使用任何休眠模式时,UART外设必须与流量控制功能RTS/CTS一起使用。请注意,在DA14681芯片中只有UART2具有此功能。
比尔,
STS\U对话框。
当我们删除下午模式延长睡眠时,一切似乎都正常。很明显这和睡眠通话有关,有没有其他的设置可以用来做这个?
删除前面提到的宏(pm\U模式\U延长\U睡眠)系统从不休眠。有别无选择如果你想使用睡眠模式。正如你第一次说的和怀疑的那样,睡觉后你的配置出了问题。请核实我的上述评论。否则我们就无能为力了。还有一些可能有助于解决问题的提示:
1您在哪里为各种功能(SPI/I2C/UART)配置管脚?你用这个吗外围初始化()函数,以便在每次唤醒时调用后者?如果没有,那么CPM不会在唤醒后将管脚重新配置为其先前的状态。(睡觉前的状态)
2另外,请在设备进入睡眠状态时检查外围总线,并检查是否与传感器有任何接口?(使用逻辑分析仪)。如果你得到的值像零和不相关的数据,我认为没有交互作用,你只是打印空变量。
比尔,
STS\U对话框。
你好Dialog,
我遵循了以上建议,但8秒后仍然面临I2C问题。
当我调试I2C代码时,我发现下面的函数程序卡住了:
初始化事件(&i2c\U信号);
我正在读取磁强计(通过I2C接口)的数据在操作系统定时器触发事件每500毫秒。
请找到附件文件磁强计I2C驱动程序代码。
请找到附件调试截图。在这个截图中,调试在8秒后的第354行停止。
谢谢
吉坦德拉
你好Dialog,
在设备进入睡眠模式之前和之后,我尝试读取“I2C\ U ENABLE\ U STATUS\ U REG”状态。睡眠模式前“I2C\U ENABLE\U STATUS\U REG”
状态为“1”,睡眠模式“I2C\U ENABLE\U status\U REG”后状态为“0”。
然后,我将尝试通过使用“HW_I2C_REG_SETF(id,I2C_enable,CTRL_enable,1);”调用来启用I2C寄存器。但I2C的状态仍然是“0”。
另外,在设备进入睡眠模式后,我使用“hw\u gpio\u configure”尝试了gpio硬件配置。
任何帮助都将不胜感激。
当做,
吉坦德拉
嗨,吉滕德拉普拉萨德,
我看不出任何明显的原因让设备在初始化init\u event()时陷入困境函数所做的只是创建一个信号量,而且我也无法从您所附的数据中得出有效的结论。我假设您以外设演示中的i2c功能为例,并将其转换为支持BLE的演示,显然在转换代码时出现了问题。
有一些论坛帖子涉及I2C交易,请查看下面的一些帖子,以防有所帮助:
https://support.dialog semiconductor.com/forums/post/dialog-smartbond-bl。。。
https://support.dialog semiconductor.com/forums/post/dialog-smartbond-bl。。。
谢谢你的对话