I2C通信协议原理

I2C通信协议在众多工程中有广泛的应用,数据采集,摄像头,各种单片机中应用,I2C硬件实现简单,扩展性强,广泛应用于集成电路模块之间的通信。

传统的设备通信通过串口进行,但是三个设备甚至四个更多的设备之间两两通信的时候,这种串口连接的方式就会很复杂。

I2C虽然硬件实现简单不代表不重要,更需要深刻透彻的理解IIC原理。

更多技术文章,关注 - 最常用的通信协议 - I2C

目录

1.I2C概述

2.I2C读写操作

3.I2C写数据过程

扫描二维码关注公众号,回复: 15803900 查看本文章

1.I2C概述

I2C(又称IIC,Inter-Integrated Circuit),即集成电路总线,是一种两线式串行总线,由PHILIPS公司开发,用于连接微控制器及其外围设备。多用于主机和从机在数据量不大且传输距离短的场合下的主从通信。

I2C总线由SDA(数据线)和SCL(时钟线)构成通信线路,既可用于发送数据,也可接收数据,是一种半双工通信协议。

I2C支持多个设备共用的信号线,支持多个通讯主机及多个通讯从机。

总线上的每一个设备都可以作为主设备或者从设备,且每一个设备都会对应一个唯一的地址,主从设备通过这个地址来识别确定与哪个设备进行通信。


2.I2C读写操作

我们了解了I2C基本原理之后,再来看一下如何进行设备间的读写操作。

首先,需要了解SCL时钟线 和SDA数据线 之间的数据传输原理。

SCL高电平有效,当SDA数据线在下降沿的时候表示为逻辑0,当SCL和SDA共同为高电平的时候为逻辑1。

当SCL时钟持续脉冲发出方波的时候,SDA数据线根据所需改变高低电平,形成逻辑0/1,组合到一起就可以获取一串二进制数值。

如图,通过SCL 和SDA组合获取的值为:1010 000 。

这样就会看最基本的时序图了!


3.I2C写数据过程

I2C中“一主多从”的通讯模式,主设备如何与从设备通信?如何保证访问从设备的方式?这都通过SCL时钟线和SDA数据线共同制定协议来完成。

接下来,我将一步步从起始信号到如何区分从设备,如何和从设备进行读写操作,到最后的结束信号,

将整个过程一一道来,大家坐好小板凳认真听!

I2C通信是分成读数据和写数据两个部分,首先讲解写数据的过程,读数据过程类似,下面分别介绍。

写数据的过程:

每一帧的写数据是由时钟线和数据线共同作用,在同一时间,不是发送信息就是在读取信息

这是标准的写数据帧,包括起始位,设备地址,应答位,写入寄存器的地址,写入数据,停止位组成。

第一步,起始信号。在空闲状态的时候,数据线和时钟线都是高电平,当数据线在下降沿的时候,就是写数据的起始信号。

第二步,设备地址。不同的从设备使用不用的地址码,每一个设备都有唯一的7位地址码,地址A0-A6。

第三步,读写位和应答信号。写数据时读写位置为0,读数据置为1,如上图读写位为0是写数据。应答信号是从设备发给主机的, 0表示收到,1表示没收到或者读取完成

第四步,寄存器地址。设备的寄存器地址是8位的,发送的8位寄存器地址可以访问256个字节。如果访问的寄存器地址为 0000 0001,在寄存器地址填入 0X01即可。

传完寄存器地址后也需要应答信号,完成填入0。

第五步,要写入的数据。写入数据也是8位,在之前填入的寄存器地址的位置填入8位数据。如果在寄存器地址 0X01处写入数据 1000 1111,原理如下图。

数据写完后,通知主机写入成功,发送应答信号0。

第六步,停止位。与起始位相反,当SCL时钟线为高的时候,SDA数据线由低到高,完成一帧数据传输。

如上就是完成了一个标准的写数据帧。

举例,给地址为000 0001的从设备,在0X0F的寄存器写入1111 1111数据,IIC如何完成写数据帧呢?如下图。


4.I2C读数据过程

读数据的过程也是类似的,只不过多了一次设备地址的操作。

如上图,将000 0001从设备的0X0F的数据0101 0000读出。

其中,在读数据帧的过程中,有两点需要注意:

一、在第一次获取设备地址读写位是0,获取寄存器地址后会再次获取设备地址,第二次读写位置为1,之后再将读的数据接收。

二、最后的应答信号是1,是由主机发给从机的,表示读取完成。


本文只是针对I2C原理进行介绍,并没有针对代码实现进行讲解,毕竟通过原理了解整个实现机制更容易深刻理解I2C通讯过程。

希望大家通过这篇文章学会I2C通讯原理!

猜你喜欢

转载自blog.csdn.net/qrx941017/article/details/131297037