I2C
– 集成电路总线¶
I²C(Inter-Integrated Circuit)字面上的意思是集成电路之间,它其实是I²C Bus简称,所以中文应该叫集成电路总线。
它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。
使用示例: 以HaaS EDU K1 上的温度传感器读写为例¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # coding=utf-8
from machine import I2C
from machine import Pin
import utime
i2c=I2C(sda=Pin(5),scl=Pin(4), id=1, addr=0x40)
_I2C_ADDRESS = 0x40
i2c.writeto(_I2C_ADDRESS, bytearray([0x84, 0xB8]))
data = i2c.readfrom(_I2C_ADDRESS, 2)[0]
hex(data)
# write RH/T User Register 1
i2c.writeto(_I2C_ADDRESS, bytearray([0xE6, 0xBB]))
# Read RH/T User Register 1
i2c.writeto(_I2C_ADDRESS, bytearray([0xE7]))
data = i2c.readfrom(_I2C_ADDRESS, 1)[0]
hex(data)
# reset
i2c.writeto(_I2C_ADDRESS, bytearray([0xFE]))
# read tem
i2c.writeto(_I2C_ADDRESS, bytearray([0xF3]))
utime.sleep_ms(10)
data = i2c.readfrom(_I2C_ADDRESS, 2)[0]
hex(data)
|
函数接口¶
-
machine_i2c.
I2C
(id, scl, sda, freq, timeout, mode, addr, addrsize)[源代码]¶ 创建 I2C 类对象
- 参数
id(int) – 必选参数, 设备索引号,每个硬件设备支持的通道数目受硬件限制,具体通道数目请参考硬件手册。HaaS硬件默认提供两个通道。
scl(Pin) – 可选参数, 表示 scl 使用的硬件管脚信息。
sda(Pin) – 可选参数, 表示 sda 使用的硬件管脚信息。
freq(int) – 可选参数, I2C工作频率,默认为400KHz。
timeout(int) – 可选参数, 超时等待参数,单位是毫秒,默认为10ms。
mode(int) – 可选参数, 工作模式,1 表示主模式, 2 表示从模式。
addr(int) – 必选参数, I2C 设备地址。
addrsize(int) – 可选参数, I2C 地址模式, 7表示7bit模式, 10表示10bit模式。 默认为7bit模式
- 返回
I2C 类句柄
- 引发
ValueError – EINVAL
-
machine_i2c.
readinto
(buf, nack)[源代码]¶ 从I2C设备读数据
- 参数
buf(bytearray) – 必选参数,读取数据的存放空间。
nack(bool) – 必选参数,是否需要在读取结束后发送nack信号。
- 返回
None
-
machine_i2c.
readfrom
(addr, size, stop=True)[源代码]¶ 从addr指定的从属设备中读取nbytes。使用读取的数据返回一个字节对象。
- 参数
addr(int) – 必选参数,I2C 设备地址。
size(int) – 必选参数,需要读取的数据字节数。
stop(bool) – 可选参数,是否发送停止位,默认发送停止位。
- Returns (bytearray)
读取到的有效数据
-
machine_i2c.
readfrom_into
(addr, buf, stop=True)[源代码]¶ 从addr指定的从属设备中读取到缓冲区中。读取的字节数量即为缓冲区的长度。
- 参数
addr(int) – 必选参数,I2C 设备地址。
buf(bytearray) – 必选参数,读取后数据存放空间。
stop(int) – 可选参数,是否发送停止位,默认发送停止位。
- 返回
None
-
machine_i2c.
writeto
(addr, buf, stop=True)[源代码]¶ 将字节从缓冲区中读取到addr指定的从属设备中。
停止参数显示是否应在传输结束时发送一个停止位。若为False,则传输应在稍后继续进行。
- 参数
addr(int) – 必选参数,I2C 设备地址。
buf(bytearray) – 必选参数,待写数据。
stop(int) – 可选参数,是否发送停止位,默认发送停止位。
- 返回
None
-
machine_i2c.
writevto
(addr, vector, stop=True)[源代码]¶ 将 vector 中包含的字节写到 addr 指定的从设备中。 vector 应该是具有缓冲协议的元组或对象列表。
发送一次 addr ,然后按顺序写出 vector 中每个对象的字节。
vector 中的对象的长度可能为零字节,在这种情况下,它们对输出没有帮助。
如果从 vector 中的一个对象写入一个字节后接收到的是NACK,则不发送任何剩余的字节和对象。
如果 stop 为 true,则即使收到一个NACK,也会在传输结束时生成STOP条件。 该函数返回已接收的ACK数。
- 参数
addr(int) – 必选参数,I2C 设备地址。
vector(list) – 待写数据队列,数据格式为bytearray。
stop(int) – 可选参数,是否发送停止位,默认发送停止位。
- 返回
空
-
machine_i2c.
readfrom_mem
(addr, memaddr, nbytes, addrsize=8)[源代码]¶ 从memaddr指定的内存地址开始,从 addr 指定的从属设备中将nbytes读取到缓冲区中。
addrsize参数指定以位为单位的地址大小(在HaaS上,该参数未被识别,地址大小通常为8位)。
使用读取的数据返回一个字节对象。
- 参数
addr(int) – 必选参数,I2C 设备地址。
memaddr(int) – 必选参数,读取的内存起始地址。
nbytes(int) – 必选参数,待读取的数据长度。
addrsize(int) – 可选参数,地址位宽大小,默认为8。
- Returns (bytearray)
读取到的数据
-
machine_i2c.
readfrom_mem_into
(addr, memaddr, buf, addrsize=8)[源代码]¶ 从memaddr指定的内存地址开始,从addr 指定的从属设备中将nbytes读取到缓冲区中。读取的字节数量即为缓冲区的长度。
addrsize参数指定以位为单位的地址大小(在HaaS上,该参数未被识别,地址大小通常为8位)
- 参数
addr(int) – 必选参数,I2C 设备地址。
memaddr(int) – 必选参数,读取的内存起始地址。
buf(bytearray) – 必选参数,读取到的数据存放空间。
addrsize(int) – 可选参数,地址位宽大小,默认为8。
- 返回
None