I2C时序剖析

来源:互联网 发布:用友通软件 编辑:程序博客网 时间:2024/06/05 01:13

入门单片机的同学,往往对时序有一种惶恐。

其实,时序就是一张窗户纸,捅破了,就懂了。

今天,跟大家分享一下关于I2C的时序解读,希望大家能够举一反三。

能够看到这篇文章,我相信大家对I2C的概念已经有了了解,我就不废话了。


基础知识:

I2C有两根很重要的线:SCL(时钟总线)和SDA(数据总线)。

SCL负责的是节拍,给一个节奏让发送和接收双方能够一起左手右手一个慢动作的同步工作。

SDA负责的是实实在在的数据的传输,但这里要注意的是,这个数据没有像UART那样有长度的限制。


为什么需要时序:

对于I2C,我们发送和接收数据是要相互配合的(其他协议也是一样)。如果总是你发送,我不接收,不行;如果总是你不发送,我也没发接收,不行;如果你早上发送,我到晚上才接收,也不行。所以,我们必须是你发送,我马上接收,是同步的。

既然需要同步,我们就得有一个喊口号的人,或者是打节拍的人,跟我们军训时的教官差不多,喊一二一让我们整齐的前进;而在I2C中,这个人就是我们的时序了。


解剖时序

I2C的时序分为3个部分:起始信号、数据传输、停止信号

先上图:

这就是一个简单的时序图了。

第一部分:起始信号部分

图中的Start部分,当SCL为高电平的时候,SDA有一个下降沿,这就表明要开始发送数据了。


第二部分:数据传输部分

图中的bit7~bit0都是数据,ACK是一个应答,每传输8位数据,要有一个应答,确认一下传输情况。我们知道,数据有0和1两种情况,我们什么时候可以改变数据呢?

当SCL为低电平的时候,SDA上的数据才可以改变。我们可以看到,SDA上,数据有变化的地方,对应上面的SCL,SCL总是低电平。


第三部分:停止信号部分

图中Stop部分,当SCL为高电平的时候,SDA有一个上升沿,这就表明数据已经发送完毕。


希望大家对照这以上的说明,反复看几遍时序图,看着看着,你就懂了。

0 0