什么是I2C通信协议?

描述

在本教程中,我们将学习如何在Raspberry Pi Pico中使用I2C引脚并遍历I2C扫描器代码。

硬件部件:

Raspberry Pi Pico板× 1个

目录

1.概述

2.什么是I2C通信协议

3. Raspberry Pi Pico中的I2C引脚

4.如何将Raspberry Pi Pico的I2C引脚与I2C传感器或模块一起使用?

5. Raspberry Pi Pico I2C扫描器代码

概述

在本教程中,我们将学习如何在Raspberry Pi Pico中使用I2C引脚并遍历I2C扫描器代码。Raspberry Pi Pico使用RP2040微控制器构建。该开发板共有36个GPIO引脚中的26个多功能GPIO引脚。在10 GPIO引脚不暴露的,因此它们不能被使用。在26个可用的GPIO引脚中,有2对I2C引脚将在本文中讨论。

我们将看到什么是I2C通信协议以及它如何工作。我们还将详细了解Raspberry Pi Pico的I2C引脚。我们将采取I2C扫描代码作为例子,并检查了几个I2C的I2C地址如何启用的传感器和模块。在此之前,您可以查看我们的Raspberry Pi Pico入门教程,以了解有关该模块的更多信息。

什么是I2C通信协议

I2C(集成电路间)是一种同步,多主机,多从机,分组交换,单端,串行通信总线。它广泛用于在板内短距离通信中将低速外围IC连接到处理器和微控制器。

像UART通信一样,I2C仅使用两条线在设备之间传输数据。

微控制器

这两根线分别称为串行时钟线(SCL)和串行数据线(SDA)。要传输的数据通过SDA线发送,并与SCL的时钟信号同步。I2C网络上的所有设备/ IC均连接到相同的SCL和SDA线,如上所示。

连接到I2C总线的设备是主机或从机。在任何时刻,只有一个主机在I2C总线上保持活动状态。它控制SCL时钟线并决定要在SDA数据线上执行的操作。

微控制器

响应此主设备指令的所有设备都是从设备。为了区分连接到同一I2C总线的多个从设备,每个从设备在物理上都分配有一个永久的7位地址。

微控制器

当主设备要与从设备进行数据传输时,它会在SDA线上指定此特定从设备地址,然后继续进行传输。因此,有效的通信发生在主设备和特定从设备之间。除非所有其他从属设备的地址都由SDA线上的主设备指定,否则它们不会响应。

Raspberry Pi Pico中的I2C引脚

微控制器

微控制器RP2040芯片具有两个I2C控制器。您可以通过Raspberry Pi Pico的GPIO引脚访问两个I2C控制器。下表显示了GPIO引脚与两个I2C控制器的连接。

微控制器

控制器的每个连接都可以通过多个GPIO引脚进行配置,如图所示。但是在使用I2C控制器之前,您应该在软件中配置要与特定I2C控制器一起使用的GPIO引脚。

Raspberry Pi Pico I2C引脚的功能

Raspberry Pi Pico具有RP2040芯片,该芯片支持以下功能:1.设备可以在主模式或从模式下工作,默认从地址为0x055

2. I2C引脚具有3种速度模式:标准(0至100 Kb / s ),快速(《= 400 Kb / s )和快速增强模式(《= 1000 Kb / s )

3.它既可以发送也可以接收缓冲区

4.也可用于中断和DMA模式

如何将Raspberry Pi Pico的I2C引脚与I2C传感器或模块一起使用?

现在让我们学习如何将Raspberry Pi Pico的I2C引脚与任何其他基于I2C的传感器或模块一起使用。在这种情况下,我们可以将Raspberry Pi Pico用作Mater Device ,将其他外部传感器或模块用作Slave Device 。

这是我们将3种不同的I2C器件连接到Pico板上的电路。这3种器件是BME680传感器,MPU6050传感器和0.96英寸OLED显示器。

微控制器

在此示例中,我们将MPU6050 ,BME680和OLED Display的SDA和SCL引脚连接到Raspberry Pi Pico的公共I2C线。由于有多个I2C引脚,我们将仅使用Raspberry Pi Pico的一对I2C引脚。我们将使用GPIO8作为SDA0和GPIO9作为SCL0 。

微控制器

Raspberry Pi Pico I2C扫描器代码

现在,让我们看看Raspberry Pi Pico I2C扫描器代码。该代码是用MicroPython编写的。您可以使用Thonny IDE或uPyCraft IDE将Raspberry Pi Pico连接到计算机。

以下代码将扫描连接到Raspberry Pi Pico的I2C引脚的所有传感器的I2C地址。复制代码,然后下载并运行。

import machine

sda=machine.Pin(8)

scl=machine.Pin(9)

i2c=machine.I2C(0,sda=sda, scl=scl, freq=400000)

print(‘Scan i2c bus.。.’)

devices = i2c.scan()

if len(devices) == 0:

print(“No i2c device !”)

else:

print(‘i2c devices found:’,len(devices))

for device in devices:

print(“Decimal address: ”,device,“ | Hexa address: ”,hex(device))

运行代码后,Micropython将尝试扫描连接到Pico Board的I2C设备。您最多可以连接127个I2C从设备。设备将扫描该地址并将其显示在Shell窗口中。

微控制器

• 所述I2C地址的OLED显示器是60 ,其以十六进制为0x3C 2。

• 所述I2C地址的MPU6050是104 ,其以十六进制0x68 3。

• 该I2C地址的BME680是119 ,其十六进制是0x77。
       责任编辑:pj

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分