集成电路总线
IIC(Inter-Integrated Circuit)
IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。自2006年10月1日起,使用I²C协议已经不需要支付专利费,但制造商仍然需要付费以获取I²C从属设备地址。
1.主要特点
数据的通信方式:同步通信
数据的传输方式:串行传输
数据的传输方向:半双工通信
多主通信
IIC总线最多可以挂多少个设备由IIC地址决定,8位地址0x00不用,那就是127个地址,所以理论上可以挂127个从器件。
优点:IIC总线具有接口线少,控制方式简单,器件封装紧凑,通信速率较高(100kb/s,400kb/s,高速模式可达3.4Mb/s)等优点。
通信速率:
通常在标准模式100Kbps下,使用10K的上拉电阻;
在快速模式400Kbps下,使用2K的上拉电阻;
I2C还有高速模式3.4Mbps和超快速模式5Mbps可以选择。
2.引脚说明和物理层实现
SDA:数据线
SCL:时钟线
I2C串行总线一般有两根信号线,一根是双向的数据线SDA(Serial Data Line),另一根是时钟线SCL(Serial Clock Line)。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。
为了避免总线信号的混乱,要求各设备连接到总线的输出端时必须是漏极开路(OD)输出或集电极开路(OC)输出,所以在通信时需要接上拉电阻。
3.数据传输协议规范
IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机。主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁功能来防止错误产生;每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;IIC总线在通信时总线上主动发送数据的器件为发送器,接收数据的器件为接收器。
数据线SDA上的数据必须在时钟的高电平周期保持稳定,它的高/低电平状态只有在SCL时钟信号是低电平时才能改变。
3.1 起始信号和停止信号
在I2C总线传输过程中,将两种特定的情况定义为开始和停止条件(开始和停止条件均由主控制器产生):
开始条件:当SCL保持“高”时,SDA由“高”变为“低”时为开始条件;
停止条件:当SCL保持“高”时,SDA由“低”变为“高”时为停止条件;
当总线在空闲状态时,SCL和SDA各自的上拉电阻把电平拉高,使它们均处于高电平;
在开始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占总线,其他I2C器件无法访问总线。
在停止条件产生后,总线处于空闲状态,本次数据传输的主从设备将释放总线。
3.2 数据传输格式
数据传输时高位在前,低位在后,每次传送的字节数目没有限制,数据传输必须以字节(8bit)为单位。传输操作启动后主控制器件传输的第一字节是地址,其中前面7位指出与哪个从器件进行通信,第8位指出数据传输的方向(发送还是接收)。
3.3应答(ACK)信号传送
为了完成一个字节的传送,接收方应该发送一个确认信号ACK给发送方。
主设备在SCL线上产生每个时钟脉冲的过程中将在SDA线上传输一个数据位。当一个字节按照数据位由高到低的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位(ACK),此时才被认为一个字节真正的被传输完成。一帧共有9位数据。
3.4数据传输流程
第一位是开始信号,在主设备发送开始条件信号之后,所有从机即使处于睡眠状态也将变为活跃状态并等待接收地址位。
第二部分是地址位和读写位。通常地址为占7位数据,主设备需要发送对应从机的地址匹配总线上挂载的从机(IIC还支持10位寻址)。读写位指定了数据的传输方向,如果主设备发送到从设备,则为0。从设备发送到主设备,则为1。
第三部分是应答位(ACK/NACK)。主机每次发送完数据之后会等待从设备的应答信号ACK。
第四部分是内部寄存器地址或者从设备的指令数据。
第五部分就是需要发送的数据块。
最后就是停止位。
3.5同步信号
IIC总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生变化,时钟线SCL为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定。
4.总线仲裁
IIC总线属于多主总线,即允许总线上有一个或多个主控器件和若干从器件同时进行操作。总线上连接的这些器件有时会同时竞争总线的控制权,这就需要进行仲裁。
总线被启动后多个主机在每发送一个数据位时都要对自己的输出电平进行检测,只要检测到电平与自己发出的电平相同,就会继续占用总线。仲裁发生在SCL为高电平时刻。由仲裁机制可以看出:总线控制遵循“低电平优先”的原则,即谁先发送低电平谁就会掌握对总线的控制权;