I2C协议原理简述

1、传输流程


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

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



(1)

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

(2)

后面的9个时钟周期内发送了9次的SDA信号,前7个位表示的设备地址;第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)主设备发送时,从设备的“发送引脚”不影响数据

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



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

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

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

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

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


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

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

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






猜你喜欢

转载自blog.csdn.net/lee_jimmy/article/details/80641961
今日推荐