一.协议介绍
1.IIC
IIC是一种两线式串行总线,由数据线SDA和时钟线SCL构成通信线路,既可用于发送数据,也可接受数据,是一种半双工通信协议。
总线上的主设备和从设备之间以字节为单位进行双向的数据传输。
多用于主机和从机在数据量不大且传输距离短的场合下的主从通信。主机启动总线,并产生时钟用于传送数据,此时任何接收数据的器件均被认为是从机。I2C器件一般采用开漏结构与总线相连,所以I2C_SCL和I2C_SDA均需接上拉电阻,也正因此,当总线空闲时,这两条线路都处于高电平状态,当连到总线上的任一器件输出低电平,都将使总线拉低。
总线上的每一个设备都可以作为主设备或从设备,而且每一个设备都会对应一个唯一的地址(可以从12C器件数据手册得知),主从设备之间就是通过这个地址来确定与哪个器件进行通信。
I2C时序
①空闲状态:
I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
②起始信号:
在SCL保持高电平期间,SDA的电平被拉低,称为 I2C总线的起始信号,标志着一次数据传输的开始。起始信号由主机主动建立,在建立该信号之前I2C总线必须处于空闲状态。
③停止信号:
在SCL保持高电平期间,SDA被释放,返回高电平,称为I2C总线的停止信号,标志着一次数据传输的终止。停止信号由主机主动建立,建立该信号之后,I2C总线将返回空闲状态。
④数据传输:
在I2C总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。进行数据传送时,在 SCL 的高电平期间,SDA上的电平必须保持稳定,只有在 SCL为低电平期间,才允许 SDA上的电平改变状态。即数据在SCL的上升沿到来之前就必须准备好,并在在下降沿到来之前必须保持稳定。