I2C是嵌入式开发中最基本的也是应用很广泛的协议,那么它是什么?有哪些优点?通信是什么原理?就是这篇的内容:
I2C是由Philips公司开发的一种简单的、双向二线制的同步串行总线。简单说就是由2根线组成,串行的,可双向通信。
优点:
1.硬件接线简单,一条串行数据线和一条串行时钟线构成;
2.最大可接入128个从设备;
缺点:
数据帧的大小限制为8位,传输效率低。
I2C在硬件上如何接线的,看下图:
图1.I2C设备接线图
由上图我们知道:
1.当总线空闲时,SCL、SDA是被上拉电阻钳位在高电平的;
2.I2C设备之间由串行时钟线SCL、串行数据线SDA连接通信;
3.I2C总线可接入多个从设备,最多可支持2^7,即128个从设备。
那问题来了,只由两根线通信,而从设备有多个,主控是怎么找到对应的从设备,数据是怎么传输的呢?
我们来了解下I2C的通信的数据格式:
图2.I2C通信的数据格式
如上图,I2C通信的数据格式由几部分组成:
1.起始信号:当SCL为高,SDA为下降沿时触发起始信号,从设备被触发, 知道主控准备通信了;
2.结束信号:当SCL为高,SDA为上升沿时触发结束信号,从设备停止通信;
3.响应信号:每隔8位数据,设备接收方都会将SDA拉低触发响应信号,以让对方知道自己已收到数据;
4.从设备地址:从设备地址由7位组成,因此最多有128个从设备,第8位表示读/写操作,1为读,0为写;
设备地址和读写操作均是由SCL为高的8个周期,读取到的SDA的电平组成,具体的地址要看此I2C芯片手册,通常地址的高位是确定的,低位根据I2C芯片pin脚的连接方式确定。
5.数据:1个字节,传输的数据。数据由SCL为高的8个周期,读取到的SDA的电平组成。
看具体时序图会有助于理解以上内容,如下:
图3.I2C通信时序图