通过与 SAMD21 接口的 I2C 从 BNO085 接收数据时出现问题

问题描述 投票:0回答:1

我已通过控制器 SERCOM1 上以 100KHz 运行的 I2C 同步通信将 BNO085 与 SAMD21G18A 控制器连接,处理器以 8MHz 运行。 我正在尝试使用 SHTP 协议读取陀螺仪和加速度计的数据(参考手册)。传感器采用的传感器。

这是我如何进行 I2C 初始化:

    i2c_m_sync_get_io_descriptor(&SYS_I2C_BUS, &io);
    i2c_m_sync_enable(&SYS_I2C_BUS);
    i2c_m_sync_set_slaveaddr(&SYS_I2C_BUS, I2C_Address_of.IMU_BNO, I2C_M_SEVEN); //Address = 0x68

当我尝试接收数据时,我总是收到以下数据包:

enter image description here

从本参考手册中,我们可以看到这是BNO085的广告通道,它确认与控制器建立了通信。 我尝试使用

软重置BNO085
    shtpData[0] = 1;
    BNO085_send_packet(CHANNEL_EXECUTABLE, 1);  //CHANNEL_EXECUTABLE = 1, size = 1

我已将模式切换为“ON”,使用

将其从睡眠模式中唤醒
    shtpData[0] = 2; 
    BNO085_send_packet(CHANNEL_EXECUTABLE, 1);  //CHANNEL_EXECUTABLE = 1, size = 1

当我尝试使用

SHTP_REPORT_PRODUCT_ID_REQUEST
(0xf9) 读取 Product_ID 报告时,我没有收到任何数据,而是与上图相同。

这是我使用逻辑分析仪进行 I2C 探测的链接 -> 波形

我缺少什么以及如何从 BNO085 读取正确的数据?

c embedded sensors microchip samd21
1个回答
0
投票

我最近遇到了同样的问题,以下步骤可能会解决,

  1. 一次完整读出广告消息,参考手册指出在读出广告之前所有其他命令都不起作用。(sh2中的sh2_open,将读出所有消息)(确保你的i2c读取命令读取所有货物)
  2. 使用 device on 命令启动内部传感器。(sh2 中的 sh2_devOn)

希望这些步骤会有所帮助。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.