基于STM32F411+FreeRTOS的软件I2C总线MPU6050读取失败问题咨询
MPU6050软件模拟I2C读取全0x00故障排查求助
- 开发平台:运行FreeRTOS的STM32F411CEU6,采用软件模拟I2C总线挂载三款传感器:EM7028、LSM303、MPU6050,其中前两款通信正常,但MPU6050始终无法完成初始化,读取返回全0x00数据。
- 示波器检测结果:MCU向MPU6050写入数据时能收到正常ACK信号,但读取操作时,SDA在8个SCL时钟周期内始终保持低电平,返回数据全为0x00。
- 已做排查:
- 更换过经测试确认正常的MPU6050模块,问题未解决;
- 同总线其他I2C设备工作正常,排除软件I2C驱动本身问题;
- 硬件设计与固件均来自GitHub开源项目,已有其他开发者成功复现该配置。
关键问题代码
初始化函数执行到以下逻辑时返回错误码16(因读取的prod_id全为0x00):
/* Check product revision. */ if (i2c_read(st.hw->addr, st.reg->accel_offs, 6, data)) return 13; rev = ((data[5] & 0x01) << 2) | ((data[3] & 0x01) << 1) | (data[1] & 0x01); if (rev) { /* Congrats, these parts are better. */ if (rev == 1) st.chip_cfg.accel_half = 1; else if (rev == 2) st.chip_cfg.accel_half = 0; else { //log_e("Unsupported software product rev %d.\n", rev); return 14; } } else { if (i2c_read(st.hw->addr, st.reg->prod_id, 1, &(data[0]))) return 15; rev = data[0] & 0x0F; if (!rev) { // log_e("Product ID read as 0 indicates device is either " // "incompatible or an MPU3050.\n"); return 16; //Here is the key problem: data is all 0x00. } if (rev == 4) { // log_i("Half sensitivity part found.\n"); st.chip_cfg.accel_half = 1; } else st.chip_cfg.accel_half = 0; }
恳请提供排查思路或可行解决方案!
内容的提问来源于stack exchange,提问作者Snap Tristle
相关产品推荐
相关产品推荐

