1. I2C协议简介
I2C(Inter-Integrated Circuit,内部集成电路)协议是由飞利浦(现NXP半导体)于1980年代初开发的一种两线式串行通信协议,常用于微控制器与低速周边设备(如传感器、EEPROM、A/D转换器等)之间的短距离通信。
2. 核心物理架构
它的物理层有如下特点:
(1)它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中,可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机。
(2)一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA),一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。
(3)每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
(4)总线通过上拉电阻接到电源。当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
(5)多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。
(6)具有三种传输模式:标准模式传输速率为100kbit/s,快速模式为400kbit/s,高速模式下可达3.4Mbit/s,但目前大多I2C设备尚不支持高速模式。
(7) 连接到相同总线的IC 数量受到总线的最大电容400pF限制。
• 两条信号线:
• SDA(Serial Data):串行数据线,用于传输数据。
• SCL(Serial Clock):串行时钟线,由主机提供同步时钟。
• 电气特性:
• 采用开漏输出(Open-Drain)结构,必须在总线上外接上拉电阻(通常为 4.7kΩ 左右)。
• 支持多主从架构(Multi-Master/Slave):总线上可以连接多个主机和多个从机,理论上从机数量受限于总线电容(最大 400pF)或地址空间。
3. I2C协议层
I2C协议定义了通信的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。