3. I2C协议基础:I2C通信时序

I2C(Inter-Integrated Circuit)总线是一种由Philips公司(现NXP)开发的两线式串行总线,广泛应用于触摸屏控制器与主处理器之间的通信。理解其通信时序是分析触摸屏I2C信号波形的核心前提。本节将详细拆解I2C协议的四个关键时序要素:起始条件、停止条件、数据有效性与应答机制。

3.1 总线空闲状态与基本信号线

I2C总线仅由两条双向信号线组成:

  • SCL(Serial Clock Line):串行时钟线,由主设备(Master)驱动。
  • SDA(Serial Data Line):串行数据线,用于传输地址、数据及控制位。

在总线空闲状态下,SCL和SDA均通过上拉电阻保持高电平。任何设备要开始通信,必须先产生起始条件。

调试提示: 使用逻辑分析仪或示波器抓取I2C波形时,首先观察总线空闲时SCL和SDA是否均为高电平。若其中一线被拉低,说明总线被占用或存在异常锁死。

3.2 起始条件(Start Condition)与停止条件(Stop Condition)

起始条件和停止条件是I2C通信的“帧头”和“帧尾”,由主设备产生。它们的时序定义非常严格:

条件类型 信号变化顺序 关键时序要求
起始条件(S) SCL保持高电平 → SDA从高电平切换到低电平 SDA下降沿必须在SCL高电平期间完成
停止条件(P) SCL保持高电平 → SDA从低电平切换到高电平 SDA上升沿必须在SCL高电平期间完成

起始条件与停止条件的波形关系如下图所示:

I2C 起始条件与停止条件时序图 I2C 起始条件与停止条件时序 SCL SDA 起始条件 S SDA↓ 在 SCL 高电平 停止条件 P SDA↑ 在 SCL 高电平 数据传输阶段(SCL低电平时SDA变化)
关键点: 起始条件和停止条件都是SDA在SCL高电平期间发生的跳变。在数据传输阶段,SDA只能在SCL低电平时变化,这是区分“条件”与“数据”的核心规则。

3.3 数据有效性(Data Validity)

I2C协议规定,在数据传输过程中,SDA线上的数据必须在SCL时钟的特定相位保持稳定:

  • 数据稳定期: 在SCL时钟的高电平期间,SDA上的数据必须保持稳定不变。
  • 数据变化期: 在SCL时钟的低电平期间,SDA上的数据允许发生变化(准备下一个bit)。

每个时钟脉冲传输1位数据。数据以MSB(最高有效位)优先的方式传输。一个完整的数据字节(8位)传输完成后,紧接着会有一个时钟周期用于应答位。

I2C 数据有效性时序图 I2C 数据有效性:SCL高电平时SDA必须稳定 SCL SDA 允许变化 允许变化 允许变化 允许变化 允许变化 数据稳定 数据稳定 数据稳定 数据稳定 数据稳定
常见错误: 如果从设备在SCL高电平时检测到SDA发生跳变,会误判为起始条件或停止条件,导致通信错位。调试时若发现数据帧长度异常,应重点检查SDA在SCL高电平期间的稳定性。

3.4 应答机制(Acknowledge Mechanism)

应答机制是I2C协议保证数据可靠传输的核心。每传输完一个字节(8位数据),接收方必须在第9个时钟周期内产生一个应答位:

  • 应答(ACK): 接收方在第9个时钟周期将SDA拉低,表示“已收到,请继续发送”。
  • 非应答(NACK): 接收方在第9个时钟周期保持SDA为高电平,表示“未准备好/传输结束/设备不存在”。

完整的I2C数据帧结构(写操作)如下表所示:

阶段 信号内容 位数 方向
起始条件 SDA↓ while SCL=H 1 主→从
从设备地址 7位地址 + R/W位 8 主→从
应答位 ACK (SDA=L) 或 NACK (SDA=H) 1 从→主
数据字节 8位数据 8 主→从
应答位 ACK (SDA=L) 或 NACK (SDA=H) 1 从→主
停止条件 SDA↑ while SCL=H 1 主→从

应答机制的时序细节如下图所示:

I2C 应答机制时序图 I2C 应答机制:第9个时钟周期 SCL SDA 8位数据(由主设备驱动) 应答位(由从设备驱动) SDA被从设备拉低 → ACK 1 2 3 4 5 6 7 8 9
调试要点: 在触摸屏I2C通信中,如果主设备发送从设备地址后未收到ACK(SDA保持高电平),通常表示:
  • 从设备地址错误(常见于7位地址与8位地址混淆)。
  • 从设备未上电或处于复位状态。
  • I2C总线存在硬件冲突(如SDA被其他设备拉死)。

3.5 完整I2C通信帧示例

结合上述四个要素,一个完整的I2C写操作帧(主设备向触摸屏控制器写入配置寄存器)的时序流程如下:

  1. 起始条件: 主设备产生SDA下降沿(SCL高电平)。
  2. 发送从设备地址: 主设备发送7位地址(例如触摸屏控制器地址0x38) + 写位(R/W=0)。
  3. 等待应答: 从设备在第9个时钟拉低SDA(ACK)。
  4. 发送寄存器地址: 主设备发送8位寄存器地址字节。
  5. 等待应答: 从设备再次发送ACK。
  6. 发送数据: 主设备发送8位数据字节。
  7. 等待应答: 从设备发送ACK。
  8. 停止条件: 主设备产生SDA上升沿(SCL高电平),释放总线。
I2C 完整写操作帧结构 I2C 完整写操作帧结构 S 地址+W ACK 寄存器地址 ACK 数据字节 ACK P S: 起始条件 P: 停止条件 ACK: 应答(从设备拉低SDA)
实战关联: 在调试触摸屏时,使用逻辑分析仪捕获I2C波形,应首先检查起始条件后的第一个字节(地址+方向位)是否正确,以及是否收到ACK。这是判断触摸屏控制器是否正常响应的最快方法。