I2C串行总线详解:起始、寻址与数据传输

需积分: 10 8 下载量 54 浏览量 更新于2024-07-09 收藏 266KB PPT 举报
IIC(Inter-Integrated Circuit)总线协议是一种用于在嵌入式系统和微控制器之间传输数据的串行通信接口,它由Philips(现为NXP Semiconductors)公司开发。IIC总线的特点在于其简单性、高效性和低成本,特别适合于需要多个主设备和从设备共享有限线缆资源的场合。 I2C总线设计非常精简,仅需两条双向线路:一条是数据线SDA(Serial Data Line),另一条是时钟线SCL(Serial Clock Line)。总线通过上拉电阻连接到电源,空闲时,两条线均为高电平。当任何器件将数据线拉低时,所有连接到总线的器件都会受到影响,因为它们是线“与”关系。每个从设备都有唯一的7位地址(通常还有10位地址模式,但这里主要讨论的是7位地址),主设备通过发送地址来选择目标从设备进行通信。 数据传输过程中,I2C规定了严格的信号有效性规则:在时钟线为高电平时,数据线上的数据必须保持不变;而在时钟线下降到低电平时,数据才能改变。数据以9位的帧结构进行,包括一个数据位、一个从机地址、一个数据方向位(0表示写,1表示读),以及一个应答位,确保数据的一致性和完整性。 整个通信流程包括以下几个步骤: 1. 发送起始信号:SCL为高电平时,SDA从高电平变为低电平。 2. 寻址和读写指示:主机发送7位地址和读写位(0或1)。 3. 应答信号:从设备接收到正确的地址后发送应答信号,确认接收请求。 4. 数据传输:按MSB(最低有效位)顺序发送数据,每个字节后跟一个应答位。 5. 发送停止信号:数据传输完成后,SDA从低电平变为高电平,同时SCL上升,表示通信结束。 起始和终止信号由主机控制,用来标志通信的开始和结束,确保总线的正确管理。接收设备在接收完一个字节后可能需要处理内部事务,这时可以通过拉低SCL线使主机进入等待状态,直到准备好接收下个字节时,再恢复SCL的高电平以继续数据传输。 IIC总线协议是一种高效的通信机制,适用于需要节省硬件资源且支持多主设备的场景,它在各种微控制器和嵌入式系统应用中占据重要地位。