Linux 下i2c-tool的常用命令

本文详细介绍了Linux系统中的i2c命令,包括i2cdetect(扫描设备)、i2cget(读取寄存器)、i2cset(写入寄存器)、i2cdump(读取全量寄存器)和i2ctransfer(多字节操作),展示了如何使用这些工具与I2C设备进行通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux的i2c命令是用于与I2C(Inter-Integrated Circuit)总线设备进行通信的命令。I2C总线是一种串行通信协议,常用于连接各种外设,如传感器、显示器、存储器等。在Linux系统中,可以使用i2c-tools软件包提供的工具来操作I2C总线设备。

下面是一些常用的i2c命令:

i2cdetect命令

该命令用于扫描I2C总线上的设备。

语法:
​
i2cdetect [-y] [-a] [-q|-r] i2cbus [first last]:
​
参数说明:
​
参数y:关闭交互模式,使用该参数时,不会提示警告信息。
​
参数a:扫描总线上的所有设备。
​
参数q:使用SMBus的“quick write”命令进行检测,不建议使用该参数。
​
参数r:使用SMBus的“receive byte”命令进行检测,不建议使用该参数。
​
参数i2cbus:指定i2c总线的编号
​
参数first、last:扫描的地址范围
​
返回值说明:
​
‘–’:表示该地址被检测,但没有芯片应答;
​
‘UU’:表示该地址当前由内核驱动程序使用。
​
‘**’:**表示以十六进制表示的设备地址编号,如 “18”
​
例:扫描i2cbus0上的设备
  i2cdetect -y  0
​

i2cdetect的其他命令

i2cdetect -V:打印软件的版本
i2cdetect -l:检测当前系统有几组i2c总线

i2cget命令

i2cget:读某个寄存器的值,寄存器地址只能是8-bit

语法:
​
i2cget [-f] [-y] i2cbus chip-address [data-address [mode]]
​
参数说明:
​
参数f:强制访问设备。
​
参数y:关闭交互模式,使用该参数时,不会提示警告信息。
​
参数i2cbus:指定i2c总线的编号
​
参数chip-address:i2c设备地址
​
参数data-address:设备的寄存器的地址
​
参数mode:指定读取的大小, 可以是b, w, s或i,分别对应了字节,字,SMBus块, I2C块。
​
例:按字节读取i2cbus2上 0x1a设备的 0x0寄存器的值
i2cget -f -y 2 0x1a 0x0 b
​

i2cset命令

i2cset:写某个寄存器的值,寄存器地址只能是8-bit。

语法:
​
i2cset [-f] [-y] [-m mask] [-r] i2cbus chip-address data-address [value] … [mode]
​
参数说明:
​
参数f:强制访问设备。
​
参数y:关闭交互模式,使用该参数时,不会提示警告信息。
​
参数m:
​
参数r:写入后立即回读寄存器值,并将结果与写入的值进行比较。
​
参数i2cbus:指定i2c总线的编号
​
参数chip-address:i2c设备地址
​
参数data-address:设备的寄存器的地址
​
参数value:要写入寄存器的值
​
参数mode:指定读取的大小, 可以是b, w, s或i,分别对应了字节,字,SMBus块, I2C块
​
例:按字节写i2cbus2上 0x1a设备的 0x0寄存器的值为0xff
i2cset -f -y 2 0x1a 0x0 0xff b

i2cdump命令

i2cdump:读取指定设备的全部寄存器的值。

语法:
​
i2cdump [-f] [-r first-last] [-y] i2cbus chip-address [mode [bank [bankreg]]]
​
参数说明:
​
参数r:指定寄存器范围,只扫描从first到last区域;
​
参数f:强制访问设备。
​
参数y:关闭人机交互模式;
​
参数i2cbus:指定i2c总线的编号
​
参数address:指定设备的地址
​
参数mode:指定读取的大小, 可以是b, w, s或i,分别对应了字节,字,SMBus块, I2C块
​
​
例:按字节读取i2cbus2上 0x1a设备的 所有寄存器的值
i2cget -f -y 2 0x1a  b

i2ctransfer命令

i2ctransfer:可以读写多字节寄存器地址。i2ctransfer可以替代i2cset和i2cget。

语法
i2ctransfer [-f] [-y] [-v] [-a] i2cbus w-n@chip-address data-0 data-1 ... data-n r-num
i2ctransfer [-f] [-y] [-v] [-a] i2cbus w-n@chip-address data-0 data-1 ... data-n    
​
参数说明:
​
参数f:强制访问设备。
参数y:关闭人机交互模式;
参数v:
参数a:允许用0x00-0x07和0x78-0x7f地址
参数i2cbus:指定i2c总线的编号
参数w-n:写n个字节
参数chip-address:器件地址
参数data-0 data-1 ... data-n:寄存器地址(读) / 寄存器地址和写的数据(写)
参数r-num:读num个字节
​
例1:i2ctransfer -y -f 1 w4@0x1a 0x0 0x0 0xfe 0xf2
   1是总线号,0x1a是设备地址,0x0 0x0是16-bit寄存器地址,0xfe和0xf2是写入的数据。也就是把0xfe和0xf2写入到0x1a芯片的0x0 0x0寄存器中。w4表示要写4个字节,即寄存器地址0x0 0x0和数据0xfe 0xf2。
​
例2:i2ctransfer -y -f 1 w2@0x1a 0x0 0xf r16
   1是总线号,0x1a是设备地址,0x0 0xf是16-bit寄存器地址,r16是读16个字节。也就是从0x0 0xf寄存器开始,向后读16个字节。w2表示要写2个字节,即寄存器地址0x0 0xf。
i2c-tools是一个Linux下的I2C总线工具,它提供了一组用户空间的程序,可以用来与I2C设备进行通信和调试。i2c-tools包含了以下工具: - i2cdetect:扫描I2C总线,查找I2C设备的地址- i2cdump:读取I2C设备的寄存器值; - i2cget:读取I2C设备的一个字节或多个字节; - i2cset:向I2C设备的寄存器写入一个字节或多个字节; - i2cprobe:测试I2C设备是否存在。 其中,i2cdetect是最常用的工具,可以帮助我们快速地扫描I2C总线上的设备,找到它们的地址i2cdump和i2cget可以读取设备的寄存器值,i2cset可以向设备的寄存器写入值。 使用i2c-tools之前,需要先确保I2C总线的驱动程序已经加载,可以使用lsmod命令查看是否已经加载了i2c-dev和i2c-bcm2835模块(如果是树莓派系统,则是i2c-bcm2708)。如果没有加载,可以使用modprobe命令加载。 接下来,我们以i2cdetect为例,介绍一下i2c-tools的使用方法。 i2cdetect命令语法: ``` i2cdetect [-y] [-a] [-q|-r] i2cbus [first last] ``` 参数说明: - -y:不需要确认,直接扫描设备地址- -a:扫描所有地址,包括保留地址- -q:以静默模式运行,只输出找到的地址- -r:以详细模式运行,输出找到的地址及设备型号; - i2cbus:I2C总线编号,例如0、1等; - first和last:设备地址范围,可以省略,如果省略,则默认扫描0x03~0x77之间的地址。 使用示例: 1. 扫描I2C总线0上的设备地址: ``` sudo i2cdetect -y 0 ``` 2. 扫描I2C总线1上的设备地址: ``` sudo i2cdetect -y 1 ``` 3. 扫描所有地址: ``` sudo i2cdetect -y -a 1 ``` 4. 扫描指定地址范围: ``` sudo i2cdetect -y 1 0x20 0x27 ``` 注意:使用i2cdetect命令,需要使用sudo权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值