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