OpenEdv-开源电子网

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

mpu9250 + spi + dmp ,dmp移植出错

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2015-9-11
在线时间
0 小时
发表于 2015-9-11 22:26:17 | 显示全部楼层 |阅读模式
5金钱
各路好汉~
      兄弟用STM32F407ZGT的开发板,spi方式,读取到了mpu9250的原始数据,然后想使用dmp(运动数字处理引擎),于是把原子哥读取6050数据的源程序中的dmp部分移植过来,然而源程序中inv_mpu.c文件支持的是I2C方式,我对I2C也不是很了解,所以出现了问题:
      现在没把握的是:我用spi读数据的函数直接替换用i2c读取数据的函数,少用了一个参数addr,不知道有问题没有?(函数对比见下图)
[mw_shl_code=c,true]//spi方式,从寄存器reg中读一个长度为len的数据,存放在buf中 u8 MPU_Read_Len(u8 reg,u8 len,u8 *buf) { u8 i; MPU_9250_ENABLE; SPI2_ReadWriteByte(reg|0x80); //发送读命令+寄存器号 for(i=0;i<len;i++) //一共读取len字节数据 { buf=SPI2_ReadWriteByte(0xff); //循环读取 } MPU_9250_DISENABLE; return 0; }[/mw_shl_code]

[mw_shl_code=c,true]//IIC方式,原子哥的程序 //addr:器件地址,比spi多的一个参数 //reg:寄存器号 //len:长度 //buf:数据存储区 u8 MPU_Read_Len(u8 addr,u8 reg,u8 len,u8 *buf) { IIC_Start(); IIC_Send_Byte((addr<<1)|0);//发送器件地址+写命令 if(IIC_Wait_Ack()) //等待应答 { IIC_Stop(); return 1; } IIC_Send_Byte(reg); //写寄存器地址 IIC_Wait_Ack(); //等待应答 IIC_Start(); IIC_Send_Byte((addr<<1)|1);//发送器件地址+读命令 IIC_Wait_Ack(); //等待应答 while(len) { if(len==1)*buf=IIC_Read_Byte(0);//读数据,发送nACK else *buf=IIC_Read_Byte(1); //读数据,发送ACK len--; buf++; } IIC_Stop(); //产生一个停止条件 return 0; }[/mw_shl_code]

     请教:
1、什么叫器件地址,为什么在spi中少了一个参数?
2、谁知道怎么把dmp在spi的方式下移植到mpu9250中?
谢过

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2015-9-11 23:25:50 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2013-12-24
在线时间
93 小时
发表于 2016-10-18 18:00:22 | 显示全部楼层
LZ问题解决了吗?我现在也在尝试用SPI读取9250的dmp数据
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2016-5-18
在线时间
20 小时
发表于 2016-12-15 23:09:27 | 显示全部楼层
兄弟能发一下SPI读取mpu9250的程序吗

回复

使用道具 举报

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2016-10-15
在线时间
47 小时
发表于 2017-11-27 11:46:32 | 显示全部楼层
最近在搞这块,spi方式搞得我头都大了
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2017-11-27 20:33:55 | 显示全部楼层
参考这个帖子:
http://openedv.com/thread-74298-1-1.html

应当说明,使用SPI读写MPU9250的DMP的话,你不仅需要重写官方库提供的IIC读写函数,还要使能IIC主机,将磁力计挂在IIC主机上。(虽然DMP数据融合并没有使用磁力计数据)。
十六进制带我飞。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2018-10-26
在线时间
1 小时
发表于 2018-10-26 14:10:00 | 显示全部楼层
请问楼主现在成功了吗?
回复

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2019-1-30
在线时间
74 小时
发表于 2019-11-14 22:58:45 | 显示全部楼层
SPI方式通过片选方式选择器件,不需要addr字节;只需要实现底层函数read write函数就可以了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-15 13:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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