欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【开发工具】【i2c-tools】I2C总线调试工具(i2c-tools)的安装与使用

程序员文章站 2022-06-03 22:45:38
...

获取更多相关的嵌入式开发工具,可收藏系列博文,持续更新中:
【开发工具】嵌入式常用开发工具汇总帖


i2c-tools的安装

I2C Tools源码官网

http://i2c.wiki.kernel.org/index.php/I2C_Tools

安装步骤

  • 下载i2c tools:
https://www.kernel.org/pub/software/utils/i2c-tools/
  • 解压缩
tar -vxzf i2c-tools-4.1.tar.gz 

注:小技巧:Linux下一般压缩文件后缀为.tar.bz2和.tar.gz, 

它们解压命令有两三个选项是一致的: xf(v),

前者再加上j选项,后者再加上z选项。
  • 进入目录
cd i2c-tools-4.1/
  • 编译、安装
make
或者
make USE_STATIC_LIB=1  //注:(使用静态库) 
make install
  • 完成

PS:可能遇到的问题

问题:

[[email protected] ~]# ./i2cdetect ./i2cdetect: error while loading shared libraries: libi2c.so.0: cannot open shared object file: No such file or directory

排查:

提升缺少libi2c.so.0动态库,最简单的一个办法就是编译的时候采用静态编译。

解决:

编译时添加参数,使用静态库编译

make USE_STATIC_LIB=1


i2c-tools的使用

i2c-tools软件包

i2c-tools软件包包含用于Linux的一组不同的I2C工具:

  • i2cdetect – 用來列举I2C bus和上面所有的i2c设备
  • i2cdump – 显示i2c设备所有register的值
  • i2cget – 读取i2c设备上某个register的值
  • i2cset – 写入i2c设备上某个register

这些工具曾经是lm-sensors程序包的一部分,但后来被拆分为一个单独的程序包。 此举的基本原理是,并非所有的硬件监视芯片都是I2C设备,也不是所有的I2C设备都是硬件监视芯片,因此将所有内容都封装在一个封装中是令人困惑和不切实际的。

i2c-tools的当前主要版本为版本4,只要内核中包含I2C支持,就支持所有版本的Linux。

命令举例

  • 用i2cdetect检测有几组i2c总线在系统上,输入:

./i2cdetect -l
  • 用i2cdetect检测挂载在i2c总线上器件,输入:
./i2cdetect -r -y 1
注:(检测i2c-1上的挂载情况)

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- 38 -- -- -- -- -- -- -- 
40: -- -- -- -- 44 -- -- -- 48 -- -- -- -- -- -- -- 
50: 50 -- -- -- UU -- -- -- -- -- -- -- -- 5d -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: 70 -- -- -- -- -- -- -
由上图可知,0x18,0x20,0x30,0x34,0x64地址有挂载。而这几个分别是0x18(tlv3104),
0x20(adv7401),0x30, 0x34(sii9135),0x64(这个不知道是谁,可能是系统的)
  • 用i2cdump查看器件所有寄存器的值
i2cdump -f -y 0 0x70
  • 用i2cset设置单个寄存器
i2cset -f -y 0 0x70 0x0 0x1 

说明:
(设置i2c-1上0x20器件的0x77寄存器值为0x3f)
  • 用i2cget获取单个寄存器值
i2cget -f -y 0 0x70 0x0

说明:
(读取i2c-1上0x20器件的0x77寄存器值)

实例:

I2C总线号为0, I2C设备地址为0x20

寄存器 Reg[0x06,0x07] 配置为 Val[0xC0,0x01]:
i2cset -f -y 0 0x20 0x6 0xC0
i2cset -f -y 0 0x20 0x7 0x01
寄存器 Reg[0x02,0x03] 配置为 Val[0x01,0x10];
i2cset -f -y 0 0x20 0x2 0x01
i2cset -f -y 0 0x20 0x3 0x10

参考:

i2c-tools的使用方法及举例