串行协议简介
I2C是一种串行总线协议,目前常用的还有UART和SPI。下面简单介绍一下这几种协议。
电气线区别:
SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现 多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
因此,SPI和UART可以实现全双工,但I2C不行。
I2C协议介绍
这是I2C两根信号线(SCL,SDA)上数据传输的基本时序。
下面详细介绍I2C总线的几个状态:
当SDA和SCL两根信号线一直保持高电平时,表示处于空闲状态,可以通信。
(B).开始状态
当SCL为高,而SDA由高电平变低电平时,表示一次传输开始。
(C).结束状态
当SCL为高,而SDA由低电平变高电平时,表示一次传输结束。
(D).数据有效状态
当在开始状态之后,SCL为高电平时,SDA上的数据保持稳定,则此时的数据时有效的。也就是说数据只能在SCL为低时,才能发生变化。同时一个时钟脉冲传送一位数据。
从前面知道IIC可以主机和多个从机进行通信,那么是怎么做到的呢?答案就在下面这幅图里面。
上面这幅图完整地展现了一个数据传送过程。会注意到上面又多了两个部分,Address High Byte和Address Low Byte,这个表示什么呢?也许你向从器件写入一个数据,但是从器件里面又有很多寄存器,这两个字节就表示你想写入数据的具体位置。