目录

一、核心硬件特性

二、硬件设计要求

三、常见硬件问题排查点


I²C(Inter-Integrated Circuit)是一种非常流行的同步、串行、多主从式、半双工通信总线,广泛应用于连接低速外设(如传感器、EEPROM、RTC、IO扩展器等)到微控制器或处理器。其硬件特性和要求相对简单,但也需要严格遵守以确保可靠通信。

下面我们聊聊其特性

一、核心硬件特性

1.两线制设计(Two-Wire Interface - TWI):

  • SDA (Serial Data Line): 传输双向数据。

  • SCL (Serial Clock Line): 由主设备(当前控制总线的设备)提供时钟信号,用于同步数据传输。

  • 仅需两根线即可连接多个设备,极大地简化了板级布线。

2.开漏输出 (Open-Drain / Open-Collector):

  • 这是I²C最核心的电气特性。 所有连接到总线上的设备(主设备和从设备)的SDA和SCL引脚必须配置为开漏输出模式(在CMOS工艺中)或集电极开路输出模式(在双极型晶体管工艺中)。

  • 作用:

    • 线与 (Wired-AND) 逻辑: 允许多个设备驱动同一根线而不会损坏。任何设备都可以主动将总线拉低(逻辑0),而只有所有设备都释放总线(输出高阻态)时,总线才会被上拉电阻拉高(逻辑1)。这是实现多主仲裁时钟同步的基础。

    • 电平兼容性: 不同工作电压的设备(只要它们能容忍彼此的逻辑高电平)可以通过适当选择上拉电阻的电压源(Vpull-up)连接到同一总线上,实现电压域桥接(但需要满足输入电平要求)。

3.上拉电阻 (Pull-Up Resistors):

  • 绝对必需! 由于采用开漏结构,SDA和SCL线上必须各连接一个上拉电阻Rp)到正电源(通常是设备中最高的工作电压VDD,或一个特定的Vpull-up)。

  • 作用: 在没有任何设备主动拉低总线时,将总线电平拉高到Vpull-up(逻辑1)。

  • 取值要求: 电阻值(Rp)的选择是硬件设计的关键,需要权衡:

    • 最小值: 由总线最大允许电流(IOL,设备输出低电平时的电流能力)和Vpull-up决定。Rp(min) = (Vpull-up - VOL(max)) / IOL(max)VOL(max)是设备保证的逻辑低电平最大值(通常为0.4V)。

    • 最大值: 由总线电容(Cb)和所需的最大上升时间(tr)决定。上升时间必须满足协议规范(标准模式为1000ns,快速模式为300ns)。Rp(max) = tr / (0.8473 * Cb)(经验公式)。总线电容Cb包括所有设备的引脚电容、PCB走线电容和杂散电容。

  • 典型范围: 通常在1kΩ 到 10kΩ之间,对于标准模式(100kHz)和中等总线电容,4.7kΩ 是一个常用的折中值。高速模式可能需要更小的电阻(如1.2kΩ)。

4.总线电容限制 (Bus Capacitance):

  • 规范定义了总线(SDA + SCL)的最大允许电容Cb

    • 标准模式 (100 kHz): ≤ 400 pF

    • 快速模式 (400 kHz): ≤ 400 pF

    • 快速模式+ (1 MHz): ≤ 550 pF

    • 高速模式 (3.4 MHz): ≤ 400 pF

  • 原因: 电容过大导致上升沿变缓,可能无法满足协议要求的上升时间,导致通信错误。设计时需估算所有设备引脚电容(见Datasheet)、PCB走线电容(与长度、宽度、层叠结构有关)和连接器电容等总和。电容超标是长距离或多设备通信失败的常见原因。

5.寻址机制 (Addressing):

  • 每个从设备都有一个唯一的7位或10位硬件地址(由芯片制造商设定或部分引脚可配置)。

  • 主设备在发起通信时,首先发送目标从设备的地址(以及读写位)。

  • 地址冲突: 硬件设计时必须确保总线上没有两个从设备具有相同的地址(可通过地址配置引脚解决)。

  • 二、硬件设计要求

1.上拉电阻:

  • 必须添加: SDA和SCL线上必须各有一个上拉电阻连接到Vpull-up

  • 正确计算: 根据总线电压、总线电容、工作模式和所用器件的驱动能力计算合适的阻值范围,并选取标准值电阻。

  • 位置: 通常放置在总线末端或靠近主控端。对于长总线或高速模式,可能需要更精确的布局。

2.总线电压 (Vpull-up):

  • 决定总线上的逻辑高电平。

  • 必须满足所有连接设备的输入高电平电压 (VIH) 要求。即 Vpull-up 必须 ≥ 所有设备要求的 VIH(min)

  • 设备输出驱动低电平 (VOL) 必须 ≤ 所有设备要求的 输入低电平电压 (VIL) 最大值。

  • 不同电压设备共存时,Vpull-up通常选择较高电压(如3.3V设备与5V设备共存时选5V),但需确保3.3V设备能承受5V输入(查看其 Vmax 或 Absolute Maximum Ratings)。或者使用专用的电平转换器芯片。

3.总线布局与走线:

  • 尽量短: 减少电容和干扰。

  • 等长: SDA和SCL走线尽量等长,以减少信号偏移。

  • 避免干扰: 远离高速数字线(如时钟、PWM)、模拟线或电源线。必要时使用地线隔离。

  • 减小环路面积: 并行布线,紧耦合(如差分线那样走在一起),减小电磁辐射和接收干扰的环路面积。

  • 阻抗: 虽然对低速I²C要求不高,但保持整洁的布线有助于信号完整性。

4.设备连接:

  • 所有设备的SDA引脚连接在一起,所有SCL引脚连接在一起。

  • 确保每个设备的I²C引脚都支持开漏/集电极开路输出模式。

  • GPIO电容: 注意设备I²C引脚本身的输入/输出电容(CIO),它会计入总线电容Cb。查看器件手册。

5.电源与地:

  • 为所有设备提供稳定、干净的电源。

  • 保证良好的共地连接。地平面是信号回流的关键路径。

三、常见硬件问题排查点

  1. 忘记上拉电阻: 总线无法拉高,通信完全失败。

  2. 上拉电阻值过大: 上升沿太缓,在高速或高电容总线上导致建立/保持时间违规,通信不稳定或失败。

  3. 上拉电阻值过小: 电流过大,可能超出设备拉低时的电流承受能力(IOL),导致低电平电压VOL升高(超过VIL(max)),也可能导致功耗过大。

  4. 总线电容过大: 上升时间过长,现象同上拉电阻过大。常见于连接设备过多或走线过长。

  5. 地址冲突: 两个设备响应同一地址,通信混乱。

  6. 电平不兼容: 高电平电压不足(Vpull-up < VIH(min))或低电平电压过高(VOL > VIL(max))。

  7. 走线干扰: 引入噪声导致数据错误。

  8. 设备故障: 某个设备的I²C接口损坏(如ESD击穿),将总线持续拉低或无法正确响应。

下一篇我们再聊聊I2C的时序和波形

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