I2C(Inter-Integrated Circuit)总线是一种广泛使用的同步、半双工、串行通信协议,由Philips(现NXP)设计,具有结构简单、引脚少的优点。其时序逻辑直接影响通信可靠性,以下从协议层和电气层展开分析。
两线制:
SCL(Serial Clock):时钟线,由主设备控制。
SDA(Serial Data):数据线,主从设备分时复用。
设备角色:
主设备(Master):发起通信,控制时钟。
从设备(Slave):响应主设备,地址(7位/10位)。
I2C时序由起始条件、数据位、应答位、停止条件构成,需严格满足时间规范(以标准模式100kHz为例):
START:SCL高电平时,SDA由高→低跳变,标志通信开始。
STOP:SCL高电平时,SDA由低→高跳变,标志通信结束。
时序要求:
参数 | 标准模式(100kHz) | 快速模式(400kHz) |
---|---|---|
t??(STA)(起始建立时间) | ≥4.7μs | ≥0.6μs |
t?(STA)(起始保持时间) | ≥4.0μs | ≥0.6μs |
t??(STO)(停止建立时间) | ≥4.0μs | ≥0.6μs |
规则:
SCL低电平时,SDA允许变化(发送方设置数据)。
SCL高电平时,SDA必须稳定(接收方采样数据)。
时序参数:
参数 | 标准模式 | 快速模式 |
---|---|---|
t??(DAT)(数据建立时间) | ≥250ns | ≥100ns |
t?(DAT)(数据保持时间) | ≥0ns(通常≥100ns) | ≥0ns(通常≥50ns) |
t?(SDA上升时间) | ≤1μs | ≤300ns |
t?(SDA下降时间) | ≤300ns | ≤100ns |
ACK:在第9个时钟周期,接收方拉低SDA表示应答。
NACK:SDA保持高电平表示非应答(用于终止传输或错误指示)。
时序关键点:
主设备在SCL高电平期间检测SDA状态。
从设备需在SCL上升沿前完成SDA电平设置。
以主设备向从设备(地址0x50)写入1字节数据(0x55)为例:
START → 发送从设备地址(0xA0,含写位0) → ACK → 发送数据0x55 → ACK → STOP。
波形关键点:
地址和数据均高位(MSB)先发。
每个字节后紧跟ACK/NACK。
问题:多主设备竞争时,SCL可能被不同设备拉低。
解决:通过“线与”逻辑实现时钟同步,SCL低电平长的设备主导通信。
原因:从设备异常拉低SDA(如未完成操作)。
解决:主设备发送≥9个SCL脉冲强制释放总线(见I2C协议复位流程)。
影响:导致时序违规,通信失败。
改进:减小上拉电阻(如从4.7kΩ改为1kΩ)或降低总线电容。
上拉电阻选择:
计算公式:Rmax=0.8473×Cbt(Cb为总线电容)。
典型值:3.3V系统常用2.2kΩ~4.7kΩ。
抗干扰措施:
总线长度较短(通常<1m),避免并行高速信号线。
必要时使用屏蔽线或差分转换器(如PCA9615)。
时钟拉伸(Clock Stretching):
从设备拉低SCL以延长时钟周期(常见于低速从设备)。
高速模式(3.4MHz):
需使用推挽输出(如I2C over USB PD协议)。
严格遵循建立/保持时间,尤其注意SCL高电平期间SDA的稳定性。
上拉电阻优化是保证信号边沿速度的关键。
多主系统需处理冲突,必要时添加仲裁逻辑。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。