OpenEdv-开源电子网

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

MPU6050读FIFO错误

[复制链接]

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2018-4-8
在线时间
10 小时
发表于 2018-4-24 15:42:15 | 显示全部楼层 |阅读模式
1金钱
在实际调试中发现,当我快速摇晃MPU6050的时候,MPU会卡住,读不出数据,经过跟踪,发现fifo_count 一直小于length,一直在打印fifo_count < length,不知道是否有人遇到这个问题,帮忙解答一下,这是什么情况
[mw_shl_code=applescript,true]int mpu_read_fifo_stream(unsigned short length, unsigned char *data,
    unsigned char *more)
{
    unsigned char tmp[2];
    unsigned short fifo_count;
    if (!st.chip_cfg.dmp_on)
    {
        printf("st.chip_cfg.dmp_on\r\n");
        return -1;
    }
    if (!st.chip_cfg.sensors)
    {
        printf("st.chip_cfg.sensors\r\n");
        return -1;
    }

    if (i2c_read(st.hw->addr, st.reg->fifo_count_h, 2, tmp))
    {
        printf("i2c_read(st.hw->addr, st.reg->fifo_count_h, 2, tmp)\r\n");
        return -1;
    }
    fifo_count = (tmp[0] << 8) | tmp[1];
    if (fifo_count < length) {
        more[0] = 0;
        printf("fifo_count < length\r\n");
        return -1;
    }
    if (fifo_count > (st.hw->max_fifo >> 1)) {
        /* FIFO is 50% full, better check overflow bit. */
        if (i2c_read(st.hw->addr, st.reg->int_status, 1, tmp))
        {
            printf("i2c_read(st.hw->addr, st.reg->int_status, 1, tmp)\r\n");
            return -1;
        }
        if (tmp[0] & BIT_FIFO_OVERFLOW) {
            printf("tmp[0] & BIT_FIFO_OVERFLOW\r\n");
            mpu_reset_fifo();
            return -2;
        }
    }

    if (i2c_read(st.hw->addr, st.reg->fifo_r_w, length, data))
    {
        printf("tmp[0] & BIT_FIFO_OVERFLOW\r\n");
        return -1;
    }
    more[0] = fifo_count / length - 1;
    return 0;
}[/mw_shl_code]

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-4-25 01:48:05 | 显示全部楼层
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2019-8-3
在线时间
0 小时
发表于 2019-8-3 19:07:55 | 显示全部楼层
本帖最后由 blusyang 于 2019-8-3 19:09 编辑

mpu6050读FIFO  if (i2c_read(st.hw->addr, st.reg->fifo_count_h, 2, tmp))  return -1;这个问题搞定了吗?也卡这里了 啥原因?tmp总是返回0x0,怀疑 就是 FIFO没工作?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-30 19:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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