MPU6050的DMP初始化错误
小弟移植了论坛里大大的MPU6050 DMP程序 但是程序下载到单片机后 一直是dmp_load_motion_driver_firmware() 这个函数不能初始化错误dmp_load_motion_driver_firmware come across error ......
我将错误信息传到串口助手发现返回错误号为-2,查看inv_mpu.c库里面确定是这一句返回的
if (memcmp(firmware+ii, cur, this_write));
return -2;
还望论坛里的大大们帮帮忙 给小弟指点迷津
开发环境使用的是MDK 本帖最后由 NJ8888 于 2013-8-20 21:18 编辑
比较不等的错,通常用数字示波器能排除问题,你写入和读出分别输出到串口,我开始也错,经断点看是移植时写错,把地址当内容送到6050里,读出校验当然不对 NJ8888 发表于 2013-8-20 21:15 static/image/common/back.gif
比较不等的错,通常用数字示波器能排除问题,你写入和读出分别输出到串口,我开始也错,经断点看是移植时写 ...
哎 我属于屌丝级别的 没有示波器 不过我正在仔细看我移植的代码 很有可能是哪里弄错了
谢谢nj8888 for (ii = 0; ii < length; ii += this_write) {
this_write = min(LOAD_CHUNK, length - ii);
if (mpu_write_mem(ii, this_write, (unsigned char*)&firmware))
return -1;
delay_ms(2);
if (mpu_read_mem(ii, this_write, cur))
return -1;
if (memcmp(firmware+ii, cur, this_write))
return -2;
delay_ms(2);
}
这样 加个延时 wangjt1988 发表于 2013-8-20 22:15 static/image/common/back.gif
for (ii = 0; ii < length; ii += this_write) {
this_write = min(LOAD_CHUNK, length - ii); ...
好像也不行
我将程序运行时的firmware和cur的发回到串口 发现在第一次循环就出现错误了 因为第一次循环firmware的值为0x00,cur的值为0x25 就跳出循环了 返回错误-2 看看iic多字节写入函数移植是否正常。 qwe2231695 发表于 2013-8-21 20:53 static/image/common/back.gif
看看iic多字节写入函数移植是否正常。
是正确的 我用ds3231测试的,写入十组数 然后读出都是正确的啊 看看i2c地址对不对,d0,d2 ronic 发表于 2013-8-23 16:21 static/image/common/back.gif
看看i2c地址对不对,d0,d2
i2c地址是对的,因为都能读到mpu6050的who am i 的值 没示波器确实悲剧 已经搞好了 谢谢大家的帮忙 主要出问题的地方是就是qwe2231695说的连续些操作出现了问题
dcl_yufeimen 发表于 2013-8-24 21:49
已经搞好了 谢谢大家的帮忙 主要出问题的地方是就是qwe2231695说的连续些操作出现了问题
...
我想问下怎么样式连续操作出现问题呢?? Free_man 发表于 2014-8-14 15:01
我想问下怎么样式连续操作出现问题呢??
当时是I2C 写多字节函数有一个小bug dcl_yufeimen 发表于 2014-8-14 21:45
当时是I2C 写多字节函数有一个小bug
你好,请问你的BUG是个什么问题,我也在这个地方卡了好久了,求指教啊,不甚感激!!!! 楼主能把出错的函数发出来吗?
急!! dcl_yufeimen 发表于 2014-8-14 21:45
当时是I2C 写多字节函数有一个小bug
有没有试过fifo溢出 NJ8888 发表于 2013-8-24 19:10
没示波器确实悲剧
有没有试过fifo溢出的情况呢
?? Free_man 发表于 2014-8-15 14:35
有没有试过fifo溢出的情况呢
??
没有试过fifo溢出情况 主要后来觉得DMP的Z轴漂移太大 就没使用了 jelick 发表于 2014-8-14 23:17
楼主能把出错的函数发出来吗?
急!!
程序就在楼主位啊 你下载看呗 zhan278047442 发表于 2014-8-14 23:08
你好,请问你的BUG是个什么问题,我也在这个地方卡了好久了,求指教啊,不甚感激!!!! ...
我记得是当时等待标志位写错了 楼主位的程序 你看看吧 时间太久忘了 dcl_yufeimen 发表于 2014-8-15 21:39
我记得是当时等待标志位写错了 楼主位的程序 你看看吧 时间太久忘了
好的,谢谢了! dcl_yufeimen 发表于 2014-8-15 21:32
没有试过fifo溢出情况 主要后来觉得DMP的Z轴漂移太大 就没使用了
为什么z轴会漂移那么厉害呢
我认为是系统时钟的设置太高的原因,你可以把IIC初始化的时钟总线往下调试试
Free_man 发表于 2014-8-18 10:30
为什么z轴会漂移那么厉害呢
没有仔细研究了 DMP本来就是人家的东西 就是个黑盒,资料太少了,还不如自己融合的好 谢谢,我也出现了这个问题,根据大家的思路再次对我的代码进行审查,发现iic多字节读取没问题,但是问题确实是在这个地方(就是用了一个DMP提供的swap函数,但是并没用他提供的iic函数,导致被坑。哈哈,其实是自己水。)。以后大家如果出了这个问题,多看看是不是iic的问题。
即使你可以用iic进行通讯,但这不代表多字节的读取没有问题! 麻烦问下,用DMP的同时能不能读出陀螺仪的值??
页:
[1]