文章目录
一、排查思路
在对应的I2C节点下添加设备节点后,可以进入系统中使用i2cdetect命令,该命令用于检测和扫描 I2C 总线上设备
i2cdetect -y <i2c总线号>
该命令会向总线上所有的地址发送一个信号,如果该地址上有设备,就会回复一个应答信号
1. 问题一:总线没有挂载上
此时执行上述命令,就会报错
检查IIC设备的引脚是不是被占用了,如果被占用就会导致IIC总线挂载不上。
2. 问题二:IIC设备没有应答
如果显示下图,说明没有收到应答
正常情况下,即使此时没有设备树节点和驱动,只要该地址上有i2c设备就会在对应地址显示出地址,
若是没有显示,就要排查问题:
- 检查挂载的IIC总线是否有误
- 检查挂载的IIC总线复用功能是否正确
- 检查IIC总线status是否处于开启状态
- 检查IIC设备的power和enable引脚是否处于开启状态
排查上述问题后仍然未解决,可以使用逻辑分析仪查看IIC设备的通信是否正常,是否有输出波形
下图是识别到IIC设备的打印信息:
- 注:还有一种情况可能也会出现执行上述命令时,设备没有应答;
- 当设备的寄存器地址为16位时,使用该命令可能也会出现无应答的现象,但是使用逻辑分析仪查看IIC引脚输出是正常的。
二、i2cdetect命令
i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST]
参数说明:
-y:在扫描过程中,如果遇到设备不响应,不打印错误信息。
-a:显示所有可能的 I2C 设备地址,而不仅仅是那些响应的地址。
-q 或 -r:这两个选项都是用来减少输出的详细程度。-q 选项会生成更简洁的输出,而 -r 选项会生成原始格式的输出。
@I2CBUS:可以是 I2C 总线的编号(整数),也可以是 I2C 总线的名称(如 /dev/i2c-1)。
@FIRST LAST:这两个参数用来限制扫描的地址范围。FIRST 是起始地址,LAST 是结束地址。
@address1 [address2...]:指定要扫描的 I2C 设备地址。
1. 扫描 I2C 总线 1 上的所有设备:
i2cdetect 1
2. 快速扫描 I2C 总线 1:
i2cdetect -F 1
3. 列出所有 I2C 总线:
i2cdetect -l
4. 扫描 I2C 总线 1 上的地址范围 0x00 到 0x0F:
i2cdetect 1 0x00 0x0F
5. 静默模式下扫描 I2C 总线 1:
i2cdetect -q 1
6. 原始模式下扫描 I2C 总线 1:
i2cdetect -r 1
【注:特别鸣谢我天底下最帅最厉害的老师—冬瓜~】(●ˇ∀ˇ●)