OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7787|回复: 20

MUP6050加载DMP固件失败

[复制链接]

3

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2015-2-28
在线时间
29 小时
发表于 2016-10-27 09:02:14 | 显示全部楼层 |阅读模式
5金钱
MUP6050加载DMP固件失败
unsigned char mpu_dmp_init(void)
{
        u8 res=0;
        IIC_InitPort();
        if(mpu_init()==0)        //初始化MPU6050
        {         
                res=mpu_set_sensors(INV_XYZ_GYRO|INV_XYZ_ACCEL);//设置所需要的传感器
                if(res)return 1;
                res=mpu_configure_fifo(INV_XYZ_GYRO|INV_XYZ_ACCEL);//设置FIFO
                if(res)return 2;
                res=mpu_set_sample_rate(DEFAULT_MPU_HZ);        //设置采样率
                if(res)return 3;
                res=dmp_load_motion_driver_firmware();                //加载dmp固件
                if(res)return 4;
                res=dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation));//设置陀螺仪方向
                if(res)return 5;
                res=dmp_enable_feature(DMP_FEATURE_6X_LP_QUAT|DMP_FEATURE_TAP|        //设置dmp功能
                    DMP_FEATURE_ANDROID_ORIENT|DMP_FEATURE_SEND_RAW_ACCEL|DMP_FEATURE_SEND_CAL_GYRO|
                    DMP_FEATURE_GYRO_CAL);
                if(res)return 6;
                res=dmp_set_fifo_rate(DEFAULT_MPU_HZ);        //设置DMP输出速率(最大不超过200Hz)
                if(res)return 7;   
                res=run_self_test();                //自检  
                if(res)return 8;   
                res=mpu_set_dmp_state(1);        //使能DMP
                if(res)return 9;     
        }else return 10;
        return 0;
}


当程序跑到res=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[ii]))
            return -1;
        if (mpu_read_mem(ii, this_write, cur))
            return -1;
        if (memcmp(firmware+ii, cur, this_write))
                {
                        printf("ii = 0x%x\n",ii);
                        return -2;
                }
    }


串口助手打印如下图,每次上电或复位时都这样。希望大神帮忙解决一下。
QQ截图20161026191014.png

最佳答案

