A-A+

I2C知识整理

2017年09月15日 暂无评论 阅读 105 views 次

什么是I2C?

IIC (Inter-Integrated Circuit), 通常发音为: I-squared-C,是多主、多从、分组交换、单工的串行总线,通常用于处理器或微控制器与低速外围器件的短距离通信连接。这个通信协议是由(NXP半导体的前生)飞利浦公司发明,并在2006年开始,I2C协议的实施不要许可费,但仍要收取I2C从机分配地址的费用。
来自:wiki

IIC的特性

  1. 仅用两线连接;
  2. 不像RS232那样有着严格的波特率要求,而是由主设备(mater)产生时钟信号;
  3. 设备之间的主/从关系简单,每个设备都有软件给予的唯一地址;
  4. I2C是一个真正的多主总线,提供仲裁和冲突检测的功能。

来自: I2C-BUS.COM

IIC 的发展历史

时间 事件
1982年 最初的100KHz I2C系统产生,其作为内部总线系统用于建立带各种飞利浦芯片的控制电路。
1992年 I2C的首个标准版本1.0出现,加入400KHz的(Fast-mode)快速模式;引入10bits的地址,使得系统能够容纳多达1008个节点。
1998年 版本2.0加入3.4MHz的高速模式(High-speed mode)以及满足系统在电压和电流方面的节能需求。
2000年 版本2.1基于版本2 引入一个小清理。
2007年 版本3 加入1 Mhz 快速+模式(Fast-mode plus)。
2012年 版本4 加入5 MHz的极快模式(Ultra Fast-mode),这种模式的数据线和时钟线使用推挽输出来替代上拉电阻,并加入了辅助分配Id表。此模式只能用于单向总线。
2012年 版本5 修正了一些错误。
2014年 版本6 修正了两幅图。

来自:wiki


物理(电气)特性

I2C物理层的连接结构十分简单,信号的传输仅需2根线(设备之间隔离)便能实现,分别是通信时钟线(SCL)和数据线(SDA),SCL作为时钟线进行时钟同步,SDA作为数据传输线路,由于只有一条,这决定了I2C通信是单工的。一般无隔离的情况下,由于共地还需引入一条地线。

图1 Fast/standard 模式下的设备连接
图1 Fast/standard 模式下的设备连接
通常,I2C通信设备之间只通过普通导线进行连接,比特流信号采用TTL/CMOS标准下的高/低电平来表示1/0信号,这一方式使得传输距离很短(本来设计目的就是用于短距离通信),直接连接的传输距离短达40cm,提升通信距离则需使用P82B715一类的中继器或者改用其它通信协议与设备。


总线通信协议

IIC是多主的总线协议。总线的时钟信号(SCL)是由主设备提供,因此同一时间一条总线中只能存在一个主设备,先不考虑多主情况下的总线仲裁竞争,只考虑主设备确定的通信规则。

图2 7位地址模式下数据传输电平
图2 7位地址模式下数据传输电平

传输模式分析

以7位地址主从I2C传输模式进行介绍I2C传输数据的模式为:
[ 开始 +(7位地址+1位读写+1位ACK)+(8位数据+1位ACK)* n+停止 ]   (n大于等于0)
在传输过程中,每传输8位后,要通过一个ACK位进行相互确认。

接下来,将具体介绍协议

1)每位信号数据传递模式

图3 传递一位数据的流程
 

图3 传递一位数据

IIC协议通过数据线SDA在SCL的配合下实现信息的有效传送。每条线均可产生5V/0V或3.3V/0V的高低电平(也可以是其它方式,常用TTL和CMOS的电平模式),如图3所示,每当时钟线SCL产生高电平时,SDA所产生的电平信号为当前时钟周期下传输的有效信号;而当SCL为低电平时,SDA可改变,以产生下一周期的传输信号。
PS: 个人认为当SCL产生上升沿后,对方设备开始检测SDA的电平,以此作为当前传输的数据,而下降沿是作为SDA信息可调整的信号,在之后就能进行SDA的电平调整。

2)开始和结束条件

这里写图片描述
图4 开始和结束电平分析

I2C总线在待机状态时,SDA和SCL都处于高电平(两根线一般情况均接上拉电阻)。

  • 当开始工作时,开始信号由主设备(master)发起,SDA先由高电平转为低电平,此时的SCL是高电平。此后,SDA和SCL便配合传输开始工作。
SDA_H SCL_H SDA_H SCL_H SDA_L SCL_L
  • 当停止工作时,在SCL处于高电平下,SDA由低电平转为高电平。
SDA_L SCL_L SDA_L SCL_H SDA_H SCL_H

 

3)第一个byte (7位地址+1位读写+1位ACK)

这里写图片描述

第一个字节,共8位,前7位数可以大多数作为从机(slave)的地址,而某些数位是作为其他功能标志,本文不进行深究。7位从机地址之后的是读写位,如果为高电平,则是从从设备中获取数据,反之 0 则是向从设备写入数据,这将会影响下一个字节的操作。8位数据之后是一个ACK位的响应操作,主设备会将SDA置于高电平,等待从设备响应(由于是上拉电阻,一端置低取低),从设备置低,主设备就获得响应,然后就可进行下一字节的操作。
注意:有时采用无响应的方式,这取决于从设备的模式,为了通信的可靠性,建议采用有响应的方式。

4)Write(写)操作(8位数据+1位ACK)

这是写操作,ACK位均是从从设备向主设备发送的。

这里写图片描述

5)Read(读)操作(8位数据+1位ACK)

主设备每次发送8位数据完毕后,主设备会返回一个ACK值(低电平)以响应已获得数据。

这里写图片描述

 

参考

[1] Semiconductor P. The i2c-bus specification[J]. 2000.
[2] wiki

标签:

给我留言