I2C 系统为总线上的所有设备提供了两条共享的通信线路。这两条线路用于双向、半双工通信。I2C 允许有多个控制器和多个目标设备。这两条线路都需要上拉电阻。图 1 展示了 I2C 物理层的典型实现方式,I2C(Inter-Integrated Circuit)总线的硬件架构相对简单,主要由主设备、从设备、两条信号线(SDA和SCL)以及上拉电阻组成。
图 1 I2C 物理层的典型实现方式
I2C 被广泛采用的一个原因在于它仅使用两条线路进行通信。在图一中,第一条线路是 SCL,它主要由控制器设备控制,是一种串行时钟。SCL 用于同步将数据传入或传出目标设备。第二条线路是 SDA,它是串行数据线。SDA 用于向目标设备发送数据或从目标设备接收数据。例如,主设备Master1或者Master2可以向从设备Slave1或者Slave2发送配置数据和输出代码,或者从设备Slave1或者Slave2可以将转换数据发送回主设备Master1或者Master2。I2C 是半双工通信,每次只有一个主设备Master或从设备Slave在总线上发送数据。
I2C 由主设备Master设备启动和停止通信,这消除了总线争用的潜在问题。与从设备Slave的通信是通过总线上的唯一地址进行的。这使得 I2C 总线上可以同时存在多个主设备Master和多个目从设备Slave。
SDA 和 SCL 线与总线上的所有设备都有开漏连接。这需要一个上拉电阻连接到公共电压电源。
I2C硬件架构核心组件:主设备和从设备
主设备 (Master Device)
- 角色: 主设备负责发起和终止通信,生成时钟信号(SCL),并向从设备发送数据或从从设备接收数据。
- 数量: I2C总线可以有一个或多个主设备。在多主设备系统中,需要有仲裁机制来解决总线访问冲突。
- 例子: 微控制器(MCU)、微处理器(MPU)等。这些核心处理器作为主设备时,需要深入理解底层系统与网络机制以确保总线协调。
从设备 (Slave Device)
- 角色: 从设备响应主设备的请求,根据其唯一的地址被主设备寻址,并执行主设备指令(发送数据或接收数据)。从设备不能发起通信,也不能生成时钟信号。
- 数量: I2C总线可以连接多个从设备,理论上最多可达128个(7位地址)或1024个(10位地址)。
- 例子: 传感器(温度、湿度、压力等)、EEPROM、实时时钟(RTC)、LCD控制器、GPIO扩展器等。
I2C总线信号与引脚详解
核心信号线
图 2 I2C 总线信号连接图
-
串行数据线 (SDA - Serial Data Line)
- 功能: 这是一条双向数据线,用于在主设备和从设备之间传输数据。
- 特性: SDA线是开漏 (Open-Drain) 输出,这意味着它只能将总线拉低(逻辑0),而不能主动拉高。当所有设备都释放SDA线时,它会通过外部上拉电阻被拉高(逻辑1)。
-
串行时钟线 (SCL - Serial Clock Line)
- 功能: 这是一条单向或双向时钟线,用于同步主设备和从设备之间的数据传输。通常由主设备生成时钟信号。
- 特性: SCL线也是开漏 (Open-Drain) 输出,同样需要外部上拉电阻。主设备控制SCL线的时钟频率,从设备可以通过“时钟延长”(clock stretching)功能在需要更多时间处理数据时暂时拉低SCL线,暂停通信。
-
上拉电阻 (Pull-up Resistors)
- 必要性: 由于SDA和SCL线都是开漏输出,它们需要外部上拉电阻来确保在没有设备拉低时,总线能够保持高电平(逻辑1)。
- 作用: 上拉电阻将SDA和SCL线连接到正电源(VCC)。当总线上的设备不驱动信号线时,上拉电阻会将信号线拉至高电平。当设备需要发送逻辑0时,它会拉低信号线。
- 阻值选择: 上拉电阻的阻值选择至关重要,直接影响通信速度和可靠性。过大的阻值会导致信号上升沿变慢,影响高速通信;过小的阻值则会增加功耗,并可能使设备无法可靠拉低总线。通常,阻值在1kΩ到10kΩ之间,需根据总线电容、工作电压和目标通信速度综合计算。这是硬件接口与电路设计中保证信号完整性的关键一环。
连接方式
I2C总线的连接方式非常简单,所有连接到总线的设备都并联在SDA和SCL这两条线上。
- 电源连接: 所有I2C设备都必须连接到相同的电源(VDD或VCC)和地(GND)。
- SDA连接: 主设备的SDA引脚、所有从设备的SDA引脚以及一个上拉电阻都连接到同一条SDA总线上。
- SCL连接: 主设备的SCL引脚、所有从设备的SCL引脚以及另一个上拉电阻都连接到同一条SCL总线上。
- 上拉电阻位置: 上拉电阻通常放置在总线的任意一点,但通常靠近主设备或总线的物理中心,以确保信号完整性。每个I2C总线只需要一组上拉电阻。
其他可选引脚
图 3 I2C 设备常见引脚
-
设备地址引脚 (A2, A1, A0): 这些是硬件地址配置引脚,通过将它们连接到VCC或GND来设置设备在总线上的7位地址中的低几位。这使得单个总线系统上可以区分并寻址多个相同的设备(例如,最多8个地址不同的EEPROM芯片)。
-
写保护(WP): 当写保护输入端连接到地(GND)时,允许正常的写操作。当WP被拉高到电源电压VCC时,禁止对设备的所有写操作。如果未连接,WP会在内部被拉低到地(GND),这是一个重要的安全与数据保护机制。
-
报警功能(ALERT):
图 4 I2C 设备的ALERT引脚功能
I2C 设备中的 ALERT 引脚(也常被称为 SMBALERT 或 SMBA)是一个可选的信号线,它的主要作用是允许从设备在需要主设备关注时主动发出中断请求,而无需主设备不断地轮询每个从设备的状态。这在许多应用中都非常有用,尤其是在系统管理和电源管理等领域。当从设备需要紧急通知主设备(例如传感器检测到超出阈值、电池电量低、设备错误等),它可以通过拉低 ALERT 引脚来立即通知主设备,从而实现事件驱动的高效通信。
总结
I2C总线凭借其简洁的两线制、支持多主多从的架构以及灵活的寻址方式,成为板级设备间短距离通信的主流选择。理解其硬件架构,特别是开漏输出与上拉电阻的配合、主从设备的角色定义以及各类引脚的功能,是进行可靠电路设计和底层驱动开发的基础。接下来,我们将深入解析在此硬件基础上的I2C通信协议细节。
|