IIC介绍(二)之协议层介绍
IIC通过两个线进行主机与多个从机之间的信息传输,故其传输协议便相对而言麻烦一些。
一、数据传输的开启与结束:
在IIC总线中,其拥有着两个比较特殊的情况:
(1)起始位(S):当SCL是高电平时,SDA由高电平向低电平切换;
(2)停止位(P):当SCL是高电平时,SDA由低电平向高电平切换。
对应的信号路下图所示;
一般而言,IIC上的起始和终止信号都是由总机产生的,而IIC总线在起始条件后便被认为处于BUSY的状态,而在停止条件的一段时间后,总线才会被认为再次处于空闲状态,因此,在主机在发出stop信号后不能马上发出start信号。
如果连接总线的设备上没有检测star和stop条件的接口设备,那么该设备便需在每个时钟周期内至少采样SDA线两次来判断是否发生了电平切换。
二、数据的传输
因为IIC的起始和终止是以当SCL为高电平时SDA进行变化而实现,所以IIC传输数据便只能在SCL线的时钟信号为低电平时才能改变(如上图所示)。
由上图可知,IIC每次传输的字节的数量是没有限制的,但它发送到SDA数据线上的每个字节必须为8位,而且每个字节后必须跟着一个响应位,即在响应的时钟脉冲期间,接收器件SDA线拉低,使之在该时钟脉冲的高电平期间保持稳定的低电平,如下图所示,因为IIC的两根线具有线与特性,故当其中一个设备(主机或从机)输出低阻态时别的设备都能立即接收到。如果从机要完成一些其他功能(如内部中断服务程序)后才能接受或发送下一个完整的数据字节,可以使时钟线SCL保持低电平迫使主机进入等待状态。当从机准备好接收下一数据字节并释放时钟线SCL后,数据传输继续。
三、数据传输中的响应
IIC数据传输必须带响应。响应的时钟脉冲由主机产生。在响应的时钟脉冲期间,发送器释放SDA线(即输出高阻态)。与之对应的,在响应的时钟脉冲期间,接收器须将SDA线拉低,使得其在该时钟脉冲的高电平期间保持稳定的低电平(即输出低阻态)。
四、数据传输的具体形式
上图所示分别为IIC写和读的两种报文格式,将其表述如下:
首先是发送起始信号(即在SCL高电平时将SDA的电平由高变为低);
然后发送从机地址,这里的从机地址为7位,之后的第8为表示数据的传输方向(R/W)-‘0’表示发送(写),‘1’表示请求数据(读);
之后会从从机处获得响应信号,然后数据根据所请求的传输方向进行传输,并由接收方发送响应信号;
最后由主机产生停止位的信号来终止数据的传输。
五、IIC的寻址
IIC上从机的选择是由起始条件后的第一个字节决定,该字节的头7位是从机地址,最低位(LSB)是第8位(如上图所示),它决定了报文的方向,若为‘0’则表示数据由主机传输到被选中的从机,若为‘1’则表示数据由从机传输到主机。
一般而言,为了避免在同一系统中有多个同样的器件,从机的地址分为来个部分:固定和可编程的。比如说:如果器件有4个固定和3个可编程的地址位的话,IIC总线上便可连接8个相同的器件了。
此外,IIC总线有两组保留的8位地址(0000XXX和1111XXX),其用途见下表:
其中1111 0XXX保留给10位寻址,这里对之进行简要介绍。由上图可知只有4个组合1111 0XX用于10位寻址。
首先在发送完起始信号后主机会发第一个字节,其头7位为1111 0XX的组合,它最后两位(XX)是10位地址的两个最高位(MSB);而第一个字节的第8位为R/W一般设为‘0’;
然后第二个字节是10位地址从机剩下的8位地址,此时,算是完成了从机的选定。
之后如果是从从机读取数据,则第3个字节为1111 0XX(也就是第一个字节),但第8位改为‘1’,紧接着便是从机往主机发送数据,详细过程见下图: