I2C总线信号时序分析
发布时间:2008/11/24 0:00:00 访问次数:1025
在i2c总线通信的过程中,参与通信的双方互相之间所传输的信息种类归纳如下。
主控器向被控器发送的信息种类有:启动信号、停止信号、7位地址码、读/写控制位、10位地址码、数据字节、重启动信号、应答信号、时钟脉冲。
被控器向主控器发送的信息种类有:应答信号、数据字节、时钟低电平。
下面对i2c总线通信过程中出现的几种信号状态和时序进行分析。
①总线空闲状态。
i2c总线总线的sda和scl两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
②启动信号。
在时钟线scl保持高电平期间,数据线sda上的电平被拉低(即负跳变),定义为i2c总线总线的启动信号,它标志着一次数据传输的开始。
启动信号是一种电平跳变时序信号,而不是一个电平信号。启动信号是由主控器主动建立的,在建立该信号之前i2c总线必须处于空闲状态,如图1所示。
图1 i2c总线上的启动信号和停止信号
③停止信号。
在时钟线scl保持高电平期间,数据线sda被释放,使得sda返回高电平(即正跳变),称为i2c总线的停止信号,它标志着一次数据传输的终止。
停止信号也是一种电平跳变时序信号,而不是一个电平信号,停止信号也是由主控器主动建立的,建立该信号之后,i2c总线将返回空闲状态。
④数据位传送。
在i2c总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在scl串行时钟的配合下,在sda上逐位地串行传送每一位数据。
进行数据传送时,在scl呈现高电平期间,sda上的电平必须保持稳定,低电平为数据0,高电平为数据1。
只有在scl为低电平期间,才允许sda上的电平改变状态。逻辑0的电平为低电压,而逻辑1的电平取决于器件本身的正电源电压vdd(当使用独立电源时),如图2所示。
图2 i2c总线上的数据位传送
⑤应答信号。
i2c总线上的所有数据都是以8位字节传送的,发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。
应答信号为低电平时,规定为有效应答位(ack简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(nack),一般表示接收器接收该字节没有成功。
对于反馈有效应答位ack的要求是,接收器在第9个时钟脉冲之前的低电平期间将sda线拉低,并且确保在该时钟的高电平期间为稳定的低电平。
如果接收器是主控器,则在它收到最后一个字节后,发送一个nack信号,以通知被控发送器结束数据发送,并释放sda线,以便主控接收器发送一个停止信号p,如图3所示。
图3 i2c总线上的应答时序
⑥插入等待时间。
如果被控器需要延迟下一个数据字节开始传送的时间,则可以通过把时钟线scl电平拉低并且保持,使主控器进入等待状态。
一旦被控器释放时钟线,数据传输就得以继续下去,这样就使得被控器得到足够时间转移已经收到的数据字节,或者准备好即将发送的数据字节。
带有cpu的被控器在对收到的地址字节做出应答之后,需要一定的时间去执行中断服务子程序,来分析或比较地址码,其间就把scl线钳位在低电平上,直到处理妥当后才释放scl线,进而使主控器继续后续数据字节的发送,如图4所示。
图4 i2c总线上的插入等待时间
⑦重启动信号。
在主控器控制总线期间完成了一次数据通信(发送或接收)之后,如果想继续占用总线再进行一次数据通信(发送或接收),而又不释放总线,就需要利用重启动sr信号时序。
重启动信号sr既作为前一次数据传输的结束,又作为后一次数据传输的开始。利用重启动信号的优点是,在前后两次通信之间主控器不需要释放总线,这样就不会丢失总线的控制权,即不让其他主器件节点抢占总线。
⑧时钟同步。
如果在某一i2c总线系统中存在两个主器件节点,分别记为主器件1和主器件2,其时钟输出端分别为clk1和cl【0,它们都有控制总线的能力。
假设在某一
在i2c总线通信的过程中,参与通信的双方互相之间所传输的信息种类归纳如下。
主控器向被控器发送的信息种类有:启动信号、停止信号、7位地址码、读/写控制位、10位地址码、数据字节、重启动信号、应答信号、时钟脉冲。
被控器向主控器发送的信息种类有:应答信号、数据字节、时钟低电平。
下面对i2c总线通信过程中出现的几种信号状态和时序进行分析。
①总线空闲状态。
i2c总线总线的sda和scl两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
②启动信号。
在时钟线scl保持高电平期间,数据线sda上的电平被拉低(即负跳变),定义为i2c总线总线的启动信号,它标志着一次数据传输的开始。
启动信号是一种电平跳变时序信号,而不是一个电平信号。启动信号是由主控器主动建立的,在建立该信号之前i2c总线必须处于空闲状态,如图1所示。
图1 i2c总线上的启动信号和停止信号
③停止信号。
在时钟线scl保持高电平期间,数据线sda被释放,使得sda返回高电平(即正跳变),称为i2c总线的停止信号,它标志着一次数据传输的终止。
停止信号也是一种电平跳变时序信号,而不是一个电平信号,停止信号也是由主控器主动建立的,建立该信号之后,i2c总线将返回空闲状态。
④数据位传送。
在i2c总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在scl串行时钟的配合下,在sda上逐位地串行传送每一位数据。
进行数据传送时,在scl呈现高电平期间,sda上的电平必须保持稳定,低电平为数据0,高电平为数据1。
只有在scl为低电平期间,才允许sda上的电平改变状态。逻辑0的电平为低电压,而逻辑1的电平取决于器件本身的正电源电压vdd(当使用独立电源时),如图2所示。
图2 i2c总线上的数据位传送
⑤应答信号。
i2c总线上的所有数据都是以8位字节传送的,发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。
应答信号为低电平时,规定为有效应答位(ack简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(nack),一般表示接收器接收该字节没有成功。
对于反馈有效应答位ack的要求是,接收器在第9个时钟脉冲之前的低电平期间将sda线拉低,并且确保在该时钟的高电平期间为稳定的低电平。
如果接收器是主控器,则在它收到最后一个字节后,发送一个nack信号,以通知被控发送器结束数据发送,并释放sda线,以便主控接收器发送一个停止信号p,如图3所示。
图3 i2c总线上的应答时序
⑥插入等待时间。
如果被控器需要延迟下一个数据字节开始传送的时间,则可以通过把时钟线scl电平拉低并且保持,使主控器进入等待状态。
一旦被控器释放时钟线,数据传输就得以继续下去,这样就使得被控器得到足够时间转移已经收到的数据字节,或者准备好即将发送的数据字节。
带有cpu的被控器在对收到的地址字节做出应答之后,需要一定的时间去执行中断服务子程序,来分析或比较地址码,其间就把scl线钳位在低电平上,直到处理妥当后才释放scl线,进而使主控器继续后续数据字节的发送,如图4所示。
图4 i2c总线上的插入等待时间
⑦重启动信号。
在主控器控制总线期间完成了一次数据通信(发送或接收)之后,如果想继续占用总线再进行一次数据通信(发送或接收),而又不释放总线,就需要利用重启动sr信号时序。
重启动信号sr既作为前一次数据传输的结束,又作为后一次数据传输的开始。利用重启动信号的优点是,在前后两次通信之间主控器不需要释放总线,这样就不会丢失总线的控制权,即不让其他主器件节点抢占总线。
⑧时钟同步。
如果在某一i2c总线系统中存在两个主器件节点,分别记为主器件1和主器件2,其时钟输出端分别为clk1和cl【0,它们都有控制总线的能力。
假设在某一
上一篇:I2C总线信号传送格式
上一篇:I2C总线芯片内部操作步骤