I2C

一般串行数据通讯都有时钟和数据之分,有异步和同步之别.有单线,双线和三线等.

I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的 两线式串行总线,用于连接微控制器及其外围设备
I2C使用两根双向信号线来传递数据  Serial Clock Line (SCL)     Serial Data Address (SDA)

I2C 总线接口特性

1.串行接口的发送和接收一般都各用一条线,如的TXD RXD,而I2C总线则根据器件的功能通过软件程序使其可工作于发送或接收方式。

2.在I2C 总线上传送信息时的时钟同步信号是由挂接在SCL 时钟线上的所有器件的“线与完成的。SCL 线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL 线一直保持低电平,使SCL线上的所有器件开始低电平期。当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL 线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL 线拉成低电平。这样就在SCL 线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。

线与:在一个结点(线)上,连接一个上拉电阻到电源 VCC或 VDD和 n个 NPN 或 NMOS 晶体管的集电极 C或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上,只要有一个晶体管饱和,这个结点(线)就被拉到地线电平上.

3.总线速度分为标准速度100kbps,快速模式400kbps,高速模式3.4Mbps
4.半双工,仅需要两根线(所以又被称为2-wire总线)
5.SDA下降沿跟随一个SCL下降沿表示传输开始   SCL上升沿跟随一个SDA上升沿表示传输结束
                                                                                                                
6. I2 C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,(否则 ,SDA下跳则 "判罚 ""起始信号 S",SDA上跳则 "判罚 ""停止信号 P".)只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
7.在开始信号以后,总线即被认为处于忙状态 ;在结束信号以后的一段时间内,总线被认为是空闲的。

I2C 总线数据传送格式

1.I2C 总线开始信号后,送出的第一个字节数据是用来选择从器件地址的。

(1)器件类型由: D7-D4 4位决定的。这是由半导公司生产时就已固定此类型的了,也就是说这 4位已是固定的。
(2)用户自定义地址码: D3-D13位。这是由用户自己设置的,所以同一 IIC总线上同一型号的 IC只能最多共挂 8片同种类芯片
(3)最低一位就是 R/W位。这位不用我多说了   读写是站在主机的立场上定义的 . 
2.  I2C 总线上每次传送的数据字节数不限,但每一个字节必须为 位,而且每个传送的字节后面必须跟一个认可位(第 位),也叫应答位( ACK),当为最后一次数据传输的时候接收方发送一个非应答信号。

为了完成一个字节的传输,接收方应该向发送方发送一个ACKACK应该发生在SCL线的第九个脉冲期间。当接受到ACK信号时,发送方应该释放SDA线使SDA线电平为高。接收方应该驱动SDA线为低。因此,在第九个SCL脉冲的高电平期间SDA保持为低(因为信号是“与”的)。ACK的传输可以由软件通过IICSTAT寄存器控制是否禁止,但它仍然是需要产生的。每个字节后应该由对方回送一个应答信号ACK做为对方在线的标志

                                

I2C 总线数据传送过程             
1.每次都是先传最高位,通常从器件在接收到每个字节后都会做出响应,即释放SCL线返回高电平,准备接收下一个数据字节,主器件可继续传送。
2.如果从器件正在处理一个实时事件而不能接收数据时,(例如正在处理一个内部中断,在这个中断处理完之前就不能接收I2C 总线上的数据字节)可以使时钟SCL线保持低电平,从器件必须使SDA 保持高电平,此时主器件产生个结束信号,使传送异常结束,迫使主器件处于等待状态。当从器件处理完毕时将释放SCL 线,主器件继续传送
读写操作:
在发送模式下,当一个数据传输时,IIC总线接口将等待直到IICDS寄存器收到一个新数据。在一个新数据写入IICDS寄存器前,SCL信号将保持为低。在数据被写入之后,信号线被释放(为高)。ARM需要保持中断信号来辨别当前数据发送完成。在ARM接到一个中断请求后,它将写一个新的数据到IICDS
在接收模式下,当一个数据接收时,IIC总线接口将等待直到IICDS寄存器数据被读出。在新数据被读出之前,SCL信号保持为低。在数据被读出后,信号线被释放(为高)。ARM应保持中断信号以辨别接收数据操作完成。在ARM收到一个中断请求时,它将从IICDS读出数据。
§主设备传送一个字节到从设备

I2C 总线竞争和仲裁机制
1. 总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况。
2. I2C 总线具有多主控能力,可以对发生在SDA 线上的总线竞争进行仲裁。
3. 其仲裁原则为:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,这种情况下,侦测到总线上是低电平(线与),则发送低电平的设备获得总线控制权。如果两个设备都产生一个低电平为地址的第一位,则应该再仲裁第二个地址位,仲裁会一直继续直到最后一个地址位.

I2C总线工作流程
开始:信号表明传输开始。
地址:主设备发送地址信息,包含 位的从设备地址和 位的指示位(表明读或者写,即数据流的方向)。
数据:根据指示位,数据在主设备和从设备之间传输。数据一般以 位传输,最重要的位放在前面 ;具体能传输多少量的数据并没有限制。接收器上用一位的 ACK 表明每一个字节都收到了。传输可以被终止和重新开始。

停止:信号结束传输。

I2C总线的限制
§I2C总线设备都是OC/OD输出,所以高电平靠上拉电阻产生
§由于驱动能力和静态功耗限制,上拉电阻不能取太小值,导致电压上升率dV/dt受限
§I2C总线上总负载电容越小越有利于驱动
§I2C高速规范要求负载电容小于400pf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值