I²C(发音:I方C,在内核文档中写成I2C)是由Philips开发的协议。它是一个慢的两线协议(变速,高达400khz),具有高速扩展(3.4 MHz)。它提供了一种廉价的总线,用于连接不频繁或低带宽通信需求的许多类型的设备。I2C广泛应用于嵌入式系统。有些系统使用的变体不符合品牌要求,因此不被宣传为I2C,而是在不同的名称下,例如TWI(双线接口)、IIC。

官方的I2C规范是NXP Semiconductors发布的“​​I2C总线规范和用户手册​​”(UM10204)。

SMBus (System Management Bus)基于I2C协议,主要是I2C协议和信令的子集。许多I2C设备将在SMBus上工作,但一些SMBus协议添加了超出I2C协议所需的语义。现代PC主板依赖于SMBus。最常见的通过SMBus连接的设备是使用I2C eeprom配置的RAM模块和硬件监控芯片。

因为SMBus主要是通用I2C总线的子集,所以我们可以在许多I2C系统上使用它的协议。然而,有些系统不满足SMBus和I2C电气约束;以及其他系统不能实现所有通用SMBus协议语义或消息的协议。

术语

使用官方文档中的术语,I2C总线连接一个或多个主芯片和一个或多个从芯片。

I2C和SMBus简介_linux

                       简单的I2C总线

master 芯片是开始与从芯片通信的节点。在Linux内核实现中,它被称为 adapter 或总线。适配器驱动程序位于drivers/i2c/busses/子目录中。

algorithm 包含可用于实现整个I2C适配器(adapters)类的通用代码。每个特定的适配器驱动程序要么依赖于drivers/i2c/algos/子目录中的算法驱动程序,要么包含它自己的实现。

slave 芯片是在主芯片寻址时响应通信的节点。在Linux中,它被称为 client(客户端)。客户端驱动程序被保存在一个特定于它们所提供的特性的目录中,例如用于gpio扩展程序的drivers/media/gpio/以及用于视频相关芯片的drivers/media/i2c/。

对于图中的示例配置,您将需要I2C适配器的驱动程序 和 I2C设备的驱动程序(通常每个设备有一个驱动程序)。