一、i2c-tool命令
I2C工具包含以下四个执行命令
i2cdetect : 用来列举I2C bus 和上面设备
i2cdump : 显示I2C bus上所有寄存器值
i2cset : 设置 I2C bus 上某个寄存器值
i2cget : 获取 I2C bus上某个寄存器值
二、i2cdetect
使用: i2cdetect [-y] [-a] [-q|-r] I2CBUS[FIRST LAST]
i2cdetect -F I2CBUS
i2cdetect -l
描述:
i2cdetect用来列举I2C BUS和上面的所有设备
i2cdetect还可用于查询I2C总线的功能(请参见选项-F。)
参数描述:
-y : 禁止交互模式。默认情况下i2cdetect执行时需等待用户确认,才执行命令个。当使用此标志时 代表取消用户交互过程,直接执行命令。主要用于脚本
-a : 强制扫描非常规地址。 不建议。
-q : 使用SMBus“快速写入”命令进行探测(默认情况下,使用的命令是被认为是每个地址最安全的命令)。 不建议。
-r : 使用SMBus“读字节”命令进行探测(默认情况下,使用的命令是被认为是每个地址最安全的命令)。 不建议。
-F : 显示适配器实现的功能列表和退出。
-l : 显示安装总线的列表
i2cbus:指示要扫描的I2C总线的编号或名称,并且应对应于i2cdetect -l 列出的总线之一。
可选参数first和last限制扫描范围(默认值:从0x03到0x77)
例子:
1、I2C总线扫描
root@am57xx-evm:~# i2cdetect -l
i2c-0 i2c OMAP I2C adapter I2C adapter
i2c-2 i2c OMAP I2C adapter I2C adapter
2、i2c设备查询
如果总线上挂载i2c从设备,通过如下命令可知i2c-0总共挂载三个设备: 地址分别是0x040、0x50/0x5b、 0x70
root@am57xx-evm:~# i2cdetect -y -r 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00:-- -- -- -- -- -- -- -- -- -- ---- --
10: -- -- -- -- -- -- -- -- UU -- ---- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- ---- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- ---- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- ---- -- -- -- --
50: 50 -- -- -- -- -- -- -- UU UU UU5b -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- ---- -- -- -- --
70: 70 -- -- -- -- -- -- --
三、i2cdump
使用: i2cdump [-f] [-y] [-r first-last]I2CBUS ADDRESS [MODE [BANK [BANKREG]]]
描述:
i2cdump用于检查通过I2C总线可见的寄存器
参数描述:
-f:即使设备忙,也强制访问设备。
-y:禁止交互模式。
-r first-last: 限制正在访问的寄存器的范围。 此选项仅适用于模式b,w,c和W.对于模式W,第一个必须为偶数,最后一个必须为奇数。
i2cbus:指示要扫描的I2C总线的编号或名称
ADDRESS:i2c地址
例子:
1、寄存器内容导出
通过i2cdump可导出i2c设备中所有寄存器内容,例如i2cdump -y 0 0x70 (0是指i2c-0、0x70指ncs8801的i2c地址)
root@am57xx-evm:~/wangquan# i2cdump -y 0 0x70
No size specified (using byte-dataaccess)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 04 00 00 00 10 00 00 00 1f 00 4050 01 00 00 00 ?...?...?.@P?...
10: 08 a0 00 0a 08 00 06 0d 00 0a 0600 80 05 80 01 ??.??.??.??.????
20: 00 00 00 00 00 02 aa 00 00 00 0000 00 00 00 00 .....??.........
30: 31 f3 dc 21 08 01 4f 70 43 00 0200 17 08 01 17 1??!??OpC.?.????
40: 01 0f 00 22 22 10 80 22 22 10 8000 22 ff 80 fb ??.""??""??.".??
50: 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 ................
60: 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 ................
70: 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 01 ...............?
80: 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 ................
90: 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 ................
a0: 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 ................
b0: 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 ................
c0: 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 ................
d0: 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 ................
e0: 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 ................
f0: 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 ................
四、i2cset
使用: i2cset [-f] [-y] [-m MASK] [-r] I2CBUS CHIP-ADDRESSDATA-ADDRESS [VALUE] ... [MODE]
描述:
i2cset设置I2C设备上某个寄存器的值
参数描述:
-f:即使设备忙,也强制访问设备。
-y:禁止交互模式。
-m mask: 掩码参数
-r :在写入之后立即读回值,并将结果与写入的值进行比较。
i2cbus:指示要扫描的I2C总线的编号或名称
CHIP-ADDRESS :i2c地址
DATA-ADDRESS:寄存器地址
VALUE: 设置寄存器值
例子:
1、对ncss8801芯片寄存器0x00设置为0x0e
root@am57xx-evm:~# i2cset -f -y 00x70 0x00 0x0e
五 、i2cget
使用: i2cget [-f] [-y] I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE]]
描述:
读取I2C设备上某个寄存器的值
参数描述:
-f:即使设备忙,也强制访问设备。
-y:禁止交互模式
i2cbus指示要扫描的I2C总线的编号或名称
CHIP-ADDRESS :i2c芯片地址
DATA-ADDRESS:寄存器地址
例子:
1、查看ncss8801芯片寄存器0x00和0x0c的值。
root@am57xx-evm:~# i2cget -f -y 0 0x70 0x00
0x04
root@am57xx-evm:~# i2cget -f -y 0 0x70 0x0c
0x01