IIC(Inter-Integrated Circuit) ,简单说就是IC(芯片)之间通信的总线。所谓总线,就是各个器件都并联到一组公共的线路上,然后共用这条线路来传输数据。总线的英文名为BUS,这是个形象的名字,数据在总线上的传输本身也颇似乘客搭乘大巴。
IIC通信协议采用2条信号线,1条时钟线(SCL)和1条数据线(SDA),属于串行半双工通信。标准模式的传输速率为100Kb/s,快速模式为400Kb/s。总线上可以接多个从设备,从设备的地址必须不同。也可也接多个主设备,但同一时刻只能有一个主设备控制总线。
每个从设备有自己的设备地址,主设备发送START信号后,紧跟着发送想要通信的从设备地址字节,7位器件地址+1位读写标志位(0为写,1为读)。
(1)IIC信号类型
IIC总线在传输过程中共有3种类型信号:开始信号、结束信号和响应信号。
START信号:当时钟线为高时,数据线下跳会产生启动信号,开始传输数据。
STOP信号:当时钟线为低时,数据线上跳会产生停止信号,结束传输数据。
ACK信号:接收器接收到8位数据后,在第9个时钟周期,拉低SDA电平。
波形如下图所示:
开始信号(S)和结束信号(P)
应答信号(ACK)
(2)总线的状态
1).总线空闲时,就是总线上所有器件都释放了总线,此时SCL和SDA因为有上拉电阻都为高电 平。
2).主设备检测到总线当前处于空闲时,此时可以发START信号获得总线得控制权。
3).主设备通信完成后,发送STOP信号释放总线,总线处于空闲状态。
(3)写数据过程
1). 主控检测到总线处于空闲时,首先发送一个START信号来控制总线,此时总线进入忙状态;
2). 主控发送一个设备地址字节,总线上所有的从设备都会收到;
3). 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);
4). 主控收到ACK后开始发送第一个数据字节;
5). 被控器收到数据字节后发送一个ACK表示继续传送数据,发送NACK表示传送数据结束;
6). 主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线。
(4)读数据过程
1).主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;
2).发送一个地址字节(包括7位地址码和一位R/W,最后1bit为0,表示写),将地址写入地址计数 器;
3).当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);
4).主控收到ACK后紧接着发送一个start状态,然后重复第一个地址字节(device code)最后 1bit为'1',代表读。
5).释放数据总线,开始接收第一个数据字节;
6).主控收到数据后发送ACK表示继续传送数据,发送NACK表示传送数据结束。