i2c总线原理(1)

转自:http://blog.c114.net/html/15/562315-74826.html                    万分感谢!

 

什么是 I2C 总线? 1u.JLNV0

 

6M%N3j0@&A,]0

         I2C Inter IC ,由 Philips 公司开发,是当今电子设计中应用非常广泛的串行总线之一,主要用于电压、温度监控, EEPROM 数据的读写,光模块的管理等。 中国通信人博客l dF1~2Zg

I2C 总线只有两根线, SCL SDA SCL Serial Clock ,串行参考时钟, SDA Serial Data ,串行数据。 中国通信人博客:Q�R5u | U5tD c+N:e

 

C1@C~E%{{Fg0

          I2C 总线的速率能达到多少? 中国通信人博客;yUE!{'/(h+G�b

 中国通信人博客2M%BwI_

     标准模式下: 100Kbps 中国通信人博客$j MX8Z9M5J7m'_8{`

     快速模式下: 400Kbps 中国通信人博客/yeU'c cD

     高速模式下: 3.4Mbps 中国通信人博客D:Z b.MW nJ

          I2C总线结构如下图所示:

@ c$f*c C/dPF[(^%Y0

         

U h/ib9py v/xH*R"k0

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

 

6q6y'F'h+KsQO r8^6cr0

       I2C 总线上最多能挂多少个 I2C 器件? 中国通信人博客&~["B;W1I-y

 中国通信人博客/yi o?/z+{q t _w

       I2C 总线上允许挂接 I2C 器件的数量由两个条件决定: 中国通信人博客+o7d&jqv2_

       1).I2C 从设备的地址位数。 I2C 标准中有 7 位地址和 10 位地址两种。如果是 7 位地址,允许挂接的 I2C 器件数量为: 27 128 ,如果是 10 位地址,允许挂接的 I2C 器件数量为: 210 1024 ,一般 I2C 总线上挂接的 I2C 器件不会太多,所以现在几乎所有的 I2C 器件都使用 7 位地址。 中国通信人博客K3oxe7y

       2). 挂在 I2C 总线上所有 I2C 器件的管脚寄生电容之和。 I2C 总线规范要求, I2C 总线容性负载最大不能超过 470pF

l5vz*w8WEL [ U/c)d0

 

4bw}Gh7t!l0

       I2C 总线是如何工作的?

/.M]g _0q d6}4A0

   

!{+^"m Z hw6Bp0

      1).I2C 总线传输的特点。 中国通信人博客px4b5tlc:z7qDN

      I2C 总线按字节传输,即每次传输 8bits 二进制数据,传输完毕后等待接收端的应答信号 ACK ,收到应答信号后再传输下一字节。等不到 ACK 信号后,传输终止。空闲情况下, SCL SDA 都处于高电平状态。

0z/h*XFYT~l0

 

6l+^v2X!EV0

      2). 如何判断一次传输的开始? 中国通信人博客#A'p!W`w�apF th

  

/`'w%C4{I'g(y�[W0

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

+M M2^$bM-|E l0

 中国通信人博客:g#d6hy;}f

       3). 如何判断一次传输的结束? 中国通信人博客n/z1ob$K$n_z_

    中国通信人博客gu z)RA'[Uw

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

Me_ C+A9L Mf�sj0

 中国通信人博客P4tl.wZ [s

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

0Kq Y)Pq!L/bh0

/szjT|2d2P0

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

5J/w6C+E/zy&_2o0

 

_^I x:L0

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

8m0m%ZJ9M x*D:n0

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

+m*yvc QT0

    中国通信人博客�xoE%q2dR W M

    开始建立时间: SCL 上升至幅度的 90% SDA 下降至幅度的 90% 之间的时间间隔;

4cKp `+~@ i7L,CXNM0

    开始保持时间: SDA 下降至幅度的 10% SCL 下降至幅度的 10% 之间的时间间隔;

G7z$B7n"p0

    数据建立时间: SDA 上升至幅度的 90% SDA 下降至幅度的 10% SCL 上升至幅度的 10% 之间的时间间隔; 中国通信人博客?` qcEWX zJf

    数据保持时间: SCL 下降至幅度的 10% SDA 上升至幅度的 10% SDA 下降至幅度的 90% 之间的时间间隔;

)]V(l*H W:Y+g/0

    结束建立时间: SCL 上升至幅度的 90% SDA 上升至幅度的 90% 之间的时间间隔; 中国通信人博客0a0Pp*_&i

 

E!TbQB:vU0

   I2C总线的时序参数要求: 中国通信人博客o1hze9t(u-r,G8x JHm

   中国通信人博客Gw*d(oPkp6C

中国通信人博客!?5|V /D ns#K/j6?

      I2C 总线如何进行读写操作? 中国通信人博客,uqG+r-I8vNy5L

      中国通信人博客�S6m5E rr,]

 

5d_*z2I `$xc?5K0

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

 中国通信人博客!x8{#^5I#b:j,|6}T c

      I2C 总线案例分析

kj�/+N:D g0

 

^ r|h] i4^0

    问题描述:

MB]iV8T/H-F.A8H~Z S0

    在测试某 I2C 总线时,发现 SDA 数据线上有毛刺,而且出现的位置很有规律,一般在第 9 18 27----- 时钟周期的后面。如下图所示。 中国通信人博客 Pc SGG$N

  

%]6yL&sP%j2u.y j;e0

     问题分析: 中国通信人博客�[mKb9]

    

pa:l(p@"{![0

  

G1Y%L7yYk }2x$wH0

    如上图所示, t1 I2C 总线上的 Slave 设备应答信号 ACK( 9 个时钟周期输出 ) 相对与参考时钟 SCL 下降沿的滞后时间。数据方向是 Slave--> Master t 2 I2C 总线上的 Master 设备在第 10 个时钟输出相对了参考时钟 SCL 的滞后时间。数据方向是 Master--> Slave ∆t Master 设备与 Slave 设备输出数据延迟的时间差。 中国通信人博客i;K)Ccjb

 中国通信人博客K&P(V(Y NH

        Master 设备发出最后一个 bit 数据后,总线的使用权交给 Slave 设备使用,由 Slave 设备发出应答信号 ACK ,该信号在 SCL 下降沿经 t1 延迟后发出,在 SCL 的下一个时钟沿后内经 t1 后结束。而 Master 设备在同一个时钟沿,经常 t2 延迟后发出第 9bit 数据,这样在 ∆t (t2-t1) 时间内, Master Slave 设备都没有使用总线,由于 SDA OC/OD 输出,芯片外面通过电阻 R 上拉到 VCC ,将 SDA 电平拉升,但是由于 ∆t 很短, VCC 还没来的及将 SDA 拉到稳定的高电平, Master 就开始发出数据“

你可能感兴趣的:(i2c总线原理(1))