||
一、概述
IIC是一种总线协议,由PHILIPS公司在八十年代提出。虽然随着大规模集成电路技术的发展,单片机或微控制器的集成度越来越高,各种ROM/RAM/AD/DA都集中在一起,但是单片机或者微控制器规格仍有限,因此常对它们进行扩展。扩展的方法有两种:并行总线和串行总线。由于串行总线的连线少,结构简单,可大大简化硬件设计,应用越来越广,是一种高性能的串行总线。
二、特征
1、只要两条数据线:串行数据线SDA和串行时钟线SCL。
2、SDA和SCL都是双向线路,都通过一个电流源或者上拉电阻与电源相连。总线空闲时,输出高电平。连接到总线上的器件的输出必须是漏极开路或集电极开路。
3、SDA线上的数据在SCL为高电平时要保持,只有在SCL为低电平时才改变。
4、每一个器件都有一个固定的地址,而且都可以作为接收器或发送器(器件的功能决定)。
5、多主机总线,具有冲突检测和总线仲裁的功能,防止数据丢失。
6、双向的数据传输速率在标准模式下达100Kbit/s,快速模式下达400Kbit/s,高速模式下可达3.4Mbit/s。
7、片上滤波电容保证数据的完整性.
8、连接器件的数量受总线最大电容400pF的限制。(对于IIC总线的电容可以用示波器来进行估算,总线电平的上升时间反应了总线的RC,由于总线的上拉电阻R确定,因此可得出C。400pF的值是人为规定的,是涉及到总线的时序问题,如果Master使用I/O口来模拟的,降低总线的速率,可以增大电容)
三、时序
首先,主器件发送起始条件(SCL高时,SDA由高变低),然后发送设备地址,其中设备地址的LSB是读写命令(0时写,1时读),主器件收到从器件的应答,然后再发送要读写的地址(如果是读写存储器件),主器件收到从器件的应答。根据读写命令,按照相应的方向完成数据的传输,每传送一个字节的数据,接收器收到后都会发送一个应答到发送器。如果是主设备接收,则主设备在接收到从发送器发送的最后一个字节后发送一个非确定应答。最后再发送停止条件(SCL高时,SDA由低变高)或者重复起始条件。
SDA在SCL为高时,数据一般保持,在SCL为低时发生改变。
设备的地址,根据每个芯片的规定来产生。
四、其他
如果接收器件接收到数据后要进行相应的处理,则通过延长SCL低电平的方式来实现。如果SCL和SDA长时间高电平(10个周期)一般认为停止。
特别注意建立时间与保持时间。建立时间:时钟信号由低变高前,数据信号的最小稳定时间。保持时间是SCl由高变低后,SDA的保持时间。