OpenEdv-开源电子网

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

MUP6050实验加载DMP固件失败

[复制链接]

172

主题

539

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3449
金钱
3449
注册时间
2015-10-5
在线时间
492 小时
发表于 2016-8-27 17:17:09 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 飞过漠北的蓝天 于 2016-8-29 10:24 编辑

MUP6050实验加载DMP固件失败
移植的mini板的程序
u8 mpu_dmp_init(void)
{
        u8 res=0;
        MPU_IIC_Init();         
        if(mpu_init()==0)        
        {         
                res=mpu_set_sensors(INV_XYZ_GYRO|INV_XYZ_ACCEL);
                if(res)
                        return 1;
                res=mpu_configure_fifo(INV_XYZ_GYRO|INV_XYZ_ACCEL);
                if(res)
                        return 2;
                res=mpu_set_sample_rate(DEFAULT_MPU_HZ);        
                if(res)
                        return 3;
                res=dmp_load_motion_driver_firmware();               
                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_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);        
                if(res)return 7;   
                res=run_self_test();               
                if(res)return 8;   
                res=mpu_set_dmp_state(1);        
                if(res)return 9;     
        }else return 10;
        return 0;
}

当程序跑到res=dmp_load_motion_driver_firmware();时就出错了,加载固件失败,
MPU6050是没有问题的,完全移植的MINI板的MPU6050的程序,单片机也是一样的
编译器没有报错,程序死在了这里,有人遇到过吗??
哪位大神帮帮我啊?谢谢了
下图是MPU6050的电路图和与STM32F103RC的连接图

猎豹截图20160829102144.png
猎豹截图20160829102253.png

最佳答案

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

我也遇到过这问题,当初查的原因是在加载固件时被中断打断了,导致I2C通信失败,解决办法是把所有中断给禁了完事后再打开,完美解决。
认真做好笔记....
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-8-27 17:17:10 | 显示全部楼层
我也遇到过这问题,当初查的原因是在加载固件时被中断打断了,导致I2C通信失败,解决办法是把所有中断给禁了完事后再打开,完美解决。
回复

使用道具 举报

172

主题

539

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3449
金钱
3449
注册时间
2015-10-5
在线时间
492 小时
 楼主| 发表于 2016-8-27 17:19:43 | 显示全部楼层
我用的ST Link仿真,会有影响吗
认真做好笔记....
回复

使用道具 举报

172

主题

539

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3449
金钱
3449
注册时间
2015-10-5
在线时间
492 小时
 楼主| 发表于 2016-8-29 09:37:49 | 显示全部楼层
xkwy 发表于 2016-8-27 17:17
我也遇到过这问题,当初查的原因是在加载固件时被中断打断了,导致I2C通信失败,解决办法是把所有中断给禁 ...

不是这个原因,没有用到中断,连串口我都没有用,在res=dmp_load_motion_driver_firmware();        ,在检查DMP固件的时候出的错,我用STLINK仿真时提示的是程序死在了int mpu_load_firmware(unsigned short length, const unsigned char *firmware,
    unsigned short start_addr, unsigned short sample_rate),,里的        if (memcmp(firmware+ii, cur, this_write))
            return -2;位置,这里是没有用到I2C的,所以也可以排除是因为I2C通信时的故障,
认真做好笔记....
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-8-29 19:43:35 | 显示全部楼层
飞过漠北的蓝天 发表于 2016-8-29 09:37
不是这个原因,没有用到中断,连串口我都没有用,在res=dmp_load_motion_driver_firmware();        ,在检查DMP ...

怎么会死在这句话里。。。最多校验失败直接返回了吧

怀疑memcmp函数出问题的话,可以自己写一个,替换一下
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

3

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2015-2-28
在线时间
29 小时
发表于 2016-10-26 19:12:23 | 显示全部楼层
本帖最后由 星空旅行者 于 2016-10-26 19:14 编辑

请问,解决了吗?我也遇到这种问题,
if (memcmp(firmware+ii, cur, this_write))
{
        printf("ii = 0x%x\n",ii);
        return -2;
}

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


QQ截图20161026191014.png
回复

使用道具 举报

172

主题

539

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3449
金钱
3449
注册时间
2015-10-5
在线时间
492 小时
 楼主| 发表于 2016-10-27 17:56:21 | 显示全部楼层
星空旅行者 发表于 2016-10-26 19:12
请问,解决了吗?我也遇到这种问题,
if (memcmp(firmware+ii, cur, this_write))
{

还是没有解决,我解决了在告诉你吧
认真做好笔记....
回复

使用道具 举报

172

主题

539

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3449
金钱
3449
注册时间
2015-10-5
在线时间
492 小时
 楼主| 发表于 2016-10-27 17:56:23 | 显示全部楼层
星空旅行者 发表于 2016-10-26 19:12
请问,解决了吗?我也遇到这种问题,
if (memcmp(firmware+ii, cur, this_write))
{

还是没有解决,我解决了在告诉你吧
认真做好笔记....
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2016-11-4
在线时间
9 小时
发表于 2017-3-19 18:21:09 | 显示全部楼层
飞过漠北的蓝天 发表于 2016-10-27 17:56
还是没有解决,我解决了在告诉你吧

解决了吗 兄弟
回复

使用道具 举报

37

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2016-6-10
在线时间
191 小时
发表于 2017-3-19 18:59:53 | 显示全部楼层
我也尝试移植过,出现莫名其妙的bug,搞了两天,无解,我换成数据融合的了
回复

使用道具 举报

172

主题

539

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3449
金钱
3449
注册时间
2015-10-5
在线时间
492 小时
 楼主| 发表于 2017-3-20 10:09:45 | 显示全部楼层
周亚龙 发表于 2017-3-19 18:59
我也尝试移植过,出现莫名其妙的bug,搞了两天,无解,我换成数据融合的了

我的是电路没弄好的原因,你检测一下电路
认真做好笔记....
回复

使用道具 举报

172

主题

539

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3449
金钱
3449
注册时间
2015-10-5
在线时间
492 小时
 楼主| 发表于 2017-3-20 10:10:07 | 显示全部楼层

我的是电路没弄好的原因,你检测一下电路
认真做好笔记....
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2016-11-4
在线时间
9 小时
发表于 2017-3-20 14:03:39 | 显示全部楼层
飞过漠北的蓝天 发表于 2017-3-20 10:10
我的是电路没弄好的原因,你检测一下电路

我完全不知道原因 ID读出来 0x73   
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-4-2
在线时间
10 小时
发表于 2019-6-8 11:55:31 | 显示全部楼层
我也卡在了相同的地方了
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2022-2-15
在线时间
2 小时
发表于 2022-4-21 01:41:28 | 显示全部楼层
只要是设置有问题,就让他不断循环设置就行,用while 语句判断,只要不为真就循环,直到完成,我用这个办法就解决了,如:
while(dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation))!=0)
回复

使用道具 举报

7

主题

61

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2016-3-1
在线时间
76 小时
发表于 2024-5-26 10:03:24 | 显示全部楼层
优秀优秀,这个刷固件库还是费了点时间的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 11:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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