rdkx3 iic 3和5的引脚是不是有问题

根据你描述的现象(I2C3 引脚静态电平正常、GPIO 模拟 I2C 正常,但硬件 I2C3 无法读取陀螺仪),结合社区已有案例,问题分析如下:

可能原因

  1. 设备树未正确使能 I2C3:X3 的 I2C3 默认可能未开启,需要在 config.txt 中显式使能
  2. 引脚复用冲突:I2C3 的引脚可能被其他功能占用
  3. 驱动时序问题:hobot-i2c 驱动在特定频率下与某些陀螺仪兼容性不佳
  4. 上拉电阻问题:硬件 I2C 需要外部上拉,而 GPIO 模拟时你可能已经外接了上拉

排查步骤

1. 检查 I2C3 是否已使能

# 查看当前 I2C 总线
i2cdetect -l

# 如果看不到 i2c-3,需要在 /boot/config.txt 中添加
dtparam=i2c3=on

参考社区案例:X3 的 i2c 接口,只看到 0 和 3

2. 检查设备树节点

# 查看 I2C3 的设备树状态
cat /proc/device-tree/soc/i2c@*/status

# 或者
dtc -I fs /proc/device-tree > current_dts.txt
grep -A 10 "i2c3" current_dts.txt

3. 测试 I2C3 总线

# 扫描 I2C3 上的设备(假设陀螺仪地址是 0x68,常见 MPU6050/ICM 地址)
i2cdetect -y 3

# 尝试读取陀螺仪 WHO_AM_I 寄存器
i2cget -y 3 0x68 0x75

4. 检查引脚复用

# 查看引脚复用状态
cat /sys/kernel/debug/pinctrl/pinctrl-hobot/pinmux-pins

# 确认 I2C3 的 SCL/SDA 引脚没有被其他功能占用

5. 对比 GPIO 模拟与硬件 I2C 的差异

既然你用 GPIO35/36 模拟 I2C 能成功,建议:

# 记录 GPIO 模拟时的时序参数
# 对比硬件 I2C 的时序
i2cdetect -y 3 -r 0x03 0x77  # 限制扫描范围

# 尝试降低 I2C3 频率(在设备树中修改 clock-frequency)

6. 查看驱动日志

# 查看内核日志中的 I2C 错误
dmesg | grep -i i2c
dmesg | grep -i hobot-i2c

# 开启 I2C 调试
echo "file drivers/i2c/* +p" > /sys/kernel/debug/dynamic_debug/control

临时解决方案

如果硬件 I2C3 确实存在问题,而你急需使用:

  1. 继续使用 GPIO 模拟 I2C(你已经验证可行)
  2. 尝试切换到 I2C0 或 I2C1(如果引脚允许)
  3. 等待官方修复:社区已有反馈类似问题会在后续版本修复

建议反馈

请在你的原帖中补充以下信息,方便官方定位:

1. 陀螺仪具体型号(MPU6050/ICM20602/其他?)
2. 陀螺仪的 I2C 地址
3. i2cdetect -y 3 的完整输出
4. dmesg | grep i2c 的错误日志
5. 是否外接了上拉电阻(阻值多少)

这类问题很可能是驱动时序或设备树配置问题,建议先按上述步骤排查,如果确认是驱动 bug,官方通常会在后续 OTA 中修复。