i2c-tools
当前i2c-tool主要提供以下命令
i2cdetect
i2cget
i2cset
i2cdump
i2ctransfer
其中用于传输的i2cget、i2cset、i2cdump仅能支持8byte寄存器地址,也就是一个地址周期的器件
想读写16byte地址的器件必须使用i2ctransfer
i2ctransfer
Usage: i2ctransfer [-f] [-y] [-v] [-V] [-a] I2CBUS DESC [DATA] [DESC [DATA]]...
I2CBUS is an integer or an I2C bus name
DESC describes the transfer in the form: {r|w}LENGTH[@address]
1) read/write-flag 2) LENGTH (range 0-65535) 3) I2C address (use last one if omitted)
DATA are LENGTH bytes for a write message. They can be shortened by a suffix:
= (keep value constant until LENGTH)
+ (increase value by 1 until LENGTH)
- (decrease value by 1 until LENGTH)
p (use pseudo random generator until LENGTH with value as seed)
可以看到支持的地址为0-65535
使用方法
环境:eeprom使用at24c128,写入,读取操作协议如下
一个例子
读:i2ctransfer -y -f 0 w2@0x50 0 0 r4
写:i2ctransfer -y -f 0 w4@0x50 0 0 0x12 0x34
自带参数和总线就不说了,主要是后面地址部分
w4为写4个字节;r4为读4个字节;@0x50为器件地址是0x50;
写:
命令含义:在总线0地址为0x50的器件的0地址处依次写入0x12,0x34两字节数据。
根据eeprom协议,写操作后面跟两个周期的操作地址,当前在0地址操作所以@0x50 后面跟两个字节的0,然后再跟数据;所以写操作命令可以这样理解
i2ctransfer -y -f I2CBUS w(opaddr_len+data_len)@slave_address opaddr data
读:
命令含义:依次读取总线0地址为0x50的器件的0地址处4字节数据
根据eeprom协议,读操作需要先发送操作地址再进行读取操作,当前在0地址操作所以@0x50 后面跟两个字节的0,然后使用r4依次读取4字节数据;所以读操作命令可以这样理解
i2ctransfer -y -f I2CBUS w(opaddr_len)@slave_address opaddr r(data_len)