天天看点

I2C协议原理简述1、传输流程

1、传输流程

I2C协议原理简述1、传输流程

I2C是主从结构,所有的数据都是mater发起的,slave接收或者回应。比如上面的框图所示,一主多从。

那么这么多的从设备,是如何做到选择哪个呢?我们看一下发送接收的流程。

I2C协议原理简述1、传输流程

(1)

在SCL的高电平时,SDA由高变低,发出start信号

(2)

后面的9个时钟周期内发送了9次的SDA信号,前7个位表示的设备地址(注:每个从设备的地址是写死在从设备芯片里面的,在编写驱动之前,我们就能从从设备的芯片手册中查到的,比如韦老师教程视频中的AT24CXX设备的地址就写死为b1010A2A1A0,其中前4位固定为1010,后3位A2A1A0根据硬件连接情况而定,如果都接地,那么3位都为0);第8位用来表示数据发送的方向,也就是读还是写;第9位是从设备发出的ACK回应信号(每次发送完数据,从设备都要回应一个ACK),如果有回应证明对应的设备存在,否则就不存在。

(3)

后面每发送完8位的数据,都回应1位ACK(所以看到都是9个时钟周期)

(4)

当要结束数据发送,就在SCL的高电平内,SDA由低变高,表示结束发送。

要注意的是,在SCL的低电平期间,SDA的信号可以变化,但是在SCL的高电平期间,就要保持稳定。

2、关注点

那么还有一个问题,只有一条数据线SDA,怎么实现双向传输呢?

(1)主设备发送时,从设备不发送

由figure 20-4的图可以看得出,发送数据的9个时钟信号中,前8个信号是主设备发出的,第9个才是从设备发出的ACK信号,所以可以通过SCL区分

(2)主设备发送时,从设备的“发送引脚”不影响数据

可以使用开极电路,发送引脚使用一个三极管控制

I2C协议原理简述1、传输流程

给出三点的电压关系的真值表:

A B SDA
1(由上拉电阻决定)
1
1
1 1

(1)不想影响SDA,就不去动三极管

(2)想输出高电平,就驱动三极管

(3)想输出低电平,就驱动三极管

比如主设备发送8bit到从设备:

(1)前8 clk周期内,从设备不要影响,所以不驱动三极管;由主设备决定数据

(2)第9 clk,由从设备决定数据,所以主设备不要驱动三极管,由从设备掌管SDA

继续阅读