zhan278047442 发表于 2014-8-15 22:12:10

DMP移植dmp_load_motion_driver_firmware错误大揭密!

   相信很多人在移植DMP时都卡在了dmp_load_motion_driver_firmware这个函数的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;
      if (mpu_read_mem(ii, this_write, cur))
            return -1;
      if (memcmp(firmware+ii, cur, this_write))
            return -2;
    }这个地方错误了。这个地方真的很坑!!!
论坛里面的大神们都说是IIC读写的问题,很多人都去测试自己的IIC读写,发现根本没有问题,放在这里就是不行,特别是那些不是用软件模拟的IIC更会出现这个问题,这里告诉你们你们IIC没有问题,这个DMP库也没有问题,问题是我们自己没有高清6050刷固件读写寄存器。


很明显上面的函数是先写再读再比较,但注意if (i2c_write(st.hw->addr, st.reg->mem_r_w, length, data))这个 st.reg->mem_r_w地址是固定的不管前面的ii(循环写的次数)是0还是16还是32,每次写的地址都是 st.reg->mem_r_w这个固定的值,就是说MPU6050刷固件的这个地址st.reg->mem_r_w寄存器斌不一定是起始地址,可能在只是个6050的IIC接收器,然后再转给别的地址,因为没有手册,也不确定,实验过每次只读这一个地址寄存器每次的值不一样。

这样问题就出来了,如果你的IIC写函数不能一次连续写16个数,而是采取分了几次写,然后把st.reg->mem_r_w当成起始地址在上面加上你分段的次数形成新的地址再写,这样你写到6050里面肯定不是应该写到的地址。所以你必须把 st.reg->mem_r_w这个地址当成一个6050的IIc接受寄存器来看待才行,但本人也试验过一直只向 st.reg->mem_r_w这个地址分几次写完16个数据,读出来还是不正确,猜测可能是接收器不只这一个地址可能还有 st.reg->mem_r_w+1或者更多,最后必须改成一次向里面写16个数据才行,而且你们看看那那个刷固件的大数组,看出应该是没16个数据一个bank什么的。

以上只是个人经历,没有很确定的结论,但希望能帮到大家!!(本人用的dsp,iic不需要用软件模拟,所以发现上面问题,现在已经完成DMP初始化,可读出正确数据)

zhan278047442 发表于 2014-8-15 22:13:01

如果大家觉得上面的信息有用,请顶贴让更多人看到!

backlaneboy 发表于 2014-8-16 00:12:37

楼主我想问一下怎么看懂DMP里面的函数?

zhan278047442 发表于 2014-8-16 09:26:19

backlaneboy 发表于 2014-8-16 00:12
楼主我想问一下怎么看懂DMP里面的函数?

要是说想完全看懂里面的函数,还没那个能力,只能根据他的英文注释和用法来估计一下。

EngKing 发表于 2014-8-16 11:16:14

楼主,能否贴上驱动例程(DSP的驱动),谢谢
最近驱动成功,但是卡在这个函数了

左侧右侧 发表于 2014-8-17 10:40:18

{:smile:}{:smile:}{:smile:}

xuxiang10 发表于 2014-8-18 09:49:42

顶一下,同求。。。

backlaneboy 发表于 2014-8-18 11:19:03

楼主怎么用DMP读出三轴加速度?

huang_4115 发表于 2014-8-18 14:42:19

帮顶一下

默默七 发表于 2014-8-18 15:23:38

DMP库还是很好移的,自己的IIC代码跟DMP的read\write函数对上就好了。
但是四轴用DMP更新太慢,不推荐

firstzys 发表于 2014-8-19 10:55:23

楼上不用DMP,用的什么方法?

涵潇舒雅 发表于 2015-7-27 18:37:36

读了两遍没有看出楼主改的哪里,是我错过啥了吗?

china97wan 发表于 2016-6-18 15:08:51

请教一下楼主,如果不能一次写16字节这个问题该怎么解决呢,在线等 很急

木君之上 发表于 2016-6-22 20:56:53

我的103程序移植好了再移植到407上就gg了,后来发现无法写,只能读,最近还在调试中
页: [1]
查看完整版本: DMP移植dmp_load_motion_driver_firmware错误大揭密!