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