18 IMX6ULL裸机开发:I2C协议

创建时间:2022/2/23 10:25
更新时间:2022/2/23 14:15
作者:gi51wa2j
标签:100ask_IMX6ULL_v11, bingo, 正文

一、参考资料

3_I2C总线协议手册.pdfi2c_spec.pdf

二、硬件连接

I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。

三、 传输数据类比

怎么通过I2C传输数据,我们需要把数据从主设备发送到从设备上去,也需要把数据从从设备传送到主设备上去,数据涉及到双向传输。

举个例子:

体育老师:可以把球发给学生,也可以把球从学生中接过来。

我们就使用这个简单的例子,来解释一下IIC的传输协议:

四、 IIC传输数据的格式

4.1 写操作

流程如下:

下图:白色背景表示"主→从",灰色背景表示"从→主"

4.2 读操作

流程如下:

下图:白色背景表示"主→从",灰色背景表示"从→主"


4.3 I2C信号

I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。传输时,先传输最高位(MSB)。

I2C协议信号如下:

4.4 协议细节

真值表如下:


从真值表和电路图我们可以知道:


从下面的例子可以看看数据是怎么传的(实现双向传输)。 举例:主设备发送(8bit)给从设备


从上面的例子,就可以知道怎样在一条线上实现双向传输,这就是SDA上要使用上拉电阻的原因。


为何SCL也要使用上拉电阻?

在第9个时钟之后,如果有某一方需要更多的时间来处理数据,它可以一直驱动三极管把SCL拉低。 当SCL为低电平时候,大家都不应该使用IIC总线,只有当SCL从低电平变为高电平的时候,IIC总线才能被使用。 当它就绪后,就可以不再驱动三极管,这是上拉电阻把SCL变为高电平,其他设备就可以继续使用I2C总线了。

对于IIC协议它只能规定怎么传输数据,数据是什么含义由从设备决定。

五、GPIO模拟I2C