class I2C – I2C通信
2024-10-21
该类用于设备之间通信的双线协议。
构造函数
machine.I2C
class machine.I2C(I2Cn, MODE, [group])
参数描述:
I2Cn
- I2C 通路索引号,int类型,说明如下:I2C0
:0
- 通道0I2C1
:1
- 通道1I2C2
:2
- 通道2MODE
- I2C 的工作模式,int类型,说明如下:STANDARD_MODE
:0
- 标准模式FAST_MODE
:1
- 快速模式ENHANCED_FAST_MODE
:2
- 快速模式增强 (仅支持FCM360W)[group]
- 选择在不同管脚使用IIC,目前仅FCM362K支持,缺省值为0
示例:
>>> from machine import I2C
>>> # 创建I2C对象
>>> i2c_obj = I2C(I2C.I2C0, I2C.STANDARD_MODE) # 返回I2C对象
示例:
>>> from machine import I2C
>>> # 创建I2C对象
>>> i2c_obj = I2C(I2C.I2C0, I2C.STANDARD_MODE,0) # 返回I2C对象
I2C引脚对应关系:
平台 | 引脚 |
---|---|
EC600U | I2C0: SCL: 引脚号11 SDA: 引脚号12 I2C1: SCL:引脚号57 SDA:引脚号56 |
EC200U | I2C0: SCL: 引脚号41 SDA: 引脚号42 I2C1: SCL:引脚号141 SDA:引脚号142 |
EC200A/UC200A | I2C0: SCL: 引脚号41 SDA: 引脚号42 |
EC600S/EC600N | I2C1: SCL:引脚号57 SDA:引脚号56 |
EC100Y | I2C0: SCL:引脚号57 SDA:引脚号56 |
BC25PA | I2C0: SCL: 引脚号23 SDA: 引脚号22 I2C1: SCL:引脚号20 SDA:引脚号21 |
EC800N | I2C0: SCL:引脚号67 SDA:引脚号66 |
BG95 | I2C0: SCL: 引脚号18 SDA: 引脚号19 I2C1: SCL:引脚号40 SDA:引脚号41 I2C2: SCL:引脚号26 SDA:引脚号25 |
EC600M | I2C0: SCL: 引脚号9 SDA: 引脚号64 I2C1: SCL:引脚号57 SDA:引脚号56 I2C2: SCL:引脚号67 SDA:引脚号65 |
EG915U | I2C0: SCL: 引脚号103 SDA: 引脚号114 I2C1: SCL:引脚号40 SDA:引脚号41 |
EC800M/EG810M | I2C0: SCL: 引脚号67 SDA: 引脚号66 I2C2: SCL:引脚号68 SDA:引脚号69 |
EG912N | I2C1: SCL: 引脚号40 SDA: 引脚号41 |
EC600E | I2C1: SCL: 引脚号57(11) SDA: 引脚号56(12) 注:模块的Pin57与PIN11、Pin56 与Pin12 内部是同一个管脚。 |
EC800E | I2C0: SCL: 引脚号67(57) SDA: 引脚号66(58) 注: 1.模块的Pin67与Pin57、Pin66 与Pin58 内部是同一个管脚。 2.EC800ECN_LE&LQ&CG 的57/58引脚不可用。 |
EC600G | I2C0: SCL:引脚号57 SDA:引脚号56 I2C1: SCL: 引脚号11 SDA: 引脚号12 |
EC800G | I2C0: SCL:引脚号67 SDA:引脚号66 I2C1: SCL: 引脚号57 SDA: 引脚号58 I2C2: SCL:引脚号68 SDA:引脚号69 |
EG912U | I2C1: SCL: 引脚号40 SDA: 引脚号41 |
EC600K | I2C1: SCL:引脚号57 SDA:引脚号56 I2C3: SCL:引脚号11 SDA:引脚号12 |
EC800K/EG800K | I2C0: SCL: 引脚号67 SDA: 引脚号66 I2C2: SCL:引脚号68 SDA:引脚号69 |
FCM360W | I2C0: SCL:引脚号29 SDA:引脚号23 |
FCM362K | I2C0: SCL:引脚号30 SDA:引脚号29 |
BC32 | I2C0: SCL: 引脚号12 SDA: 引脚号26 I2C1: SCL:引脚号43 SDA:引脚号44 |
BC92 | I2C0: SCL: 引脚号12 SDA: 引脚号26 I2C1: SCL:引脚号43 SDA:引脚号44 |
EG915N | I2C1: SCL:引脚号40 SDA:引脚号41 |
EC800Z | I2C0: SCL: 引脚号67 SDA: 引脚号66 I2C1: SCL:引脚号57 SDA:引脚号58 |
方法
I2C.read
I2C.read(slaveaddress, addr,addr_len, r_data, datalen, delay)
该方法用于从 I2C 总线中读取数据。
参数描述:
slaveaddress
- I2C 设备地址,int类型,传入七位设备地址即可,低位自动补1。addr
- I2C 寄存器地址,bytearray类型。addr_len
- 寄存器地址长度,int类型。r_data
- 接收数据的字节数组,bytearray类型。datalen
- 字节数组的长度,int类型。delay
- 延时,数据转换缓冲时间(单位ms),int类型。
返回值描述:
成功返回整型值0
,失败返回整型值-1
。
I2C.write
I2C.write(slaveaddress, addr, addr_len, data, datalen)
该方法用于从 I2C 总线中写入数据。
参数描述:
slaveaddress
- I2C 设备地址,int类型,传入七位设备地址即可,低位自动补0。addr
- I2C 寄存器地址,bytearray类型。addr_len
- 寄存器地址长度,int类型。data
- 写入的数据,bytearray类型。datalen
- 写入数据的长度,int类型。
返回值描述:
成功返回整型值0
,失败返回整型值-1
。
使用示例:
需要连接设备使用。
import log
from machine import I2C
import utime
'''
I2C使用示例
'''
# 设置日志输出级别
log.basicConfig(level=log.INFO)
i2c_log = log.getLogger("I2C")
if __name__ == '__main__':
I2C_SLAVE_ADDR = 0x1B # I2C 设备地址
WHO_AM_I = bytearray([0x02, 0]) # I2C 寄存器地址,以buff的方式传入,取第一个值,计算一个值的长度
data = bytearray([0x12, 0]) # 输入对应指令
i2c_obj = I2C(I2C.I2C0, I2C.STANDARD_MODE) # 返回I2C对象
i2c_obj.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2) # 写入data
r_data = bytearray(2) # 创建长度为2的字节数组接收
i2c_obj.read(I2C_SLAVE_ADDR, WHO_AM_I, 1, r_data, 2, 0) # read
i2c_log.info(r_data[0])
i2c_log.info(r_data[1])
常量
常量 | 说明 | 适用平台 |
---|---|---|
I2C.I2C0 | I2C通路索引号: 0 | EC100Y/EC600U/EC200U/EC200A/BC25PA/EC800N/BG95M3/EC600M/EG915U/ EC800M/EG810M/EC800E/EC800K/FCM360W/FCM362K/BC32/BC92/EC800Z |
I2C.I2C1 | I2C通路索引号: 1 | EC600S/EC600N/EC600U/EC200U/BC25PA/BG95M3/EC600M/EG915U/EC800M/EG810M/ EG912N/EC600E/EC600K/BC32/BC92/EG915N/EC800Z |
I2C.I2C2 | I2C通路索引号: 2 | BG95M3/EC600M/EC800K |
I2C.I2C3 | I2C通路索引号: 3 | EC600K |
I2C.STANDARD_MODE | 标准模式 | -- |
I2C.FAST_MODE | 快速模式 | -- |
I2C.ENHANCED_FAST_MODE | 快速模式增强 | FCM360W |