目录

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。时钟信号虽由主机提供,但从机有时可以拉低SCL,以便减慢通讯的速度,如等待从机处理完数据后再回复,此功能为时钟扩展,详见2)

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

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

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

硬件设计注意事项

上下拉电阻

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

地址

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

电平转换

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

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

死锁

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

解决方案:

协议

读写操作如下图10)

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

I2C、SMBus和PMBus的区别

SMBus:最初开发用于协助电池管理系统,使用I2C硬件,但增加了第二级软件,最终允许器件热插拔,而无需重新启动系统。

PMBus:扩展了SMBus,定义了一组专门用于管理功率转换器的器件命令,暴露了器件的测量电压、电流、温度等属性。

一般而言,I2C Primer、SMBus和PMBus器件可以共享总线而不会发生什么大问题。

三者之间的具体区别如下12)

测试

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

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