查看完整内容[请看2#楼]

已解决,原来AD0脚的电阻虚焊了。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2015-2-28
在线时间
29 小时
 楼主| 发表于 2016-10-27 09:02:15 | 显示全部楼层
本帖最后由 星空旅行者 于 2016-10-27 09:32 编辑

已解决,原来AD0脚的电阻虚焊了。。。
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-10-31
在线时间
4 小时
发表于 2016-10-31 12:13:08 | 显示全部楼层
星空旅行者 发表于 2016-10-27 09:02
已解决,原来AD0脚的电阻虚焊了。。。

你好~~请教你个问题哈~~我是用LPC1788来开发MPU6050的~~然后初试话MPU_DMP时候也出现了加载DMP固件失败的情况~~请问你连接的MPU6050的都是哪些引脚??
我只用了其中四个引脚:vcc、gnd、sda、scl。其他的都事空闲着的~~对吗这样?为啥你会用到AD0引脚呢??在线求解~~~~
回复

使用道具 举报

3

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2015-2-28
在线时间
29 小时
 楼主| 发表于 2016-10-31 15:39:01 | 显示全部楼层
艾蒂尔 发表于 2016-10-31 12:13
你好~~请教你个问题哈~~我是用LPC1788来开发MPU6050的~~然后初试话MPU_DMP时候也出现了加载DMP固件失败的 ...

“MPU6050.h”文件中有下面一段

//如果AD0脚(9脚)接地,IIC地址为0X68(不包含最低位).
//如果接V3.3,则IIC地址为0X69(不包含最低位).
#define MPU_ADDR                                0X68

////因为模块AD0默认接GND,所以转为读写地址后,为0XD1和0XD0(如果接VCC,则为0XD3和0XD2)  
//#define MPU_READ    0XD1
//#define MPU_WRITE   0XD0




所以AD0脚必须接的,可以串联10K电阻接地,或接3.3V。
clipboard.png
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-10-31
在线时间
4 小时
发表于 2016-10-31 23:23:48 | 显示全部楼层
星空旅行者 发表于 2016-10-31 15:39
“MPU6050.h”文件中有下面一段

//如果AD0脚(9脚)接地,IIC地址为0X68(不包含最低位).

就是说如果你把AD09引脚断开的话也会使得固件加载不成功吗??还有为啥还要串联一个10k的电阻,直接接地不行吗?
回复

使用道具 举报

3

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2015-2-28
在线时间
29 小时
 楼主| 发表于 2016-11-1 15:37:18 | 显示全部楼层
本帖最后由 星空旅行者 于 2016-11-1 15:43 编辑
艾蒂尔 发表于 2016-10-31 23:23
就是说如果你把AD09引脚断开的话也会使得固件加载不成功吗??还有为啥还要串联一个10k的电阻,直接接地 ...

AD0 的作用:I2C 通讯中从机是要有地址的,以区别多个从机。当 AD0 管脚接低电平的时候,从机地址是 0xD0。从 MPU6050 的寄存器中我们可以得到答案,MPU6050 作为一个 IIC 从机设备的时候,有 8 位地址,高7 位的地址是固定的,就是 WHO AM I 寄存器的默认——0x68,最低的一位是由 AD0 的连线决定的。
QQ截图20161101153700.png
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-10-31
在线时间
4 小时
发表于 2016-11-1 22:54:28 | 显示全部楼层
星空旅行者 发表于 2016-11-1 15:37
AD0 的作用:I2C 通讯中从机是要有地址的,以区别多个从机。当 AD0 管脚接低电平的时候,从机地址是 0xD0 ...

恩恩~~但是现在遇到的问题是 if (memcmp(firmware+ii, cur, this_write)) 会返回-2~~不经意间看到楼主也遇到了这个问题呢~~在这个帖子里:http://www.openedv.com/posts/list/38840.htm~~好巧啊~~哈哈~~
楼主这个问题现在解决了吗??
回复

使用道具 举报

3

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2015-2-28
在线时间
29 小时
 楼主| 发表于 2016-11-2 09:43:43 | 显示全部楼层
艾蒂尔 发表于 2016-11-1 22:54
恩恩~~但是现在遇到的问题是 if (memcmp(firmware+ii, cur, this_write)) 会返回-2~~不经意间看到楼主也 ...

我就是AD0脚的电阻虚焊啊,重新焊好就OK了!
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-10-31
在线时间
4 小时
发表于 2016-11-2 10:05:43 | 显示全部楼层
今早调通了~~加载DMP成功了已经~~后面主函数MPU6050_Pose(Pose,Gyro,Accel);还有问题~~
原因找到了~~就是I2C读写要先成功读写~~就可以调通DMP基本上~~
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-10-31
在线时间
4 小时
发表于 2016-11-2 10:14:56 | 显示全部楼层
哈哈~~已经成功调出来三个角度了~~我再检验下准确度如何~~
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2016-1-28
在线时间
36 小时
发表于 2016-11-22 13:46:50 | 显示全部楼层
艾蒂尔 发表于 2016-11-2 10:05
今早调通了~~加载DMP成功了已经~~后面主函数MPU6050_Pose(Pose,Gyro,Accel);还有问题~~
原因找到了~~就是I ...

调用MPU初始化时已经完成I2C成功读写,但还是不能成功加载
回复

使用道具 举报

34

主题

283

帖子

0

精华

高级会员

Rank: 4

积分
739
金钱
739
注册时间
2015-11-15
在线时间
226 小时
发表于 2016-12-29 21:45:03 | 显示全部楼层
艾蒂尔 发表于 2016-11-2 10:05
今早调通了~~加载DMP成功了已经~~后面主函数MPU6050_Pose(Pose,Gyro,Accel);还有问题~~
原因找到了~~就是I ...

你的 是什么情况,我目前是加载固件失败,
与其感慨路难行,不如马上出发
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2016-11-4
在线时间
9 小时
发表于 2017-3-19 18:12:22 | 显示全部楼层
xueshawu 发表于 2016-12-29 21:45
你的 是什么情况,我目前是加载固件失败,

你解决了吗 可否分享经验
回复

使用道具 举报

34

主题

283

帖子

0

精华

高级会员

Rank: 4

积分
739
金钱
739
注册时间
2015-11-15
在线时间
226 小时
发表于 2017-3-20 09:33:18 | 显示全部楼层
逍遥不记年 发表于 2017-3-19 18:12
你解决了吗 可否分享经验

我已经解决了,时间久远;
我当时遇到两个问题;
1、加载固件失败      方法:初始化的时候要把模块放水平
2、读FIFO失败         方法:读不到,说明读的太快(至少我是这样),等待读取就行
与其感慨路难行,不如马上出发
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2016-11-4
在线时间
9 小时
发表于 2017-3-20 15:04:38 | 显示全部楼层
xueshawu 发表于 2017-3-20 09:33
我已经解决了,时间久远;
我当时遇到两个问题;
1、加载固件失败      方法:初始化的时候要把模块放 ...

是9250的FIFO?
回复

使用道具 举报

34

主题

283

帖子

0

精华

高级会员

Rank: 4

积分
739
金钱
739
注册时间
2015-11-15
在线时间
226 小时
发表于 2017-3-20 22:00:38 | 显示全部楼层

MPU6050
与其感慨路难行,不如马上出发
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2016-11-4
在线时间
9 小时
发表于 2017-3-21 09:48:59 | 显示全部楼层

假如方便 麻烦具体指教一下FIFO 我估计也这里错了 ,可以正确读ID的
回复

使用道具 举报

32

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2015-11-19
在线时间
38 小时
发表于 2017-4-6 10:04:08 | 显示全部楼层
艾蒂尔 发表于 2016-11-2 10:14
哈哈~~已经成功调出来三个角度了~~我再检验下准确度如何~~

你好,请问一下你是怎么解决dmp加载失败这个问题的?谢谢
回复

使用道具 举报

32

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2015-11-19
在线时间
38 小时
发表于 2017-4-6 11:09:59 | 显示全部楼层
艾蒂尔 发表于 2016-11-2 10:05
今早调通了~~加载DMP成功了已经~~后面主函数MPU6050_Pose(Pose,Gyro,Accel);还有问题~~
原因找到了~~就是I ...

你好,你说的i2c要先成功读写是什么意思??
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2017-2-8
在线时间
18 小时
发表于 2017-12-4 17:11:16 | 显示全部楼层
同加载不了固件
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2018-10-20
在线时间
1 小时
发表于 2018-10-20 23:29:26 | 显示全部楼层
加载不了固件,求解答,,,,你们说的解决方案好像不一样,我用的是mpu9250
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 22:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表