linux驱动之i2c工具使用

一、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


猜你喜欢

转载自blog.csdn.net/wnn_0919/article/details/80526432
今日推荐