目录

一、协议帧结构的波形

二、完整帧示例波形:

关键时序参数 (Specified by Mode):


关于I2C的硬件介绍请参看:

《I2C的硬件特性与设计要求

这一篇一起来看看I2C的协议:

一、协议帧结构的波形

  1. 起始条件 (START Condition - S):

    • 波形: 当 SCL 线为 高电平 (1) 时,SDA 线发生一个 从高到低 (1 -> 0) 的下降沿。

    • 作用: 表示一次传输的开始。它唤醒所有从设备,准备接收地址。主设备发起。

  2. 停止条件 (STOP Condition - P):

    • 波形: 当 SCL 线为 高电平 (1) 时,SDA 线发生一个 从低到高 (0 -> 1) 的上升沿。

    • 作用: 表示一次传输的结束。主设备释放总线(将 SDA 和 SCL 置为高阻态,由上拉电阻拉高)。主设备发起

  3. 重复起始条件 (Repeated START Condition - Sr):

    • 波形: 与起始条件 (S) 完全相同 (SCL 高时 SDA 从高到低)。

    • 作用: 在不释放总线(不发送停止条件 P)的情况下,终止当前通信并开始一次新的通信(例如,切换读写方向或寻址另一个从设备)。比先 P 再 S 效率更高。主设备发起。

  4. 数据位传输 (Data Bit Transfer):

    • 规则: 数据在 SCL 低电平期间可以变化,在 SCL 高电平期间必须保持稳定。 接收端在 SCL 高电平的中间采样 SDA 的值。

    • 波形:

      • SCL Low: SDA 线被发送设备驱动为下一个要传输的位 (0 或 1)。

      • SCL Rising Edge: SDA 线上的数据位被“锁定”。

      • SCL High: SDA 线 必须保持稳定。接收设备在 SCL 高电平的中间(或稍后,满足建立/保持时间)采样 SDA 的值。

      • SCL Falling Edge: 发送设备可以准备下一个数据位(改变 SDA)。

    • 顺序: 数据传输总是 最高位 (MSB) 在前。

  5. 应答位 (Acknowledge Bit - ACK):

    • 位置: 紧跟在每个字节(8 位数据)之后,由接收方发送。

    • 波形:

      • ACK (确认): 发送方(主或从)释放 SDA 线(输出高阻态)。接收方(从或主)在应答时钟脉冲 (ACK 对应的 SCL 高电平)期间 将 SDA 线主动拉低 (0)。这表示接收方成功收到了字节并准备好接收下一个。

      • NACK (非确认 / Not Acknowledge): 发送方释放 SDA 线。接收方在应答时钟脉冲 (ACK 对应的 SCL 高电平)期间 不拉低 SDA 线,允许上拉电阻将其保持为高 (1)。这表示:

        • 接收方未成功接收字节(例如,校验错)。

        • 接收方无法接收更多数据(例如,缓冲区满)。

        • 主设备在读取最后一个字节后发送 NACK,通知从设备传输即将结束。

        • 寻址时无设备响应。

    • 时序: ACK/NACK 位遵循与数据位相同的时序规则(数据在 SCL 低变,在 SCL 高稳并被采样)。

二、完整帧示例波形:

  • Start (S): SCL 高时 SDA 下降沿。

  • 地址字节 (7-bit Addr + R/W):

    • 主设备发送 7 位从设备地址 (A6-A0)。

    • 接着发送 1 位方向位 (R/W): 0 表示主设备要数据到从设备 (Write),1 表示主设备要数据从从设备 (Read)。

    • 总共 8 位 (1 字节)。

  • ACK (1): 被寻址的从设备拉低 SDA 作为应答。

  • 数据字节: 根据 R/W 位决定方向:

    • Write (R/W=0): 主设备发送数据字节 (D7-D0)。

    • Read (R/W=1): 从设备发送数据字节 (D7-D0)。主设备在 SCL 低时释放 SDA,从设备在 SCL 低时驱动 SDA。

  • ACK (2): 对于 Write,从设备应答 (拉低 SDA)。对于 Read主设备在读取最后一个字节后发送 NACK (不拉低 SDA) 通知从设备结束;读取非最后一个字节时,主设备发送 ACK (拉低 SDA) 要求继续发送。

  • ... : 可以传输多个数据字节,每个字节后跟一个 ACK/NACK

  • Stop (P): SCL 高时 SDA 上升沿。主设备释放总线。

