获取更多相关的嵌入式开发工具,可收藏系列博文,持续更新中:
【开发工具】嵌入式常用开发工具汇总帖
i2c-tools的安装
I2C Tools源码官网
http://i2c.wiki.kernel.org/index.php/I2C_Tools
安装步骤
-
下载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:可能遇到的问题
问题:
[root@localhost ~]# ./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 f00: -- -- -- -- -- -- -- -- -- -- -- -- -- 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
参考: