一.i2cdetect
i2cdetect
是一个用户空间程序,用于扫描 I2C 总线上的设备。它输出一个表格,其中包含指定总线上检测到的设备列表。以下是 i2cdetect
的使用方法:
-
运行扫描:
- 要执行 I2C 扫描,请使用以下命令:
130|rk3588_s:/ # i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
-y
标志禁用交互模式,允许扫描无需提示。1
指定 I2C 总线编号(根据您的设置可能需要调整)- UU 表示该地址被驱动占用
- 以十六进制表示的设备地址编号会显示为 **
- 要执行 I2C 扫描,请使用以下命令:
二.i2cdump
i2cdump 是一个用于读取 I2C 设备寄存器值的命令行工具。它可以读取指定设备地址的寄存器值,并以十六进制格式显示出来
以下是使用 i2cdump
的示例:
- 读取全部寄存器:
- 要读取地址为
0x42
的 I2C 设备的所有寄存器,可以运行以下命令:i2cdump -y 1 0x42
- 要读取地址为
三.i2cget
i2cget 是 Linux 系统中的一个命令行工具,用于从 I2C 设备中读取数据。I2C(Inter-Integrated Circuit)是一种串行通信协议,常用于连接各种外设和传感器1
以下是使用 i2cget
的示例:
-
读取特定寄存器:
- 要从 I2C 设备读取特定寄存器的值,可以使用以下语法:
i2cget [-f] [-y] i2cbus chip-address [data-address [mode]]
-f
标志强制访问设备,即使设备已经忙碌(请谨慎使用)。-y
标志关闭交互模式,对于脚本编写很有用。i2cbus
指定 I2C 总线编号或名称(可通过i2cdetect -l
列出)。chip-address
是总线上芯片的地址(介于 0x08 和 0x77 之间的整数)。data-address
指定要从该芯片读取的地址(介于 0x00 和 0xFF 之间的整数)。如果省略,将读取当前活动的寄存器。mode
(可选)指定读取的大小(例如,b
表示字节,w
表示字,s
表示 SMBus 块,i
表示 I2C 块)。
- 要从 I2C 设备读取特定寄存器的值,可以使用以下语法:
-
示例:
- 要从总线 1 上地址为
0x2d
的 I2C 设备读取地址为0x11
的 8 位寄存器的值:i2cget 1 0x2d 0x11
- 要从总线 1 上地址为
0x48
的 I2C 设备读取地址为0x00
的 16 位寄存器的值:i2cget 1 0x48 0x00 w
- 要从总线 1 上地址为
四.i2cset
i2cset
命令用于向 I2C 设备写入数据。它允许您设置通过 I2C 总线可见的寄存器。以下是如何使用它的方法:
-
运行
i2cset
命令:- 要向 I2C 设备的特定寄存器写入数据,使用以下语法:
i2cset [-f] [-y] [-m mask] [-r] i2cbus chip-address data-address value [mode]
-f
标志强制访问设备,即使设备已经忙碌(请谨慎使用)。-y
标志关闭交互模式,对于脚本编写很有用。-m mask
(可选)指定要应用的位掩码。-r
标志允许读取寄存器的当前值。i2cbus
指定 I2C 总线编号或名称(可通过i2cdetect -l
列出)。chip-address
是总线上芯片的地址(介于 0x08 和 0x77 之间的整数)。data-address
指定要写入的芯片地址(介于 0x00 和 0xFF 之间的整数)。value
是要写入的数据值(介于 0x00 和 0xFF 之间的整数)。mode
(可选)指定写入的大小(例如,b
表示字节,w
表示字,s
表示 SMBus 块,i
表示 I2C 块)。
- 要向 I2C 设备的特定寄存器写入数据,使用以下语法:
-
示例:
- 要将值
0x42
写入总线 1 上地址为0x2d
的 I2C 设备的地址为0x11
的寄存器:i2cset 1 0x2d 0x11 0x42
- 要将值 0xa5 写入总线 2 上地址为
0x31
的 I2C 设备的地址为 0x0107的寄存器:i2cset -fy 2 0x31 0x01 0x07 0xa5 i
- 要将值
0x1234
写入总线 1 上地址为0x48
的 I2C 设备的地址为0x00
的寄存器:i2cset 1 0x48 0x00 0x1234 w
- 要将值