IIC是很常用的一种总线协议,IIC是NXP公司设计的,IIC使用两条线在主控制器和从机之间进行数据通信。一条是SCL(串行时间线),另一条是SDA(串行数据线),这两条数据线需要上拉电阻,总线空闲的时候SCL和SDA处于高电平。
IIC总线标准模式下速度可以达到100Kb/s,快速模式下可以达到400Kb/s。IIC总线工作是按一定的协议来运行的。
IIC是支持多从机的,也就是一个IIC控制器下可以挂多个IIC从设备,这些不同的IIC从设备有不同的器件地址,这样IIC主控制器就可以通过IIC设备的器件地址访问指定的IIC设备了,一个IIC总线连接多个IIC设备如下图:
上图中SDA和SCL这两根线必须要接一个上接电阻,一般是4.7K。其余的IIC从器件都挂接到SDA和SCL这两根线上,这样就可以通过SDA和SCL这两根线来访问多个IIC设备。
相关术语:
1,起始位
顾名思义,也就是IIC通信起始标志,通过这个起始位就可以告诉IIC从机,“我”要开始进行IIC通信了。在SCL为高电平时,SDA出现下降沿就表示为起始位,如下图:
2,停止位
停止位就是停止IIC通信的标志位,和起始位的功能相反。在SCL为高电平的时候,SDA出现上升沿就表示停止位,如下图:
3,数据传输
IIC总线在数据传输的时候要保证在SCL高电平期间,SDA上的数据稳定,因此SDA上的数据变化只能在SCL低电平期间发生,如下图:
4,应答信号
当IIC主机发送完8位数据以后会将SDA设置为输入状态,等待IIC从机应答,也就是等到IIC从机告诉主机它接收到数据了。应答信号是由从机发出的,主机需要提供应答信号所需的时钟,主机发送完8位数据以后紧跟着的一个时钟信号就是应答信号使用的。从机通过将SDA拉低来表示发出应答信号,表示通信成功,否则表示通信失败。
5,IIC写时序
主机通过IIC总线与从机之间进行通信不外乎两个操作:写和读。IIC总线总字节写时序如下图:
具体步骤:
1)、开始信号。
2)、发送IIC设备地址,每个IIC器件都有一个设备地址,通过发送具体的设备地址来决定访问哪个IIC器件。这是一个8位的数据,其中高7位是设置地址,最后1位是读写位,为1的话表示这是一个读操作,为0的话表示这是一个写操作。
3)、IIC器件地址后面跟着一个读写位,为0表示写操作,为1表示读操作。
4)、从机发送的ACK应答信号。
5)、重新发送开始信号。
6)、发送要写入数据的寄存器地址。
7)、从机发送的ACK应答信号。
8)、发送要写入寄存器的数据。
9)、从机发送的ACK应答信号。
10)、停止信号。
6,IIC读时序
IIC总线单字节读时序如下图:
IIC单字节读时序比写时序要复杂一点,读时序分为4大步,第一步是发送设备地址,第二步是发送要读取的寄存器地址,第三步重新发送设备地址,最后一步就是IIC从器件输出要读取的寄存器值。具体步骤如下:
1)、主机发送起始信号。
2)、主机发送要读取的IIC从设备地址。
3)、读写控制位,因为是向IIC从设备发送数据,因此是写信号。
4)、从机发送的ACK应答信号。
5)、重新发送START信号。
6)、主机发送要读取的寄存器地址。
7)、从机发送的ACK应答信号。
8)、重新发送START信号。
9)、重新发送要读取的IIC从设备地址。
10)、读写控制位,这里是读信号,表示接下来是从IIC从设备里面读取数据。
11)、从机发送的ACK应答信号。
12)、从IIC器件里面读取到的数据。
13)、主机发出NO ACK信号,表示读取完成,不需要从机再发送ACK信号了。
14)、主机发出STOP信号,停止IIC通信。
7,IIC多字节读写时序
有时候需要读写多个字节,多字节读写时序和单字节的基本一致,只是在读写数据的时候可以连续发送多个自己的数据,其他的控制时序都和单字节是一样的。