IIC总线

KDRNN4个月前 (08-29)概念91

From 尚硅谷

1.1 概述

    I2CInter-Integrated Circuit),通常简称为IIC,是一种用在集成电路(IC)之间的串行通信总线。它是由Philips(现在的NXP半导体)在上世纪80年代开发的,并在之后广泛应用于各种电子设备和嵌入式系统中。

1.2 信号线

    I2C同步串行通信,使用两根线路进行通信,分别是数据线(SDA)和时钟线(SCL),SDA线用于数据传输,SCL线用于数据传输的同步。SCL的每个时钟周期,SDA传输一位数据。

    I2C规定,数据的接收方会在每个时钟周期的高电平期间读取数据,具体来讲就是在SCL处于高电平时,读取SDA上的数据,如下图所示。

 因此,SDA必须在SCL低电平期准备好要发送的下一位数据,然后在SCL高电平期间保持稳定。

1.3 主从架构

    I2C采用主从架构,一个主设备可连接多个从设备。主设备负责发起通信和控制总线,而从设备负责响应主设备的请求。如下图所示。

    I2C总线中的每个设备都有一个唯一的地址(用7位二进制数字表示),用于在总线上标识自己。主设备可以根据地址选择性的与特定的从设备进行通信。

 需要注意的是,SCL信号线上的时钟信号始终由主设备产生,而SDA信号线上的数据信号既可由主设备产生,也可由从设备产生。当主设备向从设备发送数据时,SDA信号由主设备产生,从设备接收信号;当主设备从从设备读取数据时,SDA信号由从设备产生,主设备接收信号。

1.4 通信协议

1.4.1 空闲状态

    I2C协议规定,当SDASCL均为高电平时,总线为空闲状态。

1.4.2 起始和结束信号

 主设备和从设备间的每次通信,都需要以一个起始信号开始,以一个结束信号终止。起始信号和结束信号的定义如下:

 起始信号:当SCL处于高电平时,SDA由高变低。

 停止信号:当SCL处于高电平时,SDA由低变高。

 如下图所示。

 起始信号和结束信号,都只能由主设备产生。

1.4.3 确认信号

 I2C协议规定,发送方每发送一个字节(8位)的数据,接收方都要向发送方回复一个1位的确认信号,如下图所示。

 如果该确认信号为0表示接收方已成功接收到该字节,发送方可继续发送下一字节,这个信号在I2C协议中称为ACKAcknowledge);如果该信号为1,则表示接收方未能成功接收到该字节,或者不希望接收更多数据,该信号在I2C协议中称为NACKNot Acknowledge)。

1.4.4 从机地址和读写标识

 由于一个I2C总线上可能有多个从设备,所以开始通信前,主设备需要先与目标设备取得联系,然后再进行数据传输,除此之外,主机还需要向目标设备明确本次通信的操作是写数据还是读数据。

 上述操作的实现思路如下:

 当主设备发送起始信号之后,会向所有设备发送一个字节的数据,这一个字节中,前7位为目标设备地址,第8位为读/写标识(1表示读,0表示写),如下图所示。

 当各从设备收到这个字节的数据后,会将7位地址与自身进行对比,相同则会向主设备回复确认信号,不相同则不做任何回应。

 当主设备收到目标设备的确认信号后,便会开始与该设备进行通信。

1.4.5 完整通信流程

 综上所述,当主设备想要与某个从设备进行通信时,需要经历如下流程。

 (1)发送起始信号

 (2)发送目标从设备地址+读写标识位

 (3)接收从设备回复的确认信号

 (4)与从设备进行数据传输(发送/接收)

 (5)发送终止信号

相关文章

51单片机 | UART | 接收数据 | 判定字符串接收完毕

实现思路:每接收一个字符,重置定时器,若定时器达到设定值则判定为字符串完整接收。实现过程:定义一个变量记录空闲时间,static unsigned char s_idle…

51单片机 | IIC | 软件模拟 | 基础驱动

在Dri_IIC中先定义SCL和SDA:#define SCL P17 #define SDA P161.初始化/开始信号当SCL高电平时,SDA由高电平变为…

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。