我已通过控制器 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
当我尝试接收数据时,我总是收到以下数据包:
从本参考手册中,我们可以看到这是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 读取正确的数据?
我最近遇到了同样的问题,以下步骤可能会解决,
希望这些步骤会有所帮助。