dcl_yufeimen 发表于 2013-8-20 21:11:47

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:15:41

本帖最后由 NJ8888 于 2013-8-20 21:18 编辑

比较不等的错,通常用数字示波器能排除问题,你写入和读出分别输出到串口,我开始也错,经断点看是移植时写错,把地址当内容送到6050里,读出校验当然不对

dcl_yufeimen 发表于 2013-8-20 21:23:01

NJ8888 发表于 2013-8-20 21:15 static/image/common/back.gif
比较不等的错,通常用数字示波器能排除问题,你写入和读出分别输出到串口,我开始也错,经断点看是移植时写 ...

哎 我属于屌丝级别的 没有示波器 不过我正在仔细看我移植的代码 很有可能是哪里弄错了
谢谢nj8888

wangjt1988 发表于 2013-8-20 22:15:43

    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);
    }



这样   加个延时

dcl_yufeimen 发表于 2013-8-21 20:16:30

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

qwe2231695 发表于 2013-8-21 20:53:05

看看iic多字节写入函数移植是否正常。

dcl_yufeimen 发表于 2013-8-21 22:12:47

qwe2231695 发表于 2013-8-21 20:53 static/image/common/back.gif
看看iic多字节写入函数移植是否正常。

是正确的 我用ds3231测试的,写入十组数 然后读出都是正确的啊

ronic 发表于 2013-8-23 16:21:51

看看i2c地址对不对,d0,d2

dcl_yufeimen 发表于 2013-8-24 18:06:46

ronic 发表于 2013-8-23 16:21 static/image/common/back.gif
看看i2c地址对不对,d0,d2

i2c地址是对的,因为都能读到mpu6050的who am i 的值

NJ8888 发表于 2013-8-24 19:10:44

没示波器确实悲剧

dcl_yufeimen 发表于 2013-8-24 21:49:47

已经搞好了 谢谢大家的帮忙 主要出问题的地方是就是qwe2231695说的连续些操作出现了问题

Free_man 发表于 2014-8-14 15:01:37

dcl_yufeimen 发表于 2013-8-24 21:49
已经搞好了 谢谢大家的帮忙 主要出问题的地方是就是qwe2231695说的连续些操作出现了问题
...

我想问下怎么样式连续操作出现问题呢??

dcl_yufeimen 发表于 2014-8-14 21:45:01

Free_man 发表于 2014-8-14 15:01
我想问下怎么样式连续操作出现问题呢??

当时是I2C 写多字节函数有一个小bug

zhan278047442 发表于 2014-8-14 23:08:09

dcl_yufeimen 发表于 2014-8-14 21:45
当时是I2C 写多字节函数有一个小bug

你好,请问你的BUG是个什么问题,我也在这个地方卡了好久了,求指教啊,不甚感激!!!!

jelick 发表于 2014-8-14 23:17:46

楼主能把出错的函数发出来吗?
急!!

Free_man 发表于 2014-8-15 13:04:39

dcl_yufeimen 发表于 2014-8-14 21:45
当时是I2C 写多字节函数有一个小bug

有没有试过fifo溢出

Free_man 发表于 2014-8-15 14:35:00

NJ8888 发表于 2013-8-24 19:10
没示波器确实悲剧

有没有试过fifo溢出的情况呢
??

dcl_yufeimen 发表于 2014-8-15 21:32:22

Free_man 发表于 2014-8-15 14:35
有没有试过fifo溢出的情况呢
??

没有试过fifo溢出情况 主要后来觉得DMP的Z轴漂移太大 就没使用了

dcl_yufeimen 发表于 2014-8-15 21:32:57

jelick 发表于 2014-8-14 23:17
楼主能把出错的函数发出来吗?
急!!

程序就在楼主位啊 你下载看呗

dcl_yufeimen 发表于 2014-8-15 21:39:07

zhan278047442 发表于 2014-8-14 23:08
你好,请问你的BUG是个什么问题,我也在这个地方卡了好久了,求指教啊,不甚感激!!!! ...

我记得是当时等待标志位写错了 楼主位的程序 你看看吧 时间太久忘了

Free_man 发表于 2014-8-18 09:54:02

dcl_yufeimen 发表于 2014-8-15 21:39
我记得是当时等待标志位写错了 楼主位的程序 你看看吧 时间太久忘了

好的,谢谢了!

Free_man 发表于 2014-8-18 10:30:17

dcl_yufeimen 发表于 2014-8-15 21:32
没有试过fifo溢出情况 主要后来觉得DMP的Z轴漂移太大 就没使用了

为什么z轴会漂移那么厉害呢

127 发表于 2014-8-18 19:23:41

我认为是系统时钟的设置太高的原因,你可以把IIC初始化的时钟总线往下调试试

dcl_yufeimen 发表于 2014-8-18 20:25:41

Free_man 发表于 2014-8-18 10:30
为什么z轴会漂移那么厉害呢

没有仔细研究了 DMP本来就是人家的东西 就是个黑盒,资料太少了,还不如自己融合的好

tangyutao1990 发表于 2014-8-28 20:54:49

谢谢,我也出现了这个问题,根据大家的思路再次对我的代码进行审查,发现iic多字节读取没问题,但是问题确实是在这个地方(就是用了一个DMP提供的swap函数,但是并没用他提供的iic函数,导致被坑。哈哈,其实是自己水。)。以后大家如果出了这个问题,多看看是不是iic的问题。
即使你可以用iic进行通讯,但这不代表多字节的读取没有问题!

Yanise 发表于 2014-10-23 15:16:55

麻烦问下,用DMP的同时能不能读出陀螺仪的值??
页: [1]
查看完整版本: MPU6050的DMP初始化错误