调测参考

准备工具

i2c-tools是嵌入式常用的I2C调试工具,本章节使用的i2c-tools工具为i2cdetect与i2ctransfer

工具

功能说明

i2cdetect

列出I2C总线上的所有设备。

i2ctransfer

读写i2c设备某个寄存器值,支持16/32位寄存器的读写

其获取方式如下。

  1. 访问如下链接,下载i2c-tools-4.3.tar.gz。

    https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/

  2. 登录Arm架构的Linux服务器。
  3. 执行如下命令,切换至root用户。

    su - root

  4. 使用“WinSCP”,将软件包“ i2c-tools-4.3.tar.gz”上传至Linux系统root用户属组目录下,例如“/opt”。详细操作请参见使用WinSCP传输文件
  5. 执行如下命令,进入源码包所在目录,例如“/opt”。

    cd /opt

  6. 执行以下命令,解压i2c-tools-4.3.tar.gz。

    tar -zxvf i2c-tools-4.3.tar.gz

  7. 执行以下命令,进入“i2c-tools-4.3”目录。

    cd i2c-tools-4.3

  8. 执行以下命令进行编译。

    make USE_STATIC_LIB=1

    编译成功后,在当前目录的子目录“tools”下会生成对应的可执行文件“i2cdetect”与“i2ctransfer”

调试操作

  1. 登录待调试I2C的环境。
  2. 执行如下命令,切换至root用户。

    su - root

  3. 使用“WinSCP”,将i2cdetect与i2ctransfer上传至root用户属组目录下,例如“/opt”。详细操作请参见使用WinSCP传输文件
  4. 执行以下命令,添加可执行权限。

    chmod +x i2ctransfer

    chmod +x i2cdetect

  5. 执行以下命令,查看系统的I2C总线信息。

    ./i2cdetect -l
    i2c-0   i2c             HiSilicon I2C Controller 300170000.i2c0 I2C adapter
    i2c-1   i2c             HiSilicon I2C Controller 300180000.i2c1 I2C adapter
    i2c-2   i2c             HiSilicon I2C Controller 300190000.i2c2 I2C adapter
    i2c-3   i2c             HiSilicon I2C Controller 3001a0000.i2c3 I2C adapter
    i2c-5   i2c             HiSilicon I2C Controller c4170000.i2c5  I2C adapter
    i2c-6   i2c             HiSilicon I2C Controller c4180000.i2c6  I2C adapter
    i2c-7   i2c             HiSilicon I2C Controller 82060000.i2c7  I2C adapter
    i2c-8   i2c             HiSilicon I2C Controller 82070000.i2c8  I2C adapter
    i2c-9   i2c             HiSilicon I2C Controller c4190000.i2c9  I2C adapter
    i2c-13  i2c             HiSilicon I2C Controller 401040000.i2c13        I2C adapter

  6. 执行以下命令,使用i2cdetect -y查询i2c上挂载的设备。

    ./i2cdetect -y 5
         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: -- -- -- -- -- -- -- --

    当前表明只有0x32挂载有设备。

  7. 执行以下命令,I2C

    ./i2ctransfer -y -f 8 w3@0x50 0x00 0x80 0x55

    表1 参数说明

    字段

    说明

    8

    I2C设备号

    w3

    表示写3个值,前两位为对应16位寄存器地址,之后则为要写的值

    0x50

    I2C从设备地址

    0x00 0x80

    表示往0x0080地址写值

    0x55

    表示给对应寄存器写0x55

  8. 执行以下命令,读I2C

    ./i2ctransfer -y -f 8 w2@0x50 0x00 0x80 r1
    表2 参数说明

    字段

    说明

    8

    I2C的总线号。

    w2

    表示写2个值,即要读的对应16位寄存器地址

    0x50

    I2C从设备地址

    0x00 0x80

    表示读取0x0080地址的值。

    r1

    表示从寄存器开始读取1个字节