最近在调试 MPU6050模块,在F4上还能跑起来,但程序移植到L151上时就报错:Unsupported software product rev 6。找了好多资料也没有具体的解决方案,对比了F4上的程序和L151上的程序,确认没有什么重大区别。
另外,用探索者板子板载的MPU6050启动很快,dmp初始化一下就OK, 但用外置MPU6050模块挂在探索者板子上,有时需要初始化5,6下有时几分钟才通过,就是下面这块代码:
while((mpu_dmp_init()))
{
LCD_ShowString(30,130,200,16,16,"MPU6050 Error");
delay_ms(200);
LCD_Fill(30,130,239,130+16,WHITE);
delay_ms(200);
}
printf("MPU6050 OKrn");
这个模块难道对硬件的要求这么高吗?
“Unsupported software product rev 6“ 这个报警在代码:
/* Check product revision. */
if (i2c_read(st.hw->addr, st.reg->accel_offs, 6, data))
return -1;
rev = ((data[5] & 0x01) << 2) | ((data[3] & 0x01) << 1) |
(data[1] & 0x01);
printf("data: %02x,%02x,%02x,%02x,%02x,%02xrn", data[0],data[1],data[2],data[3],data[4],data[5]);
if (rev) {
/* Congrats, these parts are better. */
if (rev == 1)
st.chip_cfg.accel_half = 1;
else if (rev == 2)
st.chip_cfg.accel_half = 0;
else {
log_e("Unsupported software product rev %d.rn", rev);
return -1;
}
}
I2C读写没有问题,不然前面就报错了。st.reg->accel_offs 在代码中的值为0x06, 在MPU6050的寄存器手册中没有看到这个寄存器?寄存器是从0X0D~0X75啊。
返回的数值为 data: f6,b0,fd,ff,ff,ff, 算出来rev的值就是6.
为什么F4上就行,L151上就不行了?这个Unsupported software product rev 6 是什么鬼?
2019-7-25 06:52:38
原子哥,这说法好像也说不过去啊,同样的代码在F407上就可以啊,在L151上就不行,只是改了几个IIC的引脚而已,库那块都没有改动,不应该不支持这个芯片啊?
原子哥,这说法好像也说不过去啊,同样的代码在F407上就可以啊,在L151上就不行,只是改了几个IIC的引脚而已,库那块都没有改动,不应该不支持这个芯片啊?
举报
2019-7-25 07:09:57
遇到的问题最终还是解决了,一直忘了发帖回复。
程序实际没有大的问题。我在移植的时候手痒,把IIC那块的程序稍微改动了一下:
void IIC_Ack(void)
{
IIC_SCL(0);//=0; SCL必须在前?否则MPU6050出错:Unsupported software product rev 6.
SDA_OUT();
delay_us(2);
IIC_SDA(0);//=0;
delay_us(3);
IIC_SCL(1);//=1;
delay_us(5);
IIC_SCL(0);//=0;
}
上面的写法是对的。F4板子上是这样写的。移植时我改动了一点:
SDA_OUT();
delay_us(2);
IIC_SCL(0);
这样就不行。
想来还是要先钳住总线才能操作?
遇到的问题最终还是解决了,一直忘了发帖回复。
程序实际没有大的问题。我在移植的时候手痒,把IIC那块的程序稍微改动了一下:
void IIC_Ack(void)
{
IIC_SCL(0);//=0; SCL必须在前?否则MPU6050出错:Unsupported software product rev 6.
SDA_OUT();
delay_us(2);
IIC_SDA(0);//=0;
delay_us(3);
IIC_SCL(1);//=1;
delay_us(5);
IIC_SCL(0);//=0;
}
上面的写法是对的。F4板子上是这样写的。移植时我改动了一点:
SDA_OUT();
delay_us(2);
IIC_SCL(0);
这样就不行。
想来还是要先钳住总线才能操作?
举报