用户工具

站点工具


标准:bus:i2c:start

I2C(Inter-IntegratedCircuit Bus)

常用标准

I2C(Inter-IntegratedCircuit Bus)最早是由PHilip半导体(现在被NXP收购)于1982年开发。 主要是用来方便微控制器与外围器件的数据传输。

目前最新的协议版本是2021版:NXP:I2C-bus specification and user manual(UM10204)

标准相关介绍见网站:I2C-Bus

版本差异

常用版本为Standard和Fast-mode (Fm),其他版本很少用,另速率最快的版本Ultra-fast mode (UFm)和其他版本差异大,主要用于LED驱动器1)

I2C Mode Maximum Speed Maximum Bus Capacitance Drive
Standard 100kbit/s 400pF Open drain
Fast-mode (Fm) 400kbit/s 400pF Open drain
Fast-mode Plus (Fm+) 1Mbit/s 550pF Open drain
High-speed mode (Hs) 1.7Mbit/s 400pF Open drain
High-speed (Hs) 3.4Mbit/s 100pF Open drain
Ultra-fast mode (UFm) 5Mbit/s n/a Push-pull

信号和连接

I2C有两个信号,单向的时钟SCL(主 > 从)和双向的数据SDA。连接拓扑如下图2)

I2C总线允许多主机,但同一时刻只能有一个主机,通过SCL时钟同步和SDA线仲裁来决定谁是主机,其他设备则均为从机。

如需扩展或及中继则可以参考下图3)

SCL/SDA内部电路如下图,写的同时可以读,以确认是否写成功,如下图:

硬件设计注意事项

上下拉电阻

除Ultra-fast mode (UFm)外,均是开漏输出,外部需要加上下拉电阻,阻值范围一般为1~10kΩ,常用为4.7kΩ4)

地址

同一I2C总线上的地址需不同,常用的为7位地址,拓展的为10位地址(不是所有的器件都支持)。

电平转换

主从器件之间是否需要电平转换?

1.8/3.3/5V之间的电平转换:用三极管(400KHz以下)、MOS管(1MHz以下)搭建转换电路,或直接用转换芯片(参考 Voltage Translation Buying Guide

死锁

在通讯过程中,当从设备把SDA拉低,而此时主设备异常重启,主设备检测到SDA拉低,认为SDA被占用,同时主设备初始化SCL被拉高,从设备则一直等待SCL被拉低,从而陷入主从设备互锁的状态。

解决方案:

协议

  • 起始条件:时钟信号线(SCL)为高电平时,数据线(SDA)产生一个下降沿5)
  • 停止条件:时钟信号线(SCL)为高电平时,数据线(SDA)产生一个上升沿。
  • 数据有效性:当时钟信号为高电平的时候,数据线上的信号需要保持不变。
  • 应答位:当主机传送8位数据结束后,主机拉高SDA,如果从机拉低SDA并在SCL高电平时保持低电平,这个信号为ACK信号(从机正确接收数据)。
  • 非应答位:当主机传送8位数据结束后,主机拉高SDA,如果SDA保持高电平则该信号为NACK(数据传输出错)。

读写操作如下图6)

上述为常用的7为地址的读写,对于拓展的10位地址的读写,区别为前两个字节为10位地址(前缀11110表示这两个字节为10位地址),7位和10位对比如下图7)

测试

逻辑分析仪和示波器均可以测试I2C,软件工程师看协议推荐用逻辑分析仪,硬件工程师看信号推荐用示波器,带解码的示波器则可以兼顾软硬件工程师的需求。

单独逻辑分析仪的测试说明见DreamSourceLab:利用逻辑分析仪进行I2C总线的全面分析 “3. 逻辑分析仪准备”至“5.进阶分析”

评论

请输入您的评论. 可以使用维基语法:
U T V M​ N
 
标准/bus/i2c/start.txt · 最后更改: 2025/10/19 20:50 由 hwwiki