【I2C】i2c-tools工具使用,以及开发调试

发布时间:2024年01月05日

i2c调试

eeprom

手动创建eeprom设备调试,例如0x50 是FRU的地址,i2c-3是bus

创建设备

echo 24c32 0x50 > /sys/bus/i2c/devices/i2c-4/new_device

如果设备正确,将成功被创建,并且生成/sys/bus/i2c/devices/4-0050/eeprom
eeprom

使用hexdump -C eeprom 可以查看里面的数据
在这里插入图片描述
如果想要写二进制数据,可使用命令

dd if=/path/to/fru.bin of=/sys/bus/i2c/devices/4-0054/eeprom bs=1 count=256

删除设备的命令

echo 0x50 > /sys/bus/i2c/devices/i2c-3/delete_device

i2c-tools工具

i2cdetect

扫描I2C BUS上所有设备
https://linux.die.net/man/8/i2cdetect

显示所有bus
i2cdetect -l

扫描bus下设备
i2cdetect -y 3
3指bus number

i2cdump

显示设备上所有register值
https://linux.die.net/man/8/i2cdump

读取某I2C设备下所有registers的值
i2cdump -y 16 0x1d
16为i2c bus
0x1d为i2c slave

i2cget

读取装置上某个register的值
https://linux.die.net/man/8/i2cget

i2cget -f -y

b (read byte data, default)
w (read word data)
i (read I2C block data)

获取bus 11上 0x32设备的数据
1)get byte
i2cget -f -y 11 0x32 0x00
i2cget -f -y 11 0x32 0x00 b

2)getword
i2cget -f -y 11 0x32 0x00 w

(get 6 bytes)最大只能获取32个字节
i2cget -f -y 11 0x32 0x00 i 6

i2cset

写入设备上某个register
https://linux.die.net/man/8/i2cset

i2cset -f -y

c (byte, no value)
b (byte data, default)
w (word data)
i (I2C block data)
s (SMBus block data)
Append p for SMBus PEC

set byte
i2cset -f -y
i2cset -f -y
切换bus 11上 0x70 (pca9548)设备的channel
(如关闭9548的channel 1-8(bit0-7))
i2cset -f -y 6 0x70 0x00
(如打开9548的channel 1(bit0))
i2cset -f -y 6 0x70 0x01
(如打开9548的channel 2(bit1))
i2cset -f -y 6 0x70 0x02
(如打开9548的channel 3(bit2))
i2cset -f -y 6 0x70 0x04
(如打开9548的channel 1-8(bit0-7))
i2cset -f -y 6 0x70 0xFF

mb
-bus6
–pca9548(0x70)
—bp0(ch0)
—-pca9548(0x74)
—–disk0(ch0)
i2cset -f -y 6 0x70 0x01
i2cset -f -y 6 0x74 0x01
i2cget -f -y 4 0x33 0x00

1)set word
i2cset -f -y
i2cset -f -y 6 0x32 0x0001 w

set block
i2cset -f -y i
i2cset -f -y i
i2cset -f -y 6 0x32 0x00 0x01 0x02 0x03 i

write smbus block data with pec
i2cset -f -y sp
i2cset -f -y 6 0x32 0x00 0x01 0x02 0x03 … sp

i2ctransfer

传输i2c原始数据

write
i2ctransfer w@
向0x32写入2字节数据
i2ctransfer 11 w2@0x32 0x00 0x01
= = i2cset -f -y 6 0x32 0x00 0x01

向0x32写入256字节数据
i2ctransfer 11 w256@0x32 0x00 0x01 0x02 …. 0xff

write&read
i2ctransfer w@ r
向0x32写入2字节数据,然后读取6个字节的数据i2ctransfer 11 w1@0x32 0x0e r32
i2ctransfer 11 w2@0x32 0x00 0x01 r6
= =
i2cset -f -y 6 0x32 0x00 0x01
i2cget -f -y 6 0x32 0x00 i 6

i2ctransfer 11 w2@0x32 0x00 0x01….

切PCA9548
i2ctransfer -y -f 6 w1@0x70 0x00
i2ctransfer -y -f 6 w1@0x70 0x01

文章来源:https://blog.csdn.net/qq_38202733/article/details/135411290
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。