Skip to content

I2C ​

在使用I2C指令前,需要先由config指令配置对应的I2C接口或设备,参考 I2C配置。

i2c_scan ​

i2c_scan扫描总线上的设备地址。该指令用于获取连接到I2C总线的设备地址。

参数说明 ​

  • i2c_num [int] (!) 要扫描的I2C接口序号。
  • begin [int] (?) 扫描起始地址,默认值0。取值范围0~127(十进制)。
  • end [int] (?) 扫描结束地址,默认值127。取值范围0~127(十进制)。

样例 ​

json
{
  "action": "i2c_scan",
  "i2c_num": 0
}

应答 ​

type-address 返回扫描到的I2C设备地址。

json
{
  "type": "address",
  "i2c_num": 0,
  "data": [80, 92]
}
  • type - 数据类型 address(I2C设备地址)。
  • i2c_num - 扫描的I2C接口序号。
  • data - 设备地址数组。每个数组元素表示一个设备地址,地址值为十进制格式。

i2c_write ​

i2c_write向I2C设备写数据。该指令向I2C设备写入数据,并可选择在写入数据后,连续读取指定长度的数据。

参数说明 ​

  • device [string] (!) 要操作的I2C设备名(config指令中 i2c_device 配置对象的 name 属性值)。
  • encoding [string] (?) 指令数据 data 的编码格式。默认值json。可选值:
    • json - 经JSON转义的字符串,适用于文本数据。
    • base64 - Base64编码的字符串,适用于二进制数据。
    • hex - Hex编码的字符串,适用于二进制数据。
  • data [string] (!) 按照 encoding 格式编码后的数据。
  • read [int] (?) 写入完成后,要继续读取的字节数。默认值0(不读取),最大允许值2048。

样例 ​

以24C02N EEPROM为例。假设EEPROM的I2C地址为80。首先使用config指令配置总线和设备:

json
{
  "action": "config",
  "i2c": [
    {
      "i2c_num": 0,
      "sda": 15,
      "scl": 16
    }
  ],
  "i2c_device": [
    {
      "name": "eeprom",
      "i2c_num": 0,
      "address": 80
    }
  ]
}
  1. 通过设备名eeprom操作24C02N。例如,从EEPROM地址0x10处开始写入Hex数据A1A2A3A4A5A6A7A8。24C02N的写入时序为:先传输内部地址,接着传输要写入的数据。因此,可以将地址与数据合并为 data 参数值,以hex编码格式表示:

    json
    {
      "action": "i2c_write",
      "device": "eeprom",
      "encoding": "hex",
      "data": "10A1A2A3A4A5A6A7A8"
    }

    当没有指定 read 参数(默认0)时,i2c_write指令无应答。

  2. 读取写入的数据。24C02N的读取时序为:先传输要读取的起始地址,接着连续读取数据。因此,可以将起始地址作为 data 参数值,要读取的字节数作为 read 参数值:

    json
    {
      "action": "i2c_write",
      "device": "eeprom",
      "encoding": "hex",
      "data": "10",
      "read": 8
    }

    指令将应答读取的数据,并使用与 encoding 参数一致的编码格式。应答消息见 type-i2c。

提示

i2c_write 或 i2c_read 是通用的I2C接口操作指令,而非某个I2C设备的专有指令。在使用特定的I2C设备时,应根据数据手册的时序要求,来确定合适的指令参数。

应答 ​

type-i2c 返回从I2C设备读取的数据。数据将按照指令的 encoding 参数进行编码。

json
{
  "type": "i2c",
  "device": "eeprom",
  "encoding": "hex",
  "data": "A1A2A3A4A5A6A7A8"
}
  • type - 数据类型 i2c(I2C设备数据)。
  • device - I2C设备名。
  • encoding - 数据编码(即指令中 encoding 参数指定的编码)。
  • data - 编码后的数据(此处为hex编码)。

i2c_read ​

i2c_read从I2C设备读取数据。

参数说明 ​

  • device [string] (!) 要操作的I2C设备名(config指令中 i2c_device 配置对象的 name 属性值)。
  • encoding [string] (?) 对读取的数据进行编码的格式。默认值json。可选值:
    • json - 对读取的数据进行JSON转义,适用于文本数据。
    • base64 - 对读取的数据进行Base64编码,适用于二进制数据。
    • hex - 将读取的数据转换为Hex文本,适用于二进制数据。
  • read [int] (!) 要读取的字节数。最大允许值2048。

样例 ​

以24C02N EEPROM为例。当不指定读取地址时,24C02N会从内部地址指针(address counter)的位置继续读取,每读取一个字节,指针自动递增。

json
{
  "action": "i2c_read",
  "device": "eeprom",
  "encoding": "hex",
  "read": 8
}

应答 ​

应答消息同 type-i2c。