i2c-tools 读写16byte地址(两个地址周期)器件

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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值