首页 理论教育 IIC总线协议工作过程:单片机与嵌入式系统实践

IIC总线协议工作过程:单片机与嵌入式系统实践

时间:2023-11-19 理论教育 版权反馈
【摘要】:IIC主设备用于启动总线上传送数据并产生系统时钟,此时任何被寻址的器件均被认为从设备。图12-4 IIC总线的应答信号3.IIC总线协议格式与工作过程通常情况下,一个标准的IIC通信包含以下4个部分:开始信号、从机地址传输、数据传输和停止信号。

IIC总线协议工作过程:单片机与嵌入式系统实践

IIC主设备用于启动总线上传送数据并产生系统时钟,此时任何被寻址的器件均被认为从设备。在IIC总线中,数据和控制信号共享总线,IIC总线的操作完全由挂接在总线上的主设备送出的地址和数据决定。

1.总线上数据的有效性

IIC规范规定,在传送数据信息时,在时钟信号SCL为高期间,SDA必须保持稳定,SDA信号只能在SCL为低期间改变,IIC总线上的数据传输有效性时序图如图12-2所示。若SDA信号在SCL为高时发送改变,则传送的就是START或STOP等控制信息。

978-7-111-50417-7-Chapter12-2.jpg

图12-2 数据传输有效性时序图

2.IIC总线信号类型

IIC总线在传送数据过程中共有4种类型的信号,分别是:开始信号、停止信号、重新开始信号和应答信号。

(1)开始信号(START)

当SCL为高电平时,SDA由高电平向低电平跳变,产生开始信号,如图12-3所示。当总线空闲的时候,例如,没有主设备在使用总线(SDA和SCL都处于高电平),主机通过发送开始信号建立通信

(2)停止信号(STOP)

当SCL为高电平时,SDA由低电平向高电平跳变,产生停止信号。主机通过发送停止信号,结束数据通信,如图12-3所示。

978-7-111-50417-7-Chapter12-3.jpg

图12-3 开始信号、重新开始信号和停止信号时序图

(3)重新开始信号(repeated START)

IIC总线上由主机发送一个开始信号启动一次通信后,在首次发送停止信号之前,主机通过发送重新开始信号,可以转换与当前从机的通信模式或是切换到与另一个从机通信。重新开始信号和停止信号时序图如图12-3所示,当SCL为高电平时,SDA由高电平向低电平跳变,产生重新开始信号,它的本质就是一个开始信号。

(4)应答信号(ACK)

接收数据的IC在接收到8位数据后,向发送数据的IC发出的特定的低电平脉冲作为应答,每一个数据字节后面都要跟一位应答信号,表示已收到数据。应答信号在第9个时钟周期出现,这时发送器必须在这一时钟位上释放数据线,由接收设备拉低SDA电平来产生应答信号,由接收设备保持SDA的高电平来产生非应答信号,IIC总线的应答信号如图12-4所示。所以,一个完整的字节数据传输需要9个时钟脉冲。如果从机作为接收方向主机发送非应答信号,这样,主机方就认为此次数据传输失败;如果是主机作为接收方,在从机发送器发送完一个字节数据后,发送了非应答信号,从机就以为数据传输结束,并释放SDA线。不论是以上哪种情况都会终止数据传输,这时,主机产生停止信号释放总线,或是产生重新开始信号,开始一次新的通信。开始信号、重新开始信号和停止信号都是由主控制器产生,应答信号由接收器产生,总线上带有IIC总线接口的器件很容易检测到这些信号。

978-7-111-50417-7-Chapter12-4.jpg

图12-4 IIC总线的应答信号(www.xing528.com)

3.IIC总线协议格式与工作过程

通常情况下,一个标准的IIC通信包含以下4个部分:开始信号、从机地址传输、数据传输和停止信号。

(1)开始信号

当总线空闲时(SCL和SDA逻辑高),一个主机可以通过发送一个开始信号开始一个通信。如图12-5所示,开始信号是当SCL为高时SDA从高变为低时产生的信号。该信号表明一个新的数据传送的开始,清除所有从机空闲状态。

978-7-111-50417-7-Chapter12-5.jpg

图12-5 IIC总线传输信号时序

(2)从机地址传送

在开始信号之后被传输数据的第一个字节是从机地址。该字节中前七位是从机寻址地址,之后是读写控制位R/W,该位告诉从机数据传送的方向。

1=读发送,从机发送数据到主机。

0=写发送,主机发送数据到从机。

只有当从机地址和主机发出的地址相匹配时才返回一个应答信号,应答信号是通过在第9个时钟拉低SDA来完成。

(3)数据发送

在成功地完成从机寻址之后,主机将发送的数据以字节为单位发送,方向由读写位(R/W)确定。在地址周期之后的所有传送均被认为数据传送,即使传送含有从设备的地址信息,每一个字节数据都是8位长。如图12-5所示,SDA上的数据只有在SCL为低时才能改变,在SCL为高时必须保持稳定。每一个SDA数据位都对应有一个SCL时钟脉冲,MSB位被最先发送。每一个字节数据之后都跟随着第9位(应答位ACK),应答位由接收设备驱动。一个ACK应答位是指接收设备在第9个时钟把SDA拉为低。一个完整的数据传输需要9个时钟脉冲,而且每次通信的数据字节数没有限制。

如果从设备接收方没有在第9位时钟内向主设备进行确认,SDA信号线必须由从设备保持为高电平,主设备会把应答失败认为一次失败的数据传输。如果主设备接收方在一个字节的数据传送完成后没有向从设备发送方进行确认,从设备也把它作为数据传送的结束并释放SDA信号线。在上述两种情况下,数据传输会被忽略,主设备会产生一个STOP信号放弃总线或者产生一个重新开始信号开始一个新的传输。

(4)STOP信号

主机可以通过产生一个停止信号结束本次数据通信以释放总线。若随后产生一个开始信号则称为重新开始。停止信号被定义为当SCL为逻辑1且SDA由低电平跳变为高电平产生停止信号。即使从机已经产生一个应答信号,主机也可产生一个停止信号结束数据通信。

4.仲裁过程

IIC总线是一个多主设备总线,允许多个主设备连接到总线上。如果有两个或更多主设备在同一时间试图控制总线,那么总线时钟由时钟同步过程来决定:低周期等于主设备中的最长时钟,高周期等于主设备中的最短时钟。竞争主设备的相对优先级由数据仲裁过程决定,如果一个总线主设备在发送逻辑l的时候有其他主设备正在发送逻辑0,那么就会出现仲裁丢失。仲裁丢失的主设备会立即切换到从设备接收模式并且停止SDA输出驱动,在这种情况下,从主设备到主设备的切换不会产生一个STOP情况,也就是说,这时会有一个状态位被硬件设置为l以指示仲裁丢失。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