i2c-tools工具是一个专门调试i2c的,开源,可获取挂载的设备及设备地址,还可以在对应的设备指定寄存器设置值或者获取值等功能。
一、下载i2c-tools,交叉编译
1、从开源网站
http://dl.lm-sensors.org/i2c-tools/releases/
下载i2c-tools,
(1) 解压后:
(2) 修改makefile文件。
(3) 然后保存退出。直接make,进行编译。编译完成后在tools/文件夹下会有如下几个可执行文件:
i2cdetect、i2cdump、i2cget、i2cset、i2ctransfer
(新版本才有)
如下图所示:
(4) 将i2cdetect, i2cdump, i2cget, i2cset push到安卓设备就可以调试了。
二、命令举例
1、用
i2cdetect
检测有几组i2c总线在系统上,输入:
$i2cdetect -l
由上图可知,系统中存在两组总线分别i2c-1和i2c-2。
2、用
i2cdetect
检测挂载在i2c总线上器件,输入:
$i2cdetect -r -y 1(检测i2c-1上的挂载情况)
由上图可知,0x18, 0x20, 0x30, 0x34, 0x64地址有挂载。
3、用
i2cdump
查看器件所有寄存器的值,这个很有用,输入:
$i2cdump -f -y 1 0x20 (查看i2c-1 上0x20器件寄存器的值)
这样就可以对比自己设置的是否一致了。
4、用i2cset设置单个寄存器值,用i2cget读取单个寄存器值,可以在初期调试时发挥很大作用,一旦有预期的现象出现,就可以用i2cdump读出整个寄存器的值,然后固化到代码中。
(1)
i2cset
设置i2c-1上0x20器件的0x77寄存器值为0x3f
$i2cset -f -y 1 0x20 0x77 0x3f
2)
i2cget
读取i2c-1上0x20器件的0x77寄存器值
$i2cget -f -y 1 0x20 0x77
5.
i2ctransfer
使用,
i2ctransfer
支持16位/32位寄存器的读写,i2cset和i2cget只能读取8位的寄存器。所以
i2ctransfer
可以替代i2cset和i2cget。
(1) 往i2c-1上0x36器件 0x5081寄存器 写0x01
$i2ctransfer -f -y 1 w3@0x36 0x50 0x81 0x01
(2) 在i2c-1上0x36器件 0x300A寄存器 读取3个字节数据
$i2ctransfer -f -y 1 w2@0x36 0x30 0x0A r3