logo资料库

I2C时序图的详细讲解.pdf

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
I2C 时序图的详细讲解 i2c 简易时序图 启动信号: SCL 为高电平的时候,SDA 由高电平向低电平跳变。结束信号:SCL 为高电平的时候,SDA 由低电平向高电平 跳变。 应答信号: I2C 总线上的所有数据都是以 8 位字节传送的,发送器每发送一个字节,就在时钟脉冲 9 期间释放数据线,由 接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位(ACK 简称应答位),表示接收器已经成功地 接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功,对于反 馈有效应答位 ACK 的要求是,接收器在第 9 个时钟脉冲之前的低电平期间将 SDA 线拉低,并且确保在该时钟的高 电平期间为稳定的低电平。如果接收器是主控器,则在它收到最后一个字节后,发送一个 NACK 信号,以通知被控 发送器结束数据发送,并释放 SDA 线,以便主控接收器发送一个停止信号 P。 写时序: 开始信号:主机+从设备地址+写命令,从机应答,应答成功,表示有这个设备,然后主机+设备内部寄存器地 址,此时不用再加写命令控制字,从机应答,应答成功,表示设备内有这个地址,主机写入数据,从机应答,是 否继续发送,不发送的话,发送停止信号 P。 读时序: 要想读设备,首先要知道将要所读取设备的地址告诉从设备,从设备才能将数据放到(发送)SDA 上使主设备 读取,从设备将数据放入 SDA 上的过程,由硬件主动完成,不用人为的写入。所以首先先写入从机地址,然后+写 控制命令,从机应答,应答成功,表示有这个设备,然后写入内部寄存器地址,此时不用再加写命令控制字,从 机应答,应答成功,表示设备内有这个地址。然后主机继续发出:写入从机地址,然后+读命令,从机应答,应答 成功,此时便可以读取数据了,从设备已经将数据放入到 SDA 上了。地址跟设备已经验证了,不用再进行验证。 启动信号与停止信号的时序图如下图所示: 数据位发送: 在 I2C 总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在 SCL 串行时钟的配合下,在 SDA 上逐位地串行传送每一位数据。进行数据传送时,在 SCL 呈现高电平期间,SDA 上的电平必须保持稳定,低电 平为数据 0,高电平为数据 1。只有在 SCL 为低电平期间,才允许 SDA 上的电平改变状态。逻辑 0 的电平为低电 压,而逻辑 1 则为高电平。时序如下图所示
应答信号时序图如下图所示: 当进行一次写时序的时候,SDA 上的数据变化的时序图如下: 当进行一次读的时候,SDA 上的数据变化的时序图如下: i2c 协议中的数据传输时序图如下:
I2C 总线信号时序总结 总线空闲状态 I2C 总线总线的 SDA 和 SCL 两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场 效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。 启动信号 在时钟线 SCL 保持高电平期间,数据线 SDA 上的电平被拉低(即负跳变),定义为 I2C 总线总线的启动信 号,它标志着一次数据传输的开始。启动信号是一种电平跳变时序信号,而不是一个电平信号。启动信号是由主 控器主动建立的,在建立该信号之前 I2C 总线必须处于空闲状态。 重启动信号 在主控器控制总线期间完成了一次数据通信(发送或接收)之后,如果想继续占用总线再进行一次数据通信 (发送或接收),而又不释放总线,就需要利用重启动 Sr 信号时序。重启动信号 Sr 既作为前一次数据传输的结 束,又作为后一次数据传输的开始。利用重启动信号的优点是,在前后两次通信之间主控器不需要释放总线,这 样就不会丢失总线的控制权,即不让其他主器件节点抢占总线。 重启动信号 在主控器控制总线期间完成了一次数据通信(发送或接收)之后,如果想继续占用总线再进行一次数据通信 (发送或接收),而又不释放总线,就需要利用重启动 Sr 信号时序。重启动信号 Sr 既作为前一次数据传输的结 束,又作为后一次数据传输的开始。利用重启动信号的优点是,在前后两次通信之间主控器不需要释放总线,这 样就不会丢失总线的控制权,即不让其他主器件节点抢占总线。 停止信号
在时钟线 SCL 保持高电平期间,数据线 SDA 被释放,使得 SDA 返回高电平(即正跳变),称为 I2C 总线的停 止信号,它标志着一次数据传输的终止。停止信号也是一种电平跳变时序信号,而不是一个电平信号,停止信号 也是由主控器主动建立的,建立该信号之后,I2C 总线将返回空闲状态。 不是在数据有效性中规定在 SDA 只能在 SCL 的低电平的时候变化,为何 STAR,STOP 不一样?首先 STAR 和 STOP 不是数据,所以可以不遵守数据有效性中的规定,其它数据都遵守,而 STAR 和 STOP“不遵守”导致 STAR 和 STOP 更容易被识别。这样不是不遵守而是更有优势。 起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态,在停止条件的某段时间后总线被 认为再次处于空闲状态。 如果产生重复起始(Sr) 条件而不产生停止条件,总线会一直处于忙的状态。此时的起始条件(S)和重复 起始(Sr) 条件在功能上是一样的。 如果连接到总线的器件合并了必要的接口硬件,那么用它们检测起始和停止条件十分简便。但是没有这种接 口的微控制器在每个时钟周期至少要采样 SDA 线两次来判别有没有发生电平切换。 数据位传送 在 I2C 总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在 SCL 串行时钟的配合下,在 SDA 上逐位地串行传送每一位数据。进行数据传送时,在 SCL 呈现高电平期间,SDA 上的电平必须保持稳定,低电 平为数据 0,高电平为数据 1。只有在 SCL 为低电平期间,才允许 SDA 上的电平改变状态。逻辑 0 的电平为低电 压,而逻辑 1 的电平取决于器件本身的正电源电压 VDD(当使用独立电源时)。数据位的传输是边沿触发。 应答信号 I2C 总线上的所有数据都是以 8 位字节传送的,发送器每发送一个字节,就在时钟脉冲 9 期间释放数据线,由 接收器反馈一个应答信号。 应答信号为低电平时,规定为有效应答位(ACK 简称应答位),表示接收器已经成功 地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。 对于
反馈有效应答位 ACK 的要求是,接收器在第 9 个时钟脉冲之前的低电平期间将 SDA 线拉低,并且确保在该时钟的 高电平期间为稳定的低电平。 如果接收器是主控器,则在它收到最后一个字节后,发送一个 NACK 信号,以通知 被控发送器结束数据发送,并释放 SDA 线,以便主控接收器发送一个停止信号 P。 插入等待时间 如果被控器需要延迟下一个数据字节开始传送的时间,则可以通过把时钟线 SCL 电平拉低并且保持,使主控 器进入等待状态。一旦被控器释放时钟线,数据传输就得以继续下去,这样就使得被控器得到足够时间转移已经 收到的数据字节,或者准备好即将发送的数据字节。带有 CPU 的被控器在对收到的地址字节做出应答之后,需要 一定的时间去执行中断服务子程序,来分析或比较地址码,其间就把 SCL 线钳位在低电平上,直到处理妥当后才 释放 SCL 线,进而使主控器继续后续数据字节的发送。 总线封锁状态 在特殊情况下,如果需要禁止所有发生在 I2C 总线上的通信活动,封锁或关闭总线是一种可行途径,只要挂 接于该总线上的任意一个器件将时钟线 SCL 锁定在低电平上即可。 总线竞争的仲裁 总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况,这种情况叫做总线竞 争。I2C 总线具有多主控能力,可以对发生在 SDA 线上的总线竞争进行仲裁,其仲裁原则是这样的:当多个主器件 同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时 SDA 总线电平 不符的那个器件将自动关闭其输出级。总线竞争的仲裁是在两个层次上进行的。首先是地址位的比较,如果主器
件寻址同一个从器件,则进入数据位的比较,从而确保了竞争仲裁的可靠性。由于是利用 I2C 总线上的信息进行 仲裁,因此不会造成信息的丢失。 为何识别到“0”将丢失仲裁呢?因为对于 OD 门,只能驱动到低电平,释放总线只能通过不驱动总线释放, 停止驱动即产生“1”,但是发现总线还是“0”,这说明还有主机在跟自己竞争总线使用权,自己线驱动到 “1”,确检测到“0”,那代表自己已经失去了仲裁。 主机只能在总线空闲的时侯启动传送。两个或多个主机可能在起始条件的最小持续时间 tHD;STA 内产生一个 起始条件,结果在总线上产生一个规定的起始条件。 当 SCL 线是高电平时,仲裁在 SDA 线发生;这样,在其他主机发送低电平时,发送高电平的主机将断开它的 数据输出级,因为总线上的电平与它自己的电平不相同。然后,进一步获得其的判定条件: 仲裁可以持续多位。首先是比较地址位。如果每个主机都试图寻址同一的器件,仲裁会继续比较数据位(假 设主机是发送器),或者比较响应位(假设主机是接收器)。 I2C 总线的地址和数据信息由赢得仲裁的主机决定,在仲裁过程中不会丢失信息。丢失仲裁的主机可以产生 时钟脉冲直到丢失仲裁的该字节末尾。 在串行传输过程中时,一旦有重复的起始条件或停止条件发送到 I2C 总线的时侯,仲裁过程仍在进行。如果 可能产生这样的情况,有关的主机必须在帧格式相同位置发送这个重复起始条件或停止条件。 此外,如果主机也结合了从机功能,而且在寻址阶段丢失仲裁,它很可能就是赢得仲裁的主机在寻址的器 件。那么,丢失仲裁的主机必须立即切换到它的从机模式。 I2C 总线的控制只由地址或主机码以及竞争主机发送的数据决定,没有中央主机,总线也没有任何定制的优 先权。 上图显示了两个主机的仲裁过程当然可能包含更多的内容由连接到总线的主机数量决定此时产生 DATA1 的主 机的内部数据电平与 SDA 线的实际电平有一些差别如果关断数据输出这就意味着总线连接了一个高输出电平这不 会影响由赢得仲裁的主机初始化的数据传输。 时钟信号的同步 在 I2C 总线上传送信息时的时钟同步信号是由挂接在 SCL 线上的所有器件的逻辑“与”完成的。SCL 线上由高 电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使 SCL 线一直保持低电平, 使 SCL 线上的所有器件开始低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不能影响 SCL 线的状 态,于是这些器件将进入高电平等待的状态。当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL 线被 释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将 SCL 线拉成
低电平。这样就在 SCL 线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟 高电平时间由时钟高电平期最短的器件确定。
分享到:
收藏