使用RDK imu x5的板子无法读取i2c 上的数据 并且 spi输出的数据不正常非常怪异

问题分析

根据你的补充信息(板载官方 BMI088 模块 + I2C 跳线),结合社区历史案例,核心问题是:

  1. 中断引脚配置缺失failed to get irq of imu number 表明驱动无法获取中断号,BMI088 在 I2C 模式下需要中断引脚触发数据就绪
  2. 系统版本与驱动不匹配:社区反馈 3.5.0+ 系统需使用免驱版本,旧驱动可能不兼容
  3. I2C 设备识别问题:需确认 I2C 总线是否正确扫描到 BMI088 的两个地址(0x19 加速度计 + 0x69 陀螺仪)

解决步骤

:one: 确认系统版本

# 查看系统版本
cat /etc/hobot_version
  • 3.5.0+:使用免驱版本(推荐)
  • 3.4.1 及以下:需编译驱动或升级系统

:two: 验证 I2C 设备识别

# 扫描 I2C 总线 5(根据你的日志是 bus 5)
i2cdetect -y 5

# 应看到 0x19 (ACC) 和 0x69 (GYR) 两个设备
# 如果看不到,检查跳线帽和接线

:three: 使用免驱版本(推荐)

根据社区最新反馈,免驱版本已支持 I2C/SPI 自动切换:

# 1. 克隆仓库并切换到免驱分支
cd ~
git clone https://github.com/D-Robotics/rdk_imu.git
cd rdk_imu
git branch -a  # 查看可用分支,找 driverless 或类似名称

# 2. 如果已有旧版本,先清理
rm -rf ~/hobot_imu_sensor

# 3. 按照免驱分支 README 重新安装
# (具体命令查看仓库 README,通常只需 source 即可)

:four: 检查中断引脚配置

BMI088 I2C 模式需要中断引脚,查看设备树是否配置:

# 查看设备树中 BMI088 配置
dtc -I dtb -O dts /boot/hobot/x5-rdk-v1p0.dts | grep -A 20 bmi088

# 或查看 dmesg 中 IRQ 信息
dmesg | grep -i bmi

如果中断未配置,可能需要:

  • 确认跳线帽是否连接了 INT 引脚
  • 或切换到 SPI 模式(SPI 模式下中断配置可能不同)

:five: 测试 SPI 模式(备选方案)

如果 I2C 持续失败,建议切换到 SPI 模式(社区反馈 SPI 更稳定):

# 1. 修改跳线帽到 SPI 位置
# 2. 重启系统
sudo reboot

# 3. 验证 SPI 设备
ls /sys/bus/iio/devices/
cat /sys/bus/iio/devices/iio:deviceX/name

# 4. 重新运行 IMU 节点
ros2 launch imu_sensor imu_sensor.launch.py

参考案例

根据社区帖子 x5 板接 BMI088 IMU 模块的问题

  • 用户最终通过免驱版本解决问题
  • 3.4.1 系统也可用,但 3.5.0+ 更稳定
  • SPI 模式比 I2C 更容易调试

需要补充的信息

请提供以下信息以便进一步定位:

  1. 系统版本cat /etc/hobot_version 输出
  2. I2C 扫描结果i2cdetect -y 5 输出(确认 0x19 和 0x69 是否存在)
  3. dmesg 日志dmesg | grep -i bmi 输出
  4. 跳线帽位置:确认 INT 引脚是否连接

快速建议

如果急于调试,建议:

  1. 切换到 SPI 模式(跳线帽改到 SPI,重启)
  2. 使用免驱版本(GitHub 仓库 driverless 分支)
  3. 升级系统到 3.5.0+(如果当前版本较低)

需要帮助可以随时补充日志!