I2C - 集成电路间总线
I2C总线在嵌入式领域非常常用。我们用一个例子解释它是如何工作的,以及如何在Raspberry Pi上设置它。
I2C特性
集成电路总线是一种同步的串行通信总线。飞利浦半导体公司在1982年负责这项发明,但该接口很快就得到了普及。
常用的同义词有:I2C、I2C或IIC。该接口采用了控制器-目标架构,允许控制器仅用两根线就能与多达112个设备进行通信。
控制器可以调整比特率以适应特定目标的需要。因此,I2C适用于很多设备,如传感器、EEPROM设备、时钟、电机驱动器等。
接线
I2C总线的布线真的再简单不过了,因为你只需要两根线。将控制器的串行时钟(SCL)引脚连接到目标设备的串行时钟引脚上,同时连接它们的串行数据(SDA)引脚。I2C软件将完成其余的工作。
如果你需要为你的I2C设备提供电源,你可以使用Raspberry Pi的3V3、5V和GROUND针脚。
一些设备,如我们的 BME688分线板 有一个I2C接头,所以你不需要任何电线来连接它们。
I2C通信
互联电路总线仅用两根线就可以连接128个设备。这是由于巧妙的通信原理而实现的。
这些线(SDA和SCL)从不主动驱动高电平。如果一个设备想发送一个逻辑1,它就会让这根线浮空。要发送一个逻辑零,就把线拉到地。
控制器发起通信。网络上的任何设备都可以充当控制器和目标。
下面的图形显示了独立的位。
为了开始通信,控制器发送一个开始位,然后是目标的I2C地址和期望的操作模式(R-读或W-写)。
在I2C通信中,目标必须每隔8位(在每个字节之后)返回一个ACK位。由于地址空间通常是7位,所以有128个(0到127)地址。其中16个是保留的。这就为设备留下了112个可能的地址。
目标地址和操作模式是一个字节,所以目标必须返回一个ACK位。然后控制器发送(8位)寄存器地址,目标机再次确认。从那以后,读写通信就不同了。
对于写入,控制器只是以8位块的形式发送数据。目标会确认每个块。一旦控制器完成了写入,它就会发送停止位。
对于读取,控制器再次发送开始位,然后是目标地址。目标确认并开始以8位块发送数据。这一次,控制器必须确认每个字节。为了停止读取,控制器发送NACK位,最后发送Stop位。
优势、劣势和应用
优势
I2C总线的优势是相当明显的。你可以用两根线和每个线的两个引脚连接128个设备。这真是太强大了。此外,你还有灵活的速度。硬件设置几乎不可能再简单了。与SPI不同,控制器知道目标是否正确接收了数据。
劣势
集成电路间总线需要更多的空间和功率,因为它使用了上拉电阻。与SPI相比,它的速度较慢。如果两个设备使用相同的I2C地址,你会遇到麻烦。该地址直接存储在设备上。有些设备让你在两个可能的地址中选择,方法是在设备上的特定位置焊接一个跳线。
应用
如果你搜索的是 传感器 在我们的商店里,你会注意到几乎所有非模拟的传感器都使用I2C接口。它在嵌入式领域非常普遍。有像I2C存储器这样的东西。很多时候,微控制器使用该总线进行通信。除此之外,许多DAC (D数字 A卤素 C转换器)和ADC(A卤素 D数字 Converter)与该接口兼容。
Raspberry Pi上的I2C
我们的 视频 展示了如何在你的Raspberry Pi上设置互连电路总线。
[...]此外,如果您有兴趣了解有关 I2C 的更多信息,请查看这篇文章。[...]
[...] 想进一步了解 I2C?点击此处查看我们的相关文章。[...]
[...] I2C - 集成电路总线 [...]
[...] I2C--集成电路总线 [...]
[...] I2C - 集成电路总线 [...]
[......]正如 Naveen 解释的那样,Nano 和 TFT 显示屏之间的连接基于串行外设接口 (SPI)。同时,操纵杆和按钮通过集成电路总线 (I2C) 连接。[...]