STM32 MPU6050 使用DMP遇到的问题
如题,在移植了原子的DMP库后,遇到了死在"Product ID read as 0 indicates device is either incompatible or an MPU3050."的问题,但是却可以读出6050的地址0x68(AD0接地),论坛有个老哥也遇到了这个问题,他的帖子https://blog.csdn.net/qq_42208483/article/details/82928794
出问题的地方在:
if (i2c_read(st.hw->addr, st.reg->prod_id, 1, data))
return -1;
rev = data[0] & 0x0F;
if (!rev) {
log_e("Product ID read as 0 indicates device is either "
"incompatible or an MPU3050.\n");
return -1;
prod_id这个寄存器地址是0x0c,寄存器手册上并没有写出这个寄存器,猜测应该是自检的一个寄存器吧。只能放弃从寄存器着手查找问题。
论坛有其他人碰到能读出ID不能读出数据的情况,详情:
https://blog.csdn.net/qq_26039737/article/details/79214887
这篇帖子总结的很好,说的是可能PWR_MGMT_1 寄存器的睡眠位处于开启状态,所以要清零睡眠位(唤醒)才可以正常读取数据。但是我重新读了PWR_MGMT_1寄存器,发现PWR_MGMT_1值为0,所以排除6050休眠可能。
最后怀疑是芯片损坏,因此重新焊了一片,就能正常读出数据了。和开头那篇帖子的博主的结论一样。