- 图11-1给出了一个由MCU作为主机,通过IIC总线带3个从机的单主机IIC总线系统,这是最常用、最典型的IIC总线连接方式。
- 物理结构上,IIC系统由一条串行数据线SDA和一条串行时钟总线SCL组成。主机按一定的通信协议向从机寻址和 进行信息传输。在数据传输时,由主机初始化一次数据传输,主机使数据在SDA上传输的同时还通过SCL线传输时钟。信息传输的对象和方向以及信息传输的开始和终止均由主机决定。
1、总线上数据的有效性
IIC总线是以串行方式传输数据,从数据字节的最高位开始传输,每个数据位在SCL上都有一个时钟脉冲相对应。在时钟线高电平期间数据数据线上必须保持稳定的逻辑电平状态。高电平为数据1,低电平为数据0。只有在时钟线为低电平时,才允许数据线上的电平状态变化。如图11-2所示。
2、总线上的信号
IIC总线在传送数据过程中有四种类型信号,它们分别是 :开始信号、停止信号、重新开始信号和应答信号。
开始信号(start): 如图11-3所示,当SCL为高电平,SDA由高电平到低电平的跳变,产生开始信号。当总线空闲的时候,例如,没有主设备在使用总线(SDA和SCL都处于高电平),主机通过发送开始(start)信号建立通信。
停止信号(stop): 如图11-3所示,当SCL为高电平时,SDA由低电平向高电平跳变,产生停止信号。主机通过发送停止信号,结束数据通信。
重新开始信号(Repeated START): 在IIC总线上,由主机发送一个开始信号启动一次通信后,在首次发送停止信号之前, 主机通过发送 重新开始信号,可以转换与当前从机的通信模式或是切换与另一个从机通信。如图11-3所示,当SCL为高电平时,SDA由高电平向低电平跳变,产生重新开始信号,它的本质就是一个开始信号。
应答信号(A):接收数据的IIC在接收到8位数据后,向发送数据的IIC发出的特定的低电平脉冲。每一个数据字节后面都要跟一位的应答信号,表示已收到数据。应答信号在第九个时钟周期出现,这时发送器必须在这一时钟位上释放数据线,由接收设备拉低SDA电平来产生应答信号,这样,主机方就认为此次数据传输失败;如果是主机作为接收方,在从机发送器发送完一个字节数据后,发送了非应答信号,从机就认为数据传输结束,并释放SDA线,不论是哪种情况,都会终止数据的传输,这时,主机或是产生停止信号释放总线,或是产生重新开始信号,开始一次新的通信。开始信号、重新开始信号和停止信号都是由主控制器产生,应答信号由接收器产生,总线上带有IIC总线接口的器件很容易检测到这些信号。
3、总线上数据传输格式
(1)一般情况下,一个标准的IIC通信由四部分组成:开始信号、从机地址传输、数据传输、停止信号。
(2)由主机发送一个开始信号,启动一次IIC通信;在主机对从机寻址后,再在总线上传输数据。IIC总线上传送的每一个字节均为8位,首先发送的数据位最高位,每传送一个字节后都必须跟随一个应答位,每次通信的数据字节数没有限制;在全部数据传输结束后,由主机发送停止信号,结束通信。
图11-5所示,时钟线为低电平时数据传送将停止进行。这种情况可以用于当接收器接收到一个字节数据后要进行一些其他工作而无法立即接收下一个数据时,迫使总线进入 等待状态,直到接收器准备好接收新数据时,接收器再释放时钟线使数据传送得以继续正常进行。例如,当接收器接收完 主控制器的一个字节数据后,产生中断信号并进行中断处理,中断处理完毕才能接收下一个字节数据,这时接收器在中断处理 时将牵住SCL为低电平,直到中断处理完毕才释放SCL。
4、IIC总线寻址约定
为了消除IIC总线系统中主控器与被控器的地址选择线,最大限度地简化总线连接线,IIC总线采用了了独特的寻址约定,规定了开始信号后的第一个字节为寻址字节,用来寻址被控器件,并规定数据传送 方向。
在IIC总线系统中,寻址字节由被控器的七位地址为(它占据了D7~D1位)和一位的方向位(为D0位)组成,方向位为 0 时表示主控器将数据写入被控器,为 1 时表示主控器从被控器读取数据。主控器发送开始信号后,立即发送寻址字节,这时,总线上的所有器件都将寻址中的7位地址与自己器件地址比较。如果两者相同,则该器件认为被主控件寻址,并发送应答信号,被控器根据读、写位确定自身是作为发送器还是接收器。
主器件作为被控器时,其7位从地址在IIC总线地址寄存器中给定,为纯软件地址。而非单片机类型的外围器件地址完全由器件类型与引脚电平给定。IIC总线系统中,没有两个从机地址是相同的。主控器件不应该传输一个和它本身的地址相同的地址。
5、主机向从机读写1个字节数据的过程
如图11-6所示,主机要向从机写1个字节的数据时,主机首先产生START信号,然后紧跟着发送一个从机地址,这个地址共有7位,紧接着的第8位是数据方向位(R/W),0表示主机发送数据(写),1表示主机接收数据(读),这时候主机等待从机的应答信号(A),当主机接收到应答信号时,发送要访问的地址,继续等待从机的应答信号,当主机收到应答信号后,发送一个字节的数据,继续等待从机的应答信号,当主机收到应答信号后,产生停止信号,结束传输过程。
如图11-7所示,主机要从从机读1个字节数据时,主机首先产生START信号,然后紧跟着发送一个从机地址 ,注意此时该地址的第8位为0,表明是向从机写命令,这时候主机等待从机的应答信号(A),当主机收到应答信号时,发送要访问的地址,继续等待从机的应答信号,当主机收到应答信号后,主机要改变通信模式(主机将由发送变为接收,从机将由接收变为发送)所以主机发送重新开始信号,然后紧跟着发送一个从机地址,注意此时该地址第8位为1,表明将主机设置成接收模式开始读取数据,这时候主机等待从机的应答信号,当主机收到应答信号时,就可以接收一个字节的数据,当接收完成后,主机发送 非应答信号,表示不在接收数据,主机进而产生停止信号。结束传送过程。