TWI / I2C 调试与常见问题
i2cdetect全部显示--:检查 SDA/SCL pinmux、外部上拉、供电、总线编号和节点状态。- 显示
UU:地址已被内核驱动占用,不是故障。 timeout:常见于从设备拉低 SDA/SCL、上拉过弱、频率过高或时钟门控异常。- 无法发 START/STOP:先用示波器检查总线是否被占用,再看控制器状态和 reset。
- 数据不完整:检查长度、DMA/engine 模式、重复起始和从设备页写限制。
dmesg | grep -Ei 'twi|i2c'
cat /sys/class/i2c-adapter/i2c-*/name
find /sys/kernel/debug -iname '*twi*' -o -iname '*i2c*'
通用定位顺序
- 原理图与供电。
- 最终 DTB 中的节点和 pinctrl。
- 最终
.config与.ko。 - probe、clock、reset、IRQ 日志。
- 设备节点与 sysfs/debugfs。
- 最小功能测试。
- 压力、休眠和异常插拔测试。
不要通过关闭错误日志来判断问题已经解决。应找到第一个异常并验证其上下游依赖。