i2c-tools 我编译完成后,放到我的开发板上运行,i2cdetect -r -y 0 打印的结果不对如下。我看别人打印的和我的不太一样。
确定i2c总线上挂载设备了吗?
从你提供的输出信息来看,可能是在尝试与不同的 I2C 设备进行通信时都收到了 NAK(非应答)信号。可能是由于以下几个原因造成的:
1.硬件连接问题:请检查你的开发板和 I2C 设备之间的连接是否正确,确保 SDA(数据线)和 SCL(时钟线)已正确接入。如果可能,使用示波器检查信号质量。
2.错误的 I2C 总线编号:尝试使用其他 I2C 总线编号运行 i2cdetect,例如 i2cdetect -r -y 1。有些开发板上可能有多个 I2C 总线,确保你正在使用正确的总线编号。
3.I2C 设备地址不在扫描范围内:i2cdetect 默认会扫描 0x03 到 0x77 范围内的地址。如果你的 I2C 设备地址不在此范围内,可以通过修改 i2cdetect 源代码中的扫描范围并重新编译来解决。
4.I2C 设备需要特殊配置:某些 I2C 设备可能需要在通信之前进行特殊配置。请查阅设备的数据手册以了解如何正确配置设备。
5.软件问题:检查你的开发板上的 I2C 驱动是否正确安装和配置。确认 i2c-tools 的版本与开发板和内核版本兼容。
要解决这个问题,建议你首先排除硬件连接和配置问题,然后尝试使用不同的 I2C 总线编号。如果问题仍未解决,就检查设备的数据手册以了解是否需要特殊配置,以及检查开发板上的 I2C 驱动是否正确安装和配置。
i2cdetect用來列举I2C bus和上面所有的设备,可接受的参数有
Usage: i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST]
i2cdetect -F I2CBUS
i2cdetect -l
I2CBUS is an integer or an I2C bus name
If provided, FIRST and LAST limit the probing range.
-V:输出当前版本号
root@Linux:/# i2cdetect -V
i2cdetect version 4.1
-l:输出所有 i2c 总线,如下总线编号有twi1和twi2,或者1和2
root@Linux:/# i2cdetect -l
i2c-1 i2c twi1 I2C adapter
i2c-2 i2c twi2 I2C adapter
root@Linux:/# ls -l /dev/i2c-*
crw------- 1 root root 89, 1 Jan 1 23:11 /dev/i2c-1
crw------- 1 root root 89, 2 Jan 1 23:11 /dev/i2c-2
I2CBUS:i2c总线编号
-F:此 i2c 支持的功能
root@Linux:/# i2cdetect -F 1
Functionalities implemented by /dev/i2c-1:
I2C yes
SMBus Quick Command yes
SMBus Send Byte yes
SMBus Receive Byte yes
SMBus Write Byte yes
SMBus Read Byte yes
SMBus Write Word yes
SMBus Read Word yes
SMBus Process Call yes
SMBus Block Write yes
SMBus Block Read no
SMBus Block Process Call no
SMBus PEC yes
I2C Block Write yes
I2C Block Read yes
-y:指令执行自动yes,否则会提示确认执行Continue? [Y/n] Y,不加参数y会有很多执行提示,可以帮助判断
-a:输出总线上所有地址(00-7f),没有 -a,只显示 08-77,UU 表示该设备在驱动中已使用,如下0x38的地址有设备
root@Linux:/# i2cdetect -a 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x00-0x7f.
Continue? [Y/n] Y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
root@Linux:/# i2cdetect -y -a 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
root@Linux:/# i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
-q:快速写指令,-q和-r不能同时使用
-r:读指令,-q和-r不能同时使用