在这个有趣的帖子中:
用户得出结论、MPU6050不会作为 MPU6050Init 函数的一部分从复位中释放。
他提到他解决了这个问题-不幸的是、代码尚未发布。
您能否发布补充 MPU6050Init 并使传感器准备好接受读取请求的所需函数?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在这个有趣的帖子中:
用户得出结论、MPU6050不会作为 MPU6050Init 函数的一部分从复位中释放。
他提到他解决了这个问题-不幸的是、代码尚未发布。
您能否发布补充 MPU6050Init 并使传感器准备好接受读取请求的所需函数?
您好、Shai、
一位 TI 员工发布了该错误的记录、并希望在下一个版本中解决该错误。 鉴于这是2014年、我本以为应该解决这一问题。 您是否遇到了这个确切的问题?
看起来 MPU6050Callback 需要检查正在执行的复位:
// //发出 MPU6050器件复位 // MPU6050_State_init_RES 案例: { // //读取状态寄存器以确认复位已完成。 // psInst->uCommand.pui8Buffer[0]= MPU6050_O_PWR_Mgmt_1; I2CMRead (psInst->psI2CInst、psInst->ui8Addr、 psInst->uCommand.pui8缓冲器,1,psInst->pui8数据,1, MPU6050Callback、psInst); psInst->ui8State = MPU6050_State_init_wait; 中断; }
您好、Shai、
我在审阅文件后的想法是、修复程序未添加到 Init 函数、而是回调函数。 这就是我从 Callback 发布上述代码片段的原因、因为我认为这是为了解决该问题而添加的代码片段。
但是、我有时间下拉引用的旧2.0.1版本、并对 mpu6050.c 文件执行了 diff、发现文件之间没有变化。
编写 sensorlib 并为其提供支持的工程师不再是我们的团队成员、因此很难提供支持、因为我们对这些器件缺乏了解、 但是、根据我在代码中看到的内容、我的建议是、如果需要将复位释放到 Init、则回调中的以下代码应该很有用(sans the case statement):
// //读取状态寄存器,在继续之前检查是否已完成复位。 // MPU6050_State_init_wait: { // //检查从状态读回的值以确定设备 //仍处于复位状态或是否就绪。 复位状态 //寄存器为0x40、该寄存器设置了睡眠位。 器件也可以 //在其早期阶段使用地址 NACK 进行响应 //内部复位。 继续轮询、直到我们验证器件是否就绪。 // // if ((psInst->pui8Data[0]!= MPU6050_PWR_Mgmt_1_SLEEP)|| (ui8Status = I2CM_STATUS_ADDR_NACK) { // //器件仍处于复位状态,因此开始轮询该寄存器。 // psInst->uCommand.pui8Buffer[0]= MPU6050_O_PWR_Mgmt_1; I2CMRead (psInst->psI2CInst、psInst->ui8Addr、 psInst->uCommand.pui8缓冲器,1,psInst->pui8数据,1, MPU6050Callback、psInst); // //有意保持此状态以创建轮询效果。 // } 其他 { // //器件已退出复位状态,移至空闲状态。 // psInst->ui8State = MPU6050_State_Idle; } 中断; }
根据我在 mpu6050.c 文件中所说的话、这似乎是处理该情况的方法。