抄了原子哥的驱动代码,放在了c8t6最小系统板上去跑,一切正常,自检原本通过不了,一顿操作后可以通过了,加速度角速度读取也OK,唯独读取FIFO中的数据读不出来具体为mpu_dmp_get_data(&pitch,&roll,&yaw)这个函数跑不出来,进一步检查,发现是
if (fifo_count > (st.hw->max_fifo >> 1)) {
/* FIFO is 50% full, better check overflow bit. */
if (i2c_read(st.hw->addr, st.reg->int_status, 1, tmp))
return -1;
if (tmp[0] & BIT_FIFO_OVERFLOW) {
mpu_reset_fifo();
return -2;
}
}
这里返回-2导致这个代码段出不去,明显的FIFO溢出
我一个while循环直接把读取速度干到最快,结果还是过不去
接下来,我参考了一片据传【启蒙无数人】的神贴,说是读取速度太快也不行,我直接一个delay_us函数把读取速度干慢,结果自然不用多说
接下来,自然是按照传统规矩,点到为止,我改变了代码结构,跳过获取欧拉角直接获取加速度角速度,发现竟然是好的,我说这6050不讲武德,怀疑是FIFO问题,仔细检查后发现
初始化代码中有关闭FIFO的代码
但是这无关紧要呀,因为在mpu_dmp_init()函数中又用如下函数打开了
我将信将疑的把上面关闭FIFO的函数改为0XFF和0X01都试了一遍,结果不必多说
现在这6050都把我干懵逼了,难道是6050固件坏了?FIFO坏了???