![cover](https://img-blog.csdnimg.cn/direct/170b74c18c08497e9639b030c2fea477.jpeg)
一起玩儿物联网人工智能小车(ESP32)——30. IIC协议简介
摘要:本文主要介绍IIC协议的基本知识
摘要:本文主要介绍IIC协议的基本知识
IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,是一种简单的双向二进制同步串行总线,主要用于在集成电路之间进行数据传输。它是由飞利浦(Philips)公司开发并逐渐成为一种标准总线通信协议的,也被称为I2C(Inter-IC,读作I方C)总线。IIC是一种主从通信协议,任意时刻只能有一个主机,主要适用于距离短、数据量小的通信场合。
前面提到,IIC是一种同步串行总线。现在解释一下同步和串行这两个通信领域的基本概念。
所谓的同步,是和异步相对的。一个简单的区分同步通信和异步通信的方法就是看在通信的过程中是否使用到了时钟信号。在同步通信中,通信双方会使用一根信号线来对双方的通信进行协调,同步数据的发送。而在异步通信中,则不需要使用到时钟信号,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据。一般来说,同步通信的效率更高,速度更快。异步通信的设备简单、便宜,但效率较低。
串行通信与并行通信相对应,串行通信是指将数据一位一位的按顺序发送出去,因此并行数据通信最少只需一根传输线即可完成通信,成本低但送速度慢,串行通讯的距离可以从几米到几千米远。而并行通信则是指将数据各位同时传送的通信方式,因此,并行通信的传送速度更快、效率更高,但是有多少数据位就需多少根数据线,因此传送成本高,并且只适用于近距离(相距数米)的数据通信。
对于串行通信又通常可以划分为三种:全双工、半双工和单工通信。两个设备之间可以同时进行串行数据收发的通信方式称为全双工通信。两个设备之间在同一时刻,只能进行一个方向数据发送的方式称为半双工通信,而数据只能从一个设备发向另一个设备,无法反向传递的称为单工通信。
IIC作为一种双向同步总线,由两根数据线组成:一条是双向的串行数据线SDA,用来完成双向数据传输。一条是串行时钟线SCL,用来控制数据发送的时序。
IIC总线支持多主设备和多从设备的连接。主设备负责发起通信并控制总线的访问,而从设备则被动地响应主设备的请求。主设备通过发送起始信号和地址来选择要与之通信的从设备,然后可以给从设备发送数据或接收从设备返回的数据。也就是说,主机就是负责整个系统的任务协调与分配,从机一般是通过接收主机的指令从而完成某些特定的任务。在同一时刻,同一个IIC总线上只能有一个主机。
所有连接到IIC总线的设备都需要将本设备的串行数据线SDA接到总线的串行数据线SDA上,本设备的时钟线SCL连接到总线的时钟线SCL上。所有连接到串行总线上的设备都要有一个唯一的地址,从而可以确保能够通过地址可靠的访问到每一个设备。
IIC的通信速率有三种模式:分别是标准模式、快速模式和高速模式。标准速率的传输速度为100Kbits/s,快速速率的传输速度为400Kbits/s,高速速率的传输速度为3.4Mbits/s。下面来解释一下传输速率的单位bits/s。IIC是一种串行通信传输总线,发送数据都是一位一位的发送的,这里的一位就是一个bit。所以,经常用一秒钟传输的位数来描述串行通信的速度的快慢。在这里K表示1000也就是10的三次方,M表示1000000也就是10的6次方。那么100Kbits/s,就表示一秒钟可以传输100000位的数据。
下面来了解一下IIC总线的通信过程。在总线空闲的时候,所有连接到总线的设备都应该处于高阻状态。这样IIC总线的SDA线和SCL线都通过上拉电阻保持高电平状态。这个上拉电阻可以起到保证数据通信稳定性、减少外界干扰的目的。
接下来,希望进行数据通信并且已经连接到IIC总线的设备,可以将SDA线拉低为低电平,并在其保持4.7us以上后,将SCL也变成低电平,这就是IIC通信的起始信号。这样,本设备就而获得了IIC总线的控制权,成为IIC总线上的主设备。
然后,主机就可以开发发送通信的信息了。IIC总线的规范规定,SDA必须要在SCL为低电平的时候根据要发送信息的数据位是0还是1来变换自己的状态。而SCL为高电平时,SDA要保持不变。这样,在SCL八个周期以后,就完成了一个字节数据的发送工作了。
从机设备在接收到8bit数据后,通常需要向发送数据的主设备发出特定的低电平脉冲,表示已收到数据。主控设备向从及设备发出一个字节的信息后,等待从机设备发出一个应答信号,主机设备在接收到应答信号后,根据实际情况作出是否继续传递信号的判断。这就是从机设备发送的应答信号。
在应答位之后,SCL处于高电平时,SDA也由低电平跳变为高电平,表示数据传送过程结束。这就是主机设备向从机设备发送的应答信号。
在这些信号中,只要起始信号是必须的,应答信号和结束信号都可以不要。通信的过程如下图所示:
好了,IIC总线协议就先介绍到这里了,初次接触的肯定会有些晕,没关系,如果不是做底层驱动,并不需要了解的非常透彻,大概知道是个怎样的协议,有什么样的特征,会使用就行了。
更多推荐
所有评论(0)