从零开始的MicroPython(七) I2C

I2C是什么

I2C(Inter-Integrated Circuit)是一种串行通信协议,用于在微控制器、传感器、存储器芯片等设备之间进行通信。它是由飞利浦(Philips)公司在1982年开发的,后来成为一种标准。I2C使用两条线(SDA和SCL)进行数据传输,支持多主机和多从机的连接。它具有简单、灵活、低成本等特点,广泛应用于各种电子设备中。通讯格式有点像上世纪的打电话,先说自己要找谁,然后那个人给一个应答,我就说自己的讲话内容。

ESP32的I2C

I2C 使用两条双向开漏线:串行数据线 (SDA) 和串行时钟线 (SCL),通过电阻上拉。ESP32 有 2 个 I2C 控制器(也被称为端口),负责处理 I2C 总线上的通信。

单个 I2C 控制器既可以是主机也可以是从机。

通常,I2C 从机设备具有 7 位地址或 10 位地址。ESP32 支持 I2C 标准模式 (Sm) 和快速模式 (Fm),可分别达到 100 kHz 和 400 kHz。主机模式的 SCL 时钟频率不应大于 400 kHz。

选择哪种模式跟连接的模块有关系。看模块说明书。

MicroPython I2C

硬件和软件 I2C 实现都通过 machine.I2C 和 machine.SoftI2C类存在 。硬件 I2C 使用系统的底层硬件支持来执行读/写,并且通常高效且快速,但可能对可以使用的引脚有限制。软件 I2C 是通过位组合实现的,可以在任何引脚上使用,但效率不高。这些类具有相同的可用方法,主要区别在于它们的构造方式。

软件是指高低电平起伏模拟协议波形,硬件是指对引脚IO的寄存器操作。以后我发个合泰的I2C比较明白。

from machine import I2C

i2c = I2C(freq=400000)          # create I2C peripheral at frequency of 400kHz
                                # depending on the port, extra parameters may be required
                                # to select the peripheral and/or pins to use

i2c.scan()                      # scan for slaves, returning a list of 7-bit addresses

i2c.writeto(42, b'123')         # write 3 bytes to slave with 7-bit address 42
i2c.readfrom(42, 4)             # read 4 bytes from slave with 7-bit address 42

i2c.readfrom_mem(42, 8, 3)      # read 3 bytes from memory of slave 42,
                                #   starting at memory-address 8 in the slave
i2c.writeto_mem(42, 2, b'\x10') # write 1 byte to memory of slave 42
                                #   starting at address 2 in the slave
  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值