目录
i2c-tools
是一套用于 Linux 系统的 I2C 总线调试工具,广泛应用于嵌入式开发和硬件调试中。
使用场景
-
硬件调试:在开发 I2C 设备时,
i2c-tools
可以帮助检测设备连接是否正常,读取设备寄存器值以验证设备状态。 -
驱动开发:在开发 Linux 内核驱动时,
i2c-tools
可以辅助验证设备寄存器的读写操作。
安装i2c-tools
Debian/Ubuntu 系统
sudo apt install i2c-tools
SDK
打开对应工具组件
make menuconfig
点击‘/’按键,搜索
PACKAGE_i2c-tools
或者单独搜索工具
开发板
需要下载对应源码,使用所需交叉编译工具链进行编译,将对应组件移植进入开发板
下载地址:
Index of /pub/software/utils/i2c-tools/
基本用法
i2cdetect
-y
功能:自动确认操作,避免手动输入确认信息。
使用场景:在自动化脚本中使用时,避免交互式提示。
-r
功能:使用读操作(Read)检测设备。[SMBus:receive byte]
使用场景:适用于那些只在读操作时响应的设备。这种方式通常更安全,因为它不会向设备发送任何写操作,从而避免对设备造成潜在的干扰。
-q
功能:使用写操作(Write)检测设备。[SMBus:quick write]
使用场景:适用于那些只在写操作时响应的设备。
-a
功能:强制扫描所有地址(包括保留地址)。
使用场景:用于全面扫描总线,但可能会干扰某些设备。
-D
功能:显示设备描述信息。
使用场景:用于获取设备的详细信息。
-S
功能:以十六进制形式显示地址。
使用场景:用于更直观地查看地址信息。
-F
功能:显示总线的功能支持。
使用场景:用于检查总线是否支持某些功能(如 SMBus 操作)。
SMBus(System Management Bus,系统管理总线)
eg:
显示当前系统中可用的 I2C 总线编号及其相关信息
i2cdetect -l
检测 I2C 总线 0
上设备
i2cdetect -y -r 0
i2cdump
用于读取指定 I2C 设备的寄存器内容,并以可读的格式显示
-f
:
强制访问设备,即使设备已被内核驱动程序占用。使用此参数时需谨慎,因为它可能会干扰内核驱动程序。
-r first-last
:
限制访问的寄存器范围,仅扫描从 first
到 last
的寄存器区域。此选项适用于模式 b
、w
、c
和 W
。
-y
:
禁用交互模式,直接执行操作而无需用户确认。这主要用于脚本中。
-a
:
允许使用保留地址范围(如 0x00-0x02
和 0x78-0x7f
)。一般不建议使用。
-V
:
显示 i2cdump
的版本信息并退出。
I2CBUS
:
指定 I2C 总线的编号,对应于 i2cdetect -l
扫描的序号。
ADDRESS
:
指定 I2C 设备的地址,范围为 0x03-0x77
,或 0x00-0x7f
(如果使用 -a
选项)。
MODE
:
指定读取模式:
b
:字节模式(默认)。
w
:16位字模式。
W
:16位字模式(仅偶数寄存器地址)。
s
:SMBus 块模式。
i
:I2C 块模式。
c
:连续字节模式。
eg:
读取设备的所有寄存器
i2cdump -y 0 0x27
读取指定范围的寄存器
i2cdump -y -r 0x00-0x10 0 0x27
使用特定模式读取寄存器
i2cdump -y 0 0x27 w
i2cget
i2cget [-f] [-y] [-a] I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE]]
-f
:强制访问设备,即使设备已被内核驱动程序占用。
-y
:取消交互模式,直接执行操作而无需用户确认。
-a
:允许使用所有地址范围(0x00-0x7f),默认情况下只支持 0x03-0x77。
I2CBUS
:指定 I2C 总线的编号,例如 0
、1
等。
CHIP-ADDRESS
:指定 I2C 设备的地址。
DATA-ADDRESS
:指定设备的寄存器地址,可选。
MODE
:指定读取的数据类型,可选:
b
:字节模式(默认)。
w
:16 位字模式。
s
:SMBus 块模式。
i
:I2C 块模式。
-V
:显示 i2cget
的版本信息并退出
eg:
读取单个字节
i2cget -f -y 0 0x27 0x28
读取 16 位数据
i2cget -y 1 0x68 0x00 w
i2cset
i2cset [-f] [-y] [-m mask] [-r] [-a] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] [MODE]
-f
:强制访问设备,即使设备已被内核驱动程序占用。
-y
:关闭交互模式,直接执行操作而无需用户确认。
-m mask
:掩码参数,指定哪些位将被写入。掩码中为 1 的位将从值中获取,为 0 的位将保留。
-r
:写入后立即读取寄存器值,并与写入值进行比较。
-a
:允许使用非常规地址(如 0x00-0x02 和 0x78-0x7f),一般不建议使用。
I2CBUS
:指定 I2C 总线编号,可通过 i2cdetect -l
查看。
CHIP-ADDRESS
:指定 I2C 设备的地址。
DATA-ADDRESS
:指定寄存器地址。
VALUE
:要写入的数据值。
MODE
:指定写入模式:
b
:字节模式(默认)。
w
:16 位字模式。
i
:I2C 块模式
eg:
单字节写入
i2cset -y 1 0x2d 0x11 0x42
清除指定位
i2cset -y -m 0x07 1 0x2d 0x11 0x00
写入后读取验证
i2cset -y -r 1 0x48 0x02 0x5000 w