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

  • Post author:
  • Post category:其他




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)



版权声明:本文为lqqtwo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。