I2C总线原理

I2C总线原理

     ♦什么是 I2C 总线?

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

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

     标准模式下: 100Kbps
     快速模式下: 400Kbps
     高速模式下: 3.4Mbps
          I2C总线结构如下图所示:
          
<SPAN lang=EN-US style="FONT-SIZE: 12pt"><FONT face="Times New Roman">     如上图所示,I2C OC OD 输出结构,使用时必须在芯片外部进行上拉,上拉电阻R 的取值根据I2C 总线上所挂器件数量及I2C 总线的速率有关,一般是标准模式下R 选择10kohm ,快速模式下R 选取1kohm I2C 总线上挂的I2C 器件越多,就要求I2C 的驱动能力越强,R 的取值就要越小,实际设计中,一般是先选取4.7kohm 上拉电阻,然后在调试的时候根据实测的I2C 波形再调整R 的值。
<SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> 
       ♦I2C 总线上最多能挂多少个 I2C 器件?

<SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">        I2C 总线上允许挂接 I2C 器件的数量由两个条件决定:
       1).I2C 从设备的地址位数。 I2C 标准中有 7 位地址和 10 位地址两种。如果是 7 位地址,允许挂接的 I2C 器件数量为: 27 128 ,如果是 10 位地址,允许挂接的 I2C 器件数量为: 210 1024 ,一般 I2C 总线上挂接的 I2C 器件不会太多,所以现在几乎所有的 I2C 器件都使用 7 位地址。
       2). 挂在 I2C 总线上所有 I2C 器件的管脚寄生电容之和。 I2C 总线规范要求, I2C 总线容性负载最大不能超过 470pF

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

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

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

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

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

<SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">       ♦I2C 总线的主要时序参数有哪些?
<SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">        I2C 总线的主要时序参数有:开始建立时间 t SU:STA ,开始保持时间 t HD:STA ,数据建立时间 t SU:DAT ,数据保持时间 t SU:DAT  ,结束建立时间 t SU:STO  。如下图所示:
    
<SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">     开始建立时间: 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总线案例分析

<SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">     问题描述:
    在测试某 I2C 总线时,发现 SDA 数据线上有毛刺,而且出现的位置很有规律,一般在第 9 18 27----- 时钟周期的后面。如下图所示。
  
     问题分析:
     <SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">  
    如上图所示, t1 I2C 总线上的 Slave 设备应答信号 ACK( 9 个时钟周期输出 ) 相对与参考时钟 SCL 下降沿的滞后时间。数据方向是 Slave--> Master t 2 I2C 总线上的 Master 设备在第 10 个时钟输出相对了参考时钟 SCL 的滞后时间。数据方向是 Master--> Slave ∆t Master 设备与 Slave 设备输出数据延迟的时间差。  


        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 就开始发出数据“ 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值