我们正在使用对话框DA14681 MCU,LIS331HH加速度计和MMC3416磁力计工作。
一切都连接得很好,我们从两个传感器获得读数(通过SPI和Magneto通过I2C加速器)。
我们启动BLE连接的那一刻,这一切都是错误的。
利用LIS加速度计,对于初始8秒的操作,加速度计似乎通过SPI提供正确的读数,然后仅输出所有3轴。使用UART调试器进行测试时,我们会看到一系列明显不正确的奇怪数据。当我们将其交换到12C接口时,在8-10秒后停止UART调试器,并没有给我们。
磁力计通过I2C磁力计发生非常相似的问题。
DA14681是一个合理的新成分已经有点噩梦,但我希望有人遇到同样的问题,并且我们已经错过了一些简单的东西。
任何建议都非常方便!我附上了一些屏幕镜头,这样你就可以看到发生了什么。
设备:
请发送屏幕镜头。
https://drive.google.com/open?id=0bxqax5lh1njvltl4q2ttauy1qmc.
是磁力计的调试屏幕
和
https://drive.google.com/open?id=0bxqax5lh1njvv0vsnexprxi0vfe.
是我们与加速度计看到的。
干杯
班
你好,
请在zip发送文件。
谢谢,
斯塔夫罗斯
嘿Stavros图像附加在拉链中
你好,
我相信问题的根源是在入睡后立即。默认情况下,我们的示例代码使用XTAL32K作为低功耗时钟和在系统睡觉之前,我们等待大约8秒的晶体稳定。之后,系统可以进入睡眠模式,这里是事情最终到噩梦的地方。首先,我们需要一些信息,更具体地说:
1.使用哪个版本的SDK和开发套件类型?
2.您是否使用我们的示例代码之一(例如BLE_ADV)建立了源代码?
3.低功耗时钟的来源是什么(XTAL32K,RCX)?
现在有一些提示和步骤遵循:
1.我们强烈建议您使用pm_mode_extended_sleep.作为睡眠模式。
2.您是否使用适配器才能访问外围模块?请注意,适配器不仅可以确保对外围总线的独家访问,而且CPM(电源管理单元)负责在强制系统睡觉之前处理有效的各种模块。因此,如果您使用低级驱动程序而不是适配器,则系统不知道例如存在。SPI / I2C活动和睡眠后,它最终会一团糟。
由于您能够读取值,我不认为该问题与外围总线的使用不正确。此外,BLE活动似乎损坏了传感器的读数,因为您能够在前8秒内获得一些值。请确认它,如果在遵守问题之前,使用常规BLE活动(广告)。SmartSnippets工具箱。
布罗尔,
sts_dialog。
当传感器未运行时,我们通过蓝牙接收信号。
通过适配器访问外围设备。
da1468x_da15xxx_sdk_1.0.10.1072是我们使用DA14681 Pro开发套件的SDK版本和硬件。
我们的构建基于SDK的源代码 - 不是自定义写入。
时钟设置与示例代码相同,它仅为32.768khz。RCX被禁用,但我们通过启用并没有更改测试。
还有其他建议吗?
你好,
您使用适配器或任务的方式可能出现问题。哪个示例代码从我们的SDK使用?另外,请告诉我8秒后尝试与设备进行任何连接,看看此故障或只是系统是广告,而无需连接到芯片。
一些可能有帮助的提示:
1.使用SPI / I2C功能时更好地使用DMA。他们具有更好的对应/功能,并照顾一些情况。当优先级任务较高时,在仍处于活动状态时中断外围总线的操作。
2.系统睡觉后如何从传感器读取值?如何配置系统的通知时间是阅读的?您是否使用在常规时间段调用的任何RTOS计时器?如果使用任何延迟,必须考虑特殊小心。在RTOS中使用延迟时,任务实际上会暂停模式。如果是系统的时间去睡眠(延迟时)的时间,CPM(电源管理单元)看到任务被暂停并迫使系统进入睡眠状态(没有完成其操作的任务)
3.使用任何睡眠模式时,必须与流量控制功能RTS / CTS一起使用UART外围设备。请注意,只有UART2在DA14681芯片中有此功能。
布罗尔,
sts_dialog。
当我们删除PM_Mode_extended_sleep时,所有似乎都在工作。它显然与睡眠呼叫有关,是否有另一个可以使用的设置?
删除上述宏(pm_mode_extended_sleep.)系统永远不会睡觉。有没有其他选择如果要使用睡眠模式。如上所述并怀疑第一次睡觉后你的配置有问题。请检查并验证上述评论。否则我们无法做到。更多可能有助于解决问题的提示:
1.您可以在哪里配置各种功能的引脚(SPI / I2C / UART)?你用吗?periph_init()函数才能让后者在每个唤醒中调用?如果没有,则在醒来之后,CPM不会将引脚重新配置到之前的状态。(睡觉前的状态)
2.此外,如果设备睡觉后,请检查外围总线并检查是否存在与传感器的任何接口?(使用逻辑分析仪)。如果获得零和无关数据的值,我认为没有交互,并且您只是打印空变量。
布罗尔,
sts_dialog。
你好对话框,
我跟着上述建议,但我仍然在8秒后面临I2C问题。
当我有调试I2C代码时,我发现下面的函数,其中程序陷入困境:
init_event(&i2c_signal);
我每500毫秒读取OS_Timer触发事件中的磁力计(通过I2C)数据。
请查找附加的DOC文件,用于磁力计I2C驱动程序代码。
请查找附加调试屏幕截图。在此屏幕截图中,在8秒后,在第354号线的调试停止。
谢谢
jitendra
你好对话框,
我尝试在设备处于睡眠模式之前读取“i2c_enable_status_reg”状态。在睡眠模式下“i2c_enable_status_reg”之前
状态为“1”,睡眠模式后,“i2c_enable_status_reg”statu为“0”。
然后我将尝试通过使用“hw_i2c_reg_setf(id,i2c_enable,ctrl_enable,1)启用i2c寄存器;”称呼。但仍然I2C状态为“0”。
此外,我尝试了通过使用“HW_GPIO_CONFIGURE”在休眠模式下使用“HW_GPIO_CONFIGURE”的GPIO硬件配置。
任何帮助将不胜感激。
问候,
jitendra
嗨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.