关于#i2c-tools#的问题,如何解决?

i2c-tools 我编译完成后,放到我的开发板上运行,i2cdetect -r -y 0 打印的结果不对如下。我看别人打印的和我的不太一样。

img

确定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 驱动是否正确安装和配置。

  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:Android:i2c调试工具 i2c-tools的使用,在Android external目录下新增一个可执行应用及编译,i2cdetect -y 1或i2cdetect -r -y 1。
  • 除此之外, 这篇博客: i2c-tools安装与使用总结中的 3.1 i2cdetect 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 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不能同时使用