您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > I2C时序分析和基础知识总结
一、什么是I2C三、I2C基础知识二、I2C时序分析四、I2C注意事项I2C(Inter-IntegratedCircuit)总线是由PHILIPS公司(现在的NXP半导体)开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。1、数据位的有效性规定I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。2、起始和终止信号SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。I2C总线是双向传输的总线,因此主机和从机都可能成为发送器和接收器。如果主机向从机发送数据,则主机是发送器,而从机是接收器;如果主机从从机读取数据,则主机是接收器,而从机是发送器。不论主机是发送器还是接收器,时钟信号SCL都要由主机来产生。每个器件都有一个唯一的地址识别,而且都可以作为一个发送器和接收器(由器件的功能决定)。很明显,LCD驱动器只能是接收器,而存储器既可以接收又可以发送数据。•连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号。对于不具备I2C总线硬件接口的有些单片机来说,为了检测起始和终止信号,必须保证在每个时钟周期内对数据线SDA采样两次。•接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将SCL线拉成低电平,从而使主机处于等待状态。直到接收器件准备好接收下一个字节时,再释放SCL线使之为高电平,从而使数据传送可以继续进行。3、数据传送格式(1)字节传送与应答每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的“非应答”通知主机,主机则应发出终止信号以结束数据的继续传送。当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。但如果从机要完成一些其他功能后才能接收或发送下一个完整的数据字节,那么可以使时钟信号保持低电平迫使主机进入等待状态。这也是唯一一个从机改变主机时钟的情况。当从机准备好接受下一个字节时,释放时钟线SCL,数据传输继续。(2)数据帧格式I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。在总线的一次数据传送过程中,可以有以下几种组合方式:在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。每次数据传送总是由主机产生的终止信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。a、主机向从机发送数据,数据传送方向在整个传送过程中不变:注:有阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。A表示应答,A表示非应答(高电平)。S表示起始信号,P表示终止信号。b、主机在第一个字节后,立即由从机读数据c、在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相。4、总线的寻址I2C总线协议有明确的规定:采用7位的寻址字节(寻址字节是起始信号后的第一个字节)。(1)寻址字节的位定义D7~D1位组成从机的地址。D0位是数据传送方向位,为“0”时表示主机向从机写数据,为“1”时表示主机由从机读数据。•主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己正被主机寻址,根据R/位将自己确定为发送器或接收器。•从机的地址由固定部分和可编程部分组成。在一个系统中可能希望接入多个相同的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目。如一个从机的7位寻址位有4位是固定位,3位是可编程位,这时仅能寻址8个同样的器件,即可以有8个同样的器件接入到该I2C总线系统中。(2)寻址字节中的特殊地址固定地址编号0000和1111已被保留作为特殊用途。起始信号后的第一字节的8位为“00000000”时,称为通用呼叫地址。通用呼叫地址的用意在第二字节中加以说明。格式为:第二字节为06H时,所有能响应通用呼叫地址的从机器件复位,并由硬件装入从机地址的可编程部分。能响应命令的从机器件复位时不拉低SDA和SCL线,以免堵塞总线。第二字节为04H时,所有能响应通用呼叫地址并通过硬件来定义其可编程地址的从机器件将锁定地址中的可编程位,但不进行复位。如果第二字节的方向位B为“1”,则这两个字节命令称为硬件通用呼叫命令。在这第二字节的高7位说明自己的地址。接在总线上的智能器件,如单片机或其他微处理器能识别这个地址,并与之传送数据。硬件主器件作为从机使用时,也用这个地址作为从机地址。格式为:在系统中另一种选择可能是系统复位时硬件主机器件工作在从机接收器方式,这时由系统中的主机先告诉硬件主机器件数据应送往的从机器件地址,当硬件主机器件要发送数据时就可以直接向指定从机器件发送数据了。(3)起始字节不具备I2C总线接口的单片机,则必须通过软件不断地检测总线,以便及时地响应总线的请求。单片机的速度与硬件接口器件的速度就出现了较大的差别,为此,I2C总线上的数据传送要由一个较长的起始过程加以引导。起始字节是提供给没有I2C总线接口的单片机查询I2C总线时使用的特殊字节。引导过程由起始信号、起始字节、应答位、重复起始信号(Sr)组成。•请求访问总线的主机发出起始信号后,发送起始字节(00000001),另一个单片机可以用一个比较低的速率采样SDA线,直到检测到起始字节中的7个“0”中的一个为止。在检测到SDA线上的高电平后,单片机就可以用较高的采样速率,以便寻找作为同步信号使用的第二个起始信号Sr。•在起始信号后的应答时钟脉冲仅仅是为了和总线所使用的格式一致,并不要求器件在这个脉冲期间作应答。(4)10位寻址10位寻址向下兼容7位寻址,而且可以结合使用。10位寻址不会影响已有的7位寻址。有7位和10位地址的器件可以连接到相同的I2C总线,它们都能用于F/S模式和Hs模式系统。10位从机地址是由在起始条件(S)或重复起始条件(Sr)后的头两个字节组成。第一个字节的头7位是11110XX的组合,其中最后两位(XX)是10位地址的两个最高位(MSB);第一个字节的第8位是R/W位,决定了报文的方向。第一个字节的最低位是‘0’表示主机将写信息到选中的从机。‘1’表示主机将向从机读信息。如果R/W位是0,则第二个字节是10位从机地址剩下的8位。如果R/W位是1,则下一个字节是从机发送给主机的数据。主机-发送器用10位地址寻址从机-接收器主机-接收器用10位地址寻址从机-发送器组合格式。主机用10位地址寻址从机,然后发送数据到这个从机并向这个从机读数据1、I2C总线数据传送速率I2C总线的通信速率受主机控制,能快能慢。但是最高速率是有限制的,I2C总线上数据的传输速率在标准模式(Standard-mode)下为100kbps(每秒100k位),在快速模式下为400kbps。按照后来修订的版本,位速率最高可达3.4Mbps。2、子地址带有I2C总线的器件除了有从机地址(SlaveAddress)外,还可能有子地址。从机地址是指该器件在I2C总线上被主机寻址的地址,而子地址是指该器件内部不同部件或存储单元的编址。例如,带I2C总线接口的E2PROM就是拥有子地址器件的典型代表。某些器件(只占少数)内部结构比较简单,可能没有子地址,只有必须的从机地址。与从机地址一样,子地址实际上也是像普通数据那样进行传输的,传输格式仍然是与数据相统一的,区分传输的到底是地址还是数据要靠收发双方具体的逻辑约定。子地址的长度必须由整数个字节组成,可能是单字节(8位子地址),也可能是双字节(16位子地址),还可能是3字节以上,这要看具体器件的规定。3、仲裁是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使报文不被破坏的过程。所有主机在SCL线上产生它们自己的时钟来传输I2C总线上的报文。数据只在时钟的高电平周期有效。因此,需要一个确定的时钟进行逐位仲裁。时钟同步通过线与连接I2C接口到SCL线来执行。这就是说:SCL线的高到低切换会使器件开始数它们的低电平周期,而且一旦器件的时钟变低电平,它会使SCL线保持这种状态直到到达时钟的高电平。但是,如果另一个时钟仍处于低电平周期,这个时钟的低到高切换不会改变SCL线的状态。因此,SCL线被有最长低电平周期的器件保持低电平。此时,低电平周期短的器件会进入高电平的等待状态。当所有有关的器件数完了它们的低电平周期后,时钟线被释放并变成高电平,之后器件时钟和SCL线的状态没有差别,而且所有器件会开始数它们的高电平周期。首先完成高电平周期的器件会再次将SCL线拉低,这样产生的同步SCL时钟的低电平周期由低电平时钟周期最长的器件决定,而高电平周期由高电平时钟周期最短的器件决定。这发生在仲裁之前,这部分称为同步。主机只能在总线空闲的时侯启动传输。两个或多个主机可能在起始条件的最小持续时间(tHD;STA)内产生一个起始条件,结果在总线上产生一个规定的起始条件。当SCL线是高电平时,仲裁在SDA线发生;这样,在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同。仲裁下图显示了两个主机的仲裁过程,当然可能包含更多的内容(由连接到总线的主机数量决定)。此时,产生DATA1的主机的内部数据电平与SDA线的实际电平有一些差别,如果关断数据输出,这就意味着总线连接了一个高输出电平。这不会影响由赢得仲裁的主机初始化的数据传输。由于I2C总线的控制只由地址或主机码以及竞争主机发送的数据决定,没有中央主机,总线也没有任何定制的优先权。1、关于400pF负载电容(1)波形畸变:电容越大,其滤波效果越明显。当这个电容过大时,很明显部分通讯信号会被滤除,引起波形畸变,I2C将可能会产生误码,从而无法正常通信。(2)总线驱动能力:负载电容决定了总线在某一速率下的稳定性。当输出为高时,电流通过上拉电阻对负载电容充电。上拉越大,电容越大,所需要的时间就越长,如果超过了通信周期的10%,那么这个上升沿就太缓了,相应的建立时间会受到影响。I2C规范的最大负载电容是400pF,快速模式下是100pF,高速模式下是20pF(自己估的)、2、I2C的负载能力(1)负载电容。I2C的负载并不是纯电阻负载,在负载的输入端一般都会有一个等效输入电容,一般情况下都是PF级的,而这些负载都是并联的,所以负载越多,电容越大。(2)负载电感,它的作用跟电容差不多,这个电感主要是走线和引脚带来的等效电感。(3)纯负载。I2C的负载也可以等效为一个纯电阻,负载越多,这个电阻就越小,对I2C的输出能力要求就越高,超过I2C总线的带载能力时,它也不能正常工作。
本文标题:I2C时序分析和基础知识总结
链接地址:https://www.777doc.com/doc-1861831 .html