I2C
在使用I2C指令前,需要先由config指令配置对应的I2C接口或设备,参考 I2C配置。
i2c_scan
i2c_scan扫描总线上的设备地址。该指令用于获取连接到I2C总线的设备地址。
参数说明
- i2c_num
[int] (!)要扫描的I2C接口序号。 - begin
[int] (?)扫描起始地址,默认值0。取值范围0~127(十进制)。 - end
[int] (?)扫描结束地址,默认值127。取值范围0~127(十进制)。
样例
{
"action": "i2c_scan",
"i2c_num": 0
}应答
type-address 返回扫描到的I2C设备地址。
{
"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指令配置总线和设备:
{
"action": "config",
"i2c": [
{
"i2c_num": 0,
"sda": 15,
"scl": 16
}
],
"i2c_device": [
{
"name": "eeprom",
"i2c_num": 0,
"address": 80
}
]
}通过设备名
eeprom操作24C02N。例如,从EEPROM地址0x10处开始写入Hex数据A1A2A3A4A5A6A7A8。24C02N的写入时序为:先传输内部地址,接着传输要写入的数据。因此,可以将地址与数据合并为 data 参数值,以hex编码格式表示:json{ "action": "i2c_write", "device": "eeprom", "encoding": "hex", "data": "10A1A2A3A4A5A6A7A8" }当没有指定 read 参数(默认
0)时,i2c_write指令无应答。读取写入的数据。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 参数进行编码。
{
"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)的位置继续读取,每读取一个字节,指针自动递增。
{
"action": "i2c_read",
"device": "eeprom",
"encoding": "hex",
"read": 8
}应答
应答消息同 type-i2c。