您的位置 首页 发布

I2C之知(三)–I2C总线的字节格局、时钟同步和裁定

字节格式发送到SDA线上的每个字节必须是8位每次传输的字节数量是不受限制的每个字节后必须跟着一个ACK应答位数据从最高有效位

字节格局
发送到SDA线上的每个字节有必要是8位.每次传输的字节数量是不受约束的.每个字节后有必要跟着一个ACK应对位.数据从最高有用位(MSB)开端传输.假如从机要履行一些功用后才干接纳或许发送新的完好数据,比如说服务一个内部中止,那么它能够将时钟线SCL拉低来强制使主机进入wait状况.当从机预备好新的字节数据传输时,开释时钟线SCL,数据传输便继续进行.

ACK和NACK
每个字节后都有ACK发生.ACK应对位答应接纳器告诉发送器字节成功接纳了下一个字节能够发送了.主机发生一切的时钟脉冲,包括应对位的第9个时钟脉冲.
ACK应对信号是如下界说的:在ACK的第9个时钟脉冲中发送器开释SDA线,所以接纳器能够将SDA拉低,使得在这个时钟脉冲的高电平期间确保SDA是低电平.树立和坚持时刻也应该核算在内.
当在第9个时钟脉冲期间SDA仍然是高,这时界说为NACK信号.这时主机能够发生一个停止条件来停止传输,或许一个重复的开端条件来开端一个新的传输.这儿有5中状况导致NACK的发生:
1.总线当时的传输地址上没有接纳器,所以没有设备用ACK来呼应.
2.由于接纳者正在处理一些实时的功用,没有预备与主机的通讯,所以接纳者不能收发.
3.在传输期间,接纳者收到不能辨认的数据或许指令.
4.在传输期间,接纳者无法接纳更多的数据字节.
5.主-接纳器要告诉从-发送器传输的完毕.

时钟同步
在闲暇总线上两个主机能够一起开端传输,所以有必要要有一个办法来决议哪个主机来操控总线并完结其数据传输.这个办法便是时钟同步和裁定.在单主机体系中,时钟同步和裁定不需要了.
时钟同步经过运用I2C接口与SCL线的线与衔接完结.意味着SCL线从高到低期间会引起主机开端核算它的低电平周期,一旦主机时钟变低,它会坚持SCL线处于这种状况直到时钟抵达高电平.可是,假如另一个时钟依旧是低电平,时钟的从低到高的改动并不会改动SCL线的状况.SCL拉低的时刻由最长的低电平周期决议.短一些的低电平周期的主机在这时进入HIGH wait-state.

当一切的主机的低电平周期都完毕了,时钟线才回到高电平.这时主机时钟和SCL的状况共同,一切的主机开端计数他们的高电平周期.第一个完毕高电平的主机将SCL线从头拉低.
这样的话,同步的SCL时钟的低电平周期由一切主机中最长的低电平周期决议,高电平周期由最短的高电平周期决议.

裁定
裁定和同步相同,都是在体系中多于一个主机条件下协议要求的一部分.从机不参加裁定处理.只有当总线闲暇时,主机才能够开端一个传输.两个主机可能在开端条件规则的最小坚持时刻(tHD;SDA)内发生一个开端条件,成果总线上发生一个有用的开端条件.这个时分就需要裁定来决议哪个主机完结它的传输.
裁定处理是逐一bit进行的.在每个bit,当SCL为高,每个主机都check一下来看看SDA的电平是否和它发送的电平符合.这个进程可能会继续很多个bit.只需传输是同一的,那么两个主机能够无误的完结完好的传输.当一个主机试着发送高,可是检测到SDA为低,那么这个主机知道自己失掉裁定然后关掉自己的SDA输出.别的的主机就会去完结它的传输.
在裁定处理进程中没有信息丢掉.失掉裁定的主机在它失掉裁定的字节结尾处发生时钟脉冲,当总线闲暇时有必要重启它的传输.
假如一个主机包括从机的功用,当它在寻址阶段丢掉裁定,那么赢得裁定的主机可能会寻址它.丢掉裁定的主机有必要当即切换到它的从形式.
下图显现了两个主机的裁定处理.在主机发生的DATA1和SDA线的实践电平的值呈现不一起,DATA1的输出就关掉了.主机1失掉了裁定.赢得裁定的主机2的传输数据不受影响.

由于I2C总线仅仅仅由地址来操控,数据只由赢得裁定的主机发送,这儿没有最重要的主机,在总线上也没有优先级次序.
在裁定处理正在进行的时分,一个主机发送重复的开端条件或许是停止条件而另一个主机仍然在发送数据,那么这时分有一个不决的状况.换句话说,下面的条件下会呈现这种状况:
主机1发送重复的开端条件,主机2发送一个数据位
主机1发送停止条件,主机2发送一个数据位
主机1发送重复的开端条件,主机2发送停止条件

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/232774.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部