I2C总线及协议分析

一、数据传输

1、数据位的有效性:I2C总线在数据传输时,SCL为高电平期间,数据线上的数据要保持稳定,只有在SCL为低电平期间,数据线上的数据电平状态才允许发生变化。

2、起始信号:SCL为高电平,SDA由高到低进行跳变。

3、终止信号:SCL为高电平,SDA有底到高进行跳变。

接收器收到一个完整的数据字节后,有可能需要处理其他事件,如中断等,不能立即接收下一个字节的数据,此时接收器可以将SCL线拉低,使得主机处于等待状态,直到接收器准备好了接收下个字节的数据,在释放SCL的电平使之为高电平,从而数据可以继续传送。

每一个字节必须是8位长度,每个被传送的字节后面必须跟有应答位。

起始信号的后面总有一个被控器的地址,数据传送先传最高位,前7位为地址,8位为传输方向位,0表示主机发送数据,执行写操作,1表示主机接收数据,执行读操作。

在读/写位中,如果是0”,则表示主控器发送数据,也就是执行的功能;如果是1”,则表示主控器接收数据,也就是执行的功能。而数据的每次传输总是随主控器产生的停止信号而结束。而I2C总线中,有时主控器希望总占用总线,并不断进行数据传输,因此,在设定规约时,可以在不首先产生信号的情况下,再次发出起始信号对另一被控器进行寻址。为解决这一问题,可以采用多种读/写组合形式来进行总线的一次数据传输。在多种读/写组合形式中,主要有三种措施,其中:

(1)、主机向从机发送数据,数据传送方向在整个过程中保持不变:

(2)、主控器在第一个字节后立即从被控制器读数据,在首位确认应答信号产生后,主控发送器变成主控接收器,而被接收器变成被控发送器,同时首位应答信号仍由被控器产生,使停止信号总是由主控器产生。

(3)、数据传输过程中的复合格式需要改变传送方向时,起始信号和被控器地址都会被重复产生一次,但两次的读/写方向正好反相。


阴影部分表示主机向从机发送,非阴影部分表示从机向主机发送,A为应答信号A为非应答(高电平)s为起始信号,P为终止信号。






起始信号产生后,每产生一个时钟信号的高电平就意味着发送或接收一位数据,当SCL为高,而SDA为低时,则产生了应答信号,应答信号由接收方发。

二、时钟信号的同步

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


三、总线竞争的仲裁

      总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况,这种情况叫做总线竞争。I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。总线竞争的仲裁是在两个层次上进行的。首先是地址位的比较,如果主器件寻址同一个从器件,则进入数据位的比较,从而确保了竞争仲裁的可靠性。由于是利用I2C总线上的信息进行仲裁,因此不会造成信息的丢失。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值