关键时序参数 (Specified by Mode):

I²C 规范定义了不同速度模式下必须满足的最小/最大时间要求。以下是常见模式的关键参数:

时序参数 描述 标准模式 (100 kHz) 快速模式 (400 kHz) 快速模式+ (1 MHz) 高速模式 (3.4 MHz)
fSCL SCL 时钟频率 ≤ 100 kHz ≤ 400 kHz ≤ 1000 kHz ≤ 3400 kHz
tLOW SCL 时钟低电平时间 > 4.7 μs > 1.3 μs > 0.5 μs > 0.16 μs
tHIGH SCL 时钟高电平时间 > 4.0 μs > 0.6 μs > 0.26 μs > 0.06 μs
tSU;STA 起始条件建立时间 (SCL 变高到 SDA 变低) > 4.7 μs > 0.6 μs > 0.26 μs > 0.06 μs
tHD;STA 起始条件保持时间 (SDA 变低后 SCL 保持低的时间) > 4.0 μs > 0.6 μs > 0.26 μs > 0.06 μs
tSU;STO 停止条件建立时间 (SCL 变高前 SDA 必须变低的时间) > 4.0 μs > 0.6 μs > 0.26 μs > 0.06 μs
tSU;DAT 数据建立时间 (SCL 上升沿前,SDA 必须稳定的时间) > 250 ns > 100 ns > 50 ns > 10 ns
tHD;DAT 数据保持时间 (SCL 下降沿后,SDA 必须保持稳定的时间) > 0 ns (通常≥0) > 0 ns (通常≥0) > 0 ns (通常≥0) > 0 ns (通常≥0)
tBUF 停止到起始时间 (总线空闲时间) > 4.7 μs > 1.3 μs > 0.5 μs > 0.16 μs
tVD;DAT 数据有效时间 (SCL 下降沿后,SDA 数据有效的时间) < 3.45 μs < 0.9 μs < 0.45 μs < 0.15 μs
tVD;ACK 应答有效时间 (SCL 下降沿后,ACK 信号有效的时间) < 3.45 μs < 0.9 μs < 0.45 μs < 0.15 μs
tR (SCL/SDA Rise) 信号上升时间 (受总线电容 Cb 和上拉电阻 Rp 影响) < 1000 ns < 300 ns < 120 ns < 40 ns (HS)
tF (SCL/SDA Fall) 信号下降时间 (通常由器件驱动能力决定,较快) < 300 ns < 300 ns < 120 ns < 40 ns (HS)

为什么这些时序很重要?

  1. 数据可靠性 (tSU;DATtHD;DAT): 确保接收方在 SCL 上升沿采样时,SDA 数据是稳定且正确的。

  2. 起始/停止条件识别 (tSU;STAtHD;STAtSU;STO): 保证所有设备都能明确无误地检测到帧的开始和结束。

  3. ACK/NACK 有效性 (tVD;ACK): 发送方需要知道接收方是否成功接收了数据。

  4. 总线竞争与仲裁 (多主): 依赖于严格的时序,确保在仲裁过程中数据不会丢失。

  5. 速度兼容性 (tLOWtHIGH): 决定了总线能达到的最高时钟频率。

  6. 信号完整性 (tRtF): 过慢的上升时间(通常由上拉电阻过大或总线电容过大引起)是导致高速通信失败的最常见硬件原因。它可能导致违反 tSU;DAT 或 tHIGH 要求。

调试提示:

  • 使用示波器观察 SDA 和 SCL 波形是调试 I²C 问题最有效的方法。

  • 重点检查:

    • 起始/停止条件 是否符合定义 (SCL 高时 SDA 跳变)。

    • SCL 高电平期间 SDA 是否稳定 (无毛刺或缓慢变化)。这是数据建立/保持时间违规的直接表现。

    • ACK 位 是否正确拉低 (有无设备响应?设备是否忙?)。

    • 信号上升时间 (tR) 是否满足所选模式的要求。如果上升沿太缓,尝试减小上拉电阻 Rp 或减少总线上的设备/缩短走线以降低电容 Cb

    • 时序参数(特别是 tSU;DAT 和 tR)是否在规范范围内。

Logo

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

更多推荐