现在的位置: 首页 > 综合 > 正文

I2C总线原理

2018年08月25日 ⁄ 综合 ⁄ 共 4540字 ⁄ 字号 评论关闭

I2C总线原理

 什么是I2C总线?

         I2CInter IC,由Philips公司开发,是当今电子设计中应用非常广泛的串行总线之一,主要用于电压、温度监控,EEPROM数据的读写,光模块的管理等。
I2C总线只有两根线,SCLSDASCLSerial
Clock
,串行参考时钟,SDASerial
Data
,串行数据。

         
I2C
总线的速率能达到多少?

     标准模式下:100Kbps
     快速模式下:400Kbps
     高速模式下:3.4Mbps
          I2C总线结构如下图所示:

  如上图所示,I2COCOD输出结构,使用时必须在芯片外部进行上拉,上拉电阻R的取值根据I2C总线上所挂器件数量及I2C总线的速率有关,一般是标准模式下R选择10kohm,快速模式下R选取1kohmI2C总线上挂的I2C器件越多,就要求I2C的驱动能力越强,R的取值就要越小,实际设计中,一般是先选取4.7kohm上拉电阻,然后在调试的时候根据实测的I2C波形再调整R的值。

  I2C总线上最多能挂多少个I2C器件?
 I2C总线上允许挂接I2C器件的数量由两个条件决定:
       1).I2C从设备的地址位数。I2C标准中有7位地址和10位地址两种。如果是7位地址,允许挂接的I2C器件数量为:27128,如果是10位地址,允许挂接的I2C器件数量为:2101024,一般I2C总线上挂接的I2C器件不会太多,所以现在几乎所有的I2C器件都使用7位地址。
       2).挂在I2C总线上所有I2C器件的管脚寄生电容之和。I2C总线规范要求,I2C总线容性负载最大不能超过470pF
I2C总线是如何工作的?
   
      1).I2C总线传输的特点。
      I2C总线按字节传输,即每次传输8bits二进制数据,传输完毕后等待接收端的应答信号ACK,收到应答信号后再传输下一字节。等不到ACK信号后,传输终止。空闲情况下,SCLSDA都处于高电平状态。

      2).如何判断一次传输的开始?
   
     如上图所示,I2C总线传输开始的标志是:SCL信号处于高电平期间,SDA信号出现一个由高电平向低电平的跳变。

3).如何判断一次传输的结束?
   

     如上图所示,I2C总线传输结束的标志是:SCL信号处于高电平期间,SDA信号出现一个由低电平向高电平的跳变。跟开始标识正好相反。

        4).什么样的I2C数据才是有效的。

    在SCL处于高电平期间,SDA保持状态稳定的数据才是有效数据,只有在SCL处于低电平状态时,SDA才允许状态切换。前面已经讲过了,SCL高电平期间,SDA状态发生改变,是传输开始/.结束的标志。

♦I2C总线的主要时序参数有哪些?

I2C总线的主要时序参数有:开始建立时间t
SU:STA
,开始保持时间t HD:STA,数据建立时间t
SU:DAT
,数据保持时间t SU:DAT
,结束建立时间t SU:STO
。如下图所示:
   

开始建立时间:SCL上升至幅度的90%SDA下降至幅度的90%之间的时间间隔;
    开始保持时间:SDA下降至幅度的10%SCL下降至幅度的10%之间的时间间隔;
    数据建立时间:SDA上升至幅度的90%SDA下降至幅度的10%SCL上升至幅度的10%之间的时间间隔;
    数据保持时间:SCL下降至幅度的10%SDA上升至幅度的10%SDA下降至幅度的90%之间的时间间隔;
    结束建立时间:SCL上升至幅度的90%SDA上升至幅度的90%之间的时间间隔;

   I2C总线的时序参数要求:
   

      I2C总线如何进行读写操作?
      

    如上图所示,I2C开始传输时,第一个字节的前7bit是地址信息(7位地址器件),第8bit是操作标识,为“0”时表示写操作,为“1”时表示读操作,第9个时钟周期是应答信号ACK,低有效,高电平表示无应答,传输终止。在上图中还可以看出,正常情况下,写操作是I2C主设备方发起终止操作的,而读操作时,I2C主控制器在接收完最后一个数据后,不对从设备进行应答,传输终止。

      I2C总线案例分析

 问题描述:
    在测试某I2C总线时,发现SDA数据线上有毛刺,而且出现的位置很有规律,一般在第91827-----时钟周期的后面。如下图所示。
  
     问题分析:
     

如上图所示,t1I2C总线上的Slave设备应答信号ACK(9个时钟周期输出)相对与参考时钟SCL下降沿的滞后时间。数据方向是Slave-->Mastert
2
I2C总线上的Master设备在第10个时钟输出相对了参考时钟SCL的滞后时间。数据方向是Master-->Slave∆tMaster设备与Slave设备输出数据延迟的时间差。

        Master设备发出最后一个bit数据后,总线的使用权交给Slave设备使用,由Slave设备发出应答信号ACK,该信号在SCL下降沿经t1延迟后发出,在SCL的下一个时钟沿后内经t1后结束。而Master设备在同一个时钟沿,经常t2延迟后发出第9bit数据,这样在∆t
(t2-t1)
时间内,MasterSlave设备都没有使用总线,由于SDAOC/OD输出,芯片外面通过电阻R上拉到VCC,将SDA电平拉升,但是由于∆t很短,VCC还没来的及将SDA拉到稳定的高电平,Master就开始发出数据“VCC还没来的及将SDA拉到稳定的高电平,Master就开始发出数据“0”将SDA拉低,因此就在SDA上形成了宽度很窄的半高电平,就是我们观察到的毛刺。此毛刺不会I2C总线的读写时序产生影响。无需处理。

 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

I2C总线详细介绍  

I2C是一种串行总线的外设接口,它采用同步方式串行接收或发送信息,两个设备在同一个时钟下工作。I2C总线只用两根线:串行数据SDASerial
Data
)、串行时钟SCLSerial Clock)。

由于I2C只有一根数据线,因此其发送信息和接收信息不能同时进行。信息的发送和接收只能分时进行。I2C串行总线工作时传输速率最高可达400K
bit/s

I2C总线上的所有器件的SDA线并接在一起,所有器件的SCL线并接在一起,且SDA线和SCL线必须通过上拉电阻连接到正电源。

I2C总线的数据传输协议要比SPI总线复杂一些,因为I2C总线器件没有片选控制线,所以I2C总线数据传输的开始必须由主器件产生通信的开始条件(SCL高电平时,SDA产生负跳变);通信结束时,由主器件产生通信的结束条件(SCL高电平时,SDA产生正跳变)。

SDA线上的数据在SCL高电平期间必须保持稳定,否则会被误认为开始条件或结束条件,只有在SCL低电平期间才能改变SDA线上的数据。I2C总线的数据传输波形图如下图所示。

I2C总线详细介绍 - kmustchenb - 楚天碧

 I2C应用实例

AT24C系列为美国ATMEL公司推出的串行COMSE2PROM,具有功耗小,宽电压范围等优点。下图为AT24C系列E2PROM的引脚图。图中A0A1A2为器件地址引脚,Vss为地,Vcc为正电源,WP为写保护,SCL为串行时钟线,SDA为串行数据线。AT24C系列E2PROM采用I2C总线,I2C总线上可挂接多个接口器件,在I2C总线上的每个器件应有唯一的器件地址,按I2C总线规则,器件地址为7位二进制数,它与一位数据方向位构成一个器件寻址字节。器件寻址字节的最低位(D0)为方向位(读/写),最高4位(D7~D4)为器件型号地址(不同的I2C总线接口器件的型号地址由厂家给定,AT24C系列E2PROM的型号地址都为1010);其余3位(D3~D1)与器件引脚地址A2A1A0相对应。器件地址格式:

1010 
A
2A1A0

I2C总线详细介绍 - kmustchenb - 楚天碧

对于E2PROM的片内地址,AT24C01AT24C02由于芯片容量可用一个字节表示,故读写某个单元前,先向E2PROM写入一个字节的器件地址,再写入一个字节的片内地址。而AT24C04AT24C08AT24C16分别需要9位、10位和11位片内地址,所以AT24C04把器件地址中的A0作为片内地址的最高位,AT24C08把器件地址中的A1A0作为片内地址的最高两位,AT24C16把器件地址中的A2A1A0作为片内地址的最高三位。凡在系统中把器件的引脚地址用作片内地址后,该引脚在电路中不得使用,做悬空处理。AT24C32AT24C64AT24C128AT24C256AT24C512的片内地址采用两个字节。

AT24C系列E2PROM的读写操作原理

下列读写操作中SDA线上数据传送状态标记注释如下:

Start为启动信号(SCL为高电平,SDA产生负跳变),由主机发送。

Stop为结束信号(SCL为高电平,SDA产生正跳变),由主机发送。

AddressByteAddreeeByte HAddreeeByte
L
为地址字节,指定片内某单元地址,由主机发送。

data为数据字节,由数据发送方发送。

0
为肯定应答信号,由数据接收方发送。

1
为否定应答信号,由数据接收方发送。

主机控制数据线SDA时,在SCL高电平期间必须保持SDA线上的数据稳定,否则会被误认为对从机的起始条件或结束条件。主机只能在SCL低电平期间改变SDA线上的数据。主机写操作期间,用SCL的上升沿写入数据;主机读操作期间,用SCL的下降沿读出数据。

 

AT24C系列AT24C01~AT24C16中读n个字节的数据格式:

I2C总线详细介绍 - kmustchenb - 楚天碧

AT24C系列AT24C32~AT24C512中读n个字节的数据格式:

I2C总线详细介绍 - kmustchenb - 楚天碧

AT24C系列AT24C01~AT24C16中写n个字节的数据格式(n<=页长,且n个字节不能跨页):

I2C总线详细介绍 - kmustchenb - 楚天碧

AT24C系列AT24C32~AT24C512中写n个字节的数据格式(n<=页长,且n个字节不能跨页):

I2C总线详细介绍 - kmustchenb - 楚天碧

 

应答信号

I2C总线数据传送时,每成功地传送一个字节数据后,接收器都必须产生一个应答信号。应答的器件在第9个时钟周期时将SDA线拉低,表示其已经收到一个8位数据。

I2C器件在接收到起始信号和从器件地址之后响应一个应答信号,如果器件已选择了写操作,则在每接收一个8位字节之后响应一个应答信号。

I2C器件工作在读模式时,在发送一个8位数据后释放SDA线(SDA置为高电平)并监视一个应答信号,一旦接收到主器件的应答信号,I2C器件则继续发送数据,如果主器件没有发送应答信号(发送非应答信号,即SDA为高电平),器件停止传送数据且等待一个停止信号。

抱歉!评论已关闭.