极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13342|回复: 4

MPU6050的 I2C dmp

[复制链接]
发表于 2013-6-5 15:39:47 | 显示全部楼层 |阅读模式
  
   看了invensense官网的 MPU6050的specification:  PS-MPU-6000A.pdf , 给出读写I2C时序如下

写函数,及写时序
  writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data);
        

读函数,及读时序:
readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout);

            


6050的寄存器都是 单字节的, 如果连续读2个BYTE的话,应该是读到了 regAddr 和 regAddr+1 两个BYTE.

但是在  dmpInitialize() 函数里面, 因为要把好多 代码 写入到 6050里面去, 这里的I2C读写地址空间是咋么个样子呢? 有人知道吗?

    dmpInitialize() 调用了函数 I2Cdev::writeByes(advAddr, MPU6050_RA_MEM_R_W, chunkSize, progBuffer )
其中 宏MPU6050_RA_MEM_R_W ==  0x6F,chunkSize是数据块的大小,DEBUG跟了下,好像是把数据块分成多个16字节大小写入。
    这时的I2C不可能写入寄存器空间: 0x6F, 0x70, 0x71, ...  ;    因为0x75就是 WHO AM I 寄存器了
    那又是那个空间呢?

   期待大侠给指点指点

   
回复

使用道具 举报

 楼主| 发表于 2013-6-5 16:49:41 | 显示全部楼层
MPU6050的下面的寄存器

#define MPU6050_RA_BANK_SEL                0x6D
#define MPU6050_RA_MEM_START_ADDR   0x6E
#define MPU6050_RA_MEM_R_W               0x6F

应该是和 write prog Memory Block 相关的吧
回复 支持 反对

使用道具 举报

发表于 2013-6-5 17:14:46 | 显示全部楼层
先在 0x6D 写块号(0-7),选择块,然后在 0x6E 写地址 (0x00-0xff) , 然后反复取数据写到 0x6f 里,数据就进了 Memory,每写一个数,地址(0x6e)就自动加1 。楼主把寄存器和memory地址搞混了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-5 17:27:39 | 显示全部楼层
明白了,哥们说的非常对。

我自己写了个I2C读写, 一次只能写一个BYTE。 现在正在尝试改写 文件 I2Cdev , 完成后就应该就可以实现 DMP 移植了。

谢谢 catluoq
回复 支持 反对

使用道具 举报

发表于 2014-6-13 09:35:15 | 显示全部楼层
楼主成功没有?写入的时候,我感觉成功了,但读FIFO数值时,也有值的!但是但是,读到的DMP数据全是0......
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 10:35 , Processed in 0.059849 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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