i2c-tools介绍
在嵌入式linux开发中,有时候需要确认i2c硬件是否正常连接,设备是否正常工作,设备的地址是多少等等,这里我们就需要使用一个用于测试I2C总线的工具——i2c-tools。
i2c-tools是一个专门调试i2c的开源工具,可获取挂载的设备及设备地址,还可以读写I2C设备寄存器。调试新的设备驱动时,难免要反复修改寄存器,然后看结果现象。传统的做法是修改驱动代码寄存器值->编译->下载->运行->看结果。这一过程比较费时间,而每次需要改的可能只是 1 个 bit,这种情况下 i2c-tools 简直就是神器。
下面我们就对这个工具的安装和使用做个简单介绍。
i2c-tools 官方说明:
https://i2c.wiki.kernel.org/index.php/I2C_Tools
工具源码下载地址:
https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/
i2c-tools工具包括:
i2cdetect:用于扫描 i2c 总线上的设备,并显示地址。
i2cset:设置i2c设备某个寄存器的值。
i2cget:读取i2c设备某个寄存器的值。
i2cdump:读取某个i2c设备所有寄存器的值。
i2ctransfer:一次性读写多个字节。
工具命令介绍: i2cdetect:检测i2c芯片 i2cdump:查看寄存器值 i2cget:获取单个寄存器值(8位寄存器) i2cset:设置单个寄存器值(8位寄存器) i2ctransfer:一次传输多字节数据(16位寄存器)参数介绍: -y:禁用交互模式。 -f:强制访问设备。 -r:写入后立即读回该值。
注:i2c-tools 原理是通过操作 /dev 路径 i2c-× 设备文件完成,因此你的 kernel 必须开启了 CONFIG_I2C_CHARDEV 配置,否者会报找不到节点。
在设备上也可以通过目标板终端输入:ls /sys/bus/i2c/devices查看i2c设备节点信息。看到的
i2c-0,i2c-1,指的是i2c总线节点,i2c从设备都是挂载在总线节点下的。
工具编译
工具源码,使用以下命令进行编译
make CC=arm-linux-gnueabihf-gcc USE_STATIC_LIB=1
USE_STATIC_LIB 的意思是使用静态编译。编译完成后,会在tools目录下产生i2cdetect,i2cdump,i2cget,i2cset,i2ctransfer五个产物。将这些可执行文件拷贝到设备上。
不加 USE_STATIC_LIB 编译选项,会使用动态链接的方式编译。编译完成后需要拷贝i2c-tools-4.3/lib 目录下的libi2c.so.0动态库到设备上的/usr/bin 目录下。编译会生成五个工具:i2cdetect、i2cset、i2cget、i2cdump、i2ctransfer,拷贝到开发板中就可以使用。
i2c-tools使用方法
i2cdetect:查询开发板包含的i2c总线和外设,看以下命令:
i2cdetect -l
探测开发板包含的i2c总线。
i2cdetect -y -r 0
探测i2c-0总线上挂载的外设,参数-y表示取消交互模式,直接执行命令。
i2cdetect -y -r 1
探测i2c-1总线上挂载的外设,UU表示该设备已经被Linux内核驱动占用,探测程序会略过该设备。下图所示,从设备地址分别是0x0c和0x1a。 UU表示设备地址的从设备被驱动占用,卸载对应的驱动后,UU就会变成数据。-- 表示该地址被检测,但是没有应答。
i2cset:设置i2c设备单个寄存器的值,看几个命令:
i2cset -y -f 0 0x57 0x00 0x10i2cset -y -f 0 0x57 0x01 0x11i2cset -y -f 0 0x57 0x02 0x12i2cset -y -f 0 0x57 0x03 0x13
下面以i2cset -y -f 0 0x57 0x00 0x10为例进行分析
参数含义:
-y 取消交互模式,直接执行命令
-f 强制访问该设备
0 表示i2c总线编号
0x57 表示i2c设备地址
0x00 表示寄存器地址
0x10 表示待写入的值
i2cget:查看i2c设备单个寄存器的值,看几个命令:
i2cget -y -f 0 0x57 0x00
以 i2cget -y -f 0 0x57 0x00为例进行分析,参数含义:
-y 取消交互模式,直接执行命令
-f 强制访问该设备
0 表示i2c总线编号
0x57 表示i2c设备地址
0x00 表示寄存器地址
i2cdump:查看i2c设备所有寄存器的值,看以下命令:
i2cdump -y -f 1 0x32
参数含义:
-y 取消交互过程,直接执行命令
-f 强制访问该设备
1 表示i2c总线编号
0x32 表示i2c设备地址
其他资源
Linux内核i2c-tools命令
i2c-tools工具的安装和使用简单介绍-电子发烧友网
https://www.cnblogs.com/ITY996/p/16894380.html
https://www.cnblogs.com/liuwanpeng/p/7346558.html
Linux下I2C-tools工具使用_i2cdetect_深海带鲤鱼的博客-CSDN博客
嵌入式Linux驱动开发(I2C专题)(四)_嵌入式学习者。的博客-CSDN博客