IIC介绍
IIC:(Inter-Integrated Circuit)是一种常用的串行通信总线协议,也被称为I2C(Inter-IC)总线。它由飞利浦(Philips)公司在20世纪80年代开发,并成为一种广泛应用于数字集成电路之间的通信标准。
IIC由两根信号线组成,分别为串行时钟线(SCL)和串行数据线(SDA)。通过这两根信号线,多个设备可以连接在同一条总线上,实现多主多从的通信方式。IIC总线采用了主从式架构,其中一个设备充当主设备,控制总线的访问权,其他设备则充当从设备,按照主设备的指示进行数据传输和控制。
IIC功能框图
IIC特点
简单灵活 | IIC总线采用了两根信号线的设计,使得接线简单,并且可以连接多个设备。同时,IIC总线还支持多主多从的通信模式,可以灵活地适应各种设备之间的通信需求。 |
双向传输 | IIC总线的数据线(SDA)既可以用于传输主设备发送的数据,也可以用于从设备向主设备发送响应或其他数据。这种双向传输的特性使得IIC总线更加灵活和高效。 |
时钟同步 | IIC总线使用串行时钟线(SCL)来同步数据的传输。在数据传输过程中,时钟信号用于指示每个数据位何时被发送或接收。这种同步机制保证了数据的准确传输。 |
多种设备支持 | IIC总线可以连接多种不同类型的设备,如存储器、传感器、显示器等。通过在总线上设置不同的地址,主设备可以选择与所需的从设备进行通信。 |
IIC时序
第一次看确实让人懵
IIC起始结束信号
这个容易理解,描述IIC的起始和停止条件:
- 起始:时钟线SCL为高时,数据线SDA由高到低
- 停止:时钟线SCL为高时,数据线SDA由低到高
SCL和SDA同时为高,IIC总线为空闲状态
IIC应答
IIC的应答机制
- 上波形:SDA,主机发送的8位数据
- 中波形:SDA,从机在第9个时钟信号进行拉低回应,表示收到了主机发来的数据,拉高则表示不应答
- 下波形:SCL,主机产生的时钟脉冲
注:上波形和中间波形都是SDA线,这里分开示意,IIC应答是一种相互关系,单片机发送数据给IIC器件,IIC器件要进行应答,表示收到了数据,同样,单片机接收IIC器件的数据后,也要给IIC器件一个应答。
发送完数据双方都需要回应,如果使用不应答,读取到数据后,如果不需要继续读取了,那么就发送非应答,就会停止发送。
IIC完整传输时序
- 开始标志(S)发出后,主设备会传送一个7位的从机地址,且后面还跟一个第8位Read/Write位。
- R/W位表示主设备是在接收从设备的数据还是在向其写数据。
- 主设备释放SDA线,等待从设备的应答信号(ACK)。每个字节的传输都要跟随有一个应答位。
- 应答产生时,从设备将SDA线拉低并且在SCL位高电平时保持低。
- 数据传输以停止标志(P)结束,然后释放总线。但主设备也可以产生重复的开始信号去操作另一台从设备,而不发出结束标志。
- 所有的SDA信号变化都要在SCL时钟位低电平时进行,除了开始和结束标志。
IIC数据收发方式
1.写一个字节
用于对IIC某个寄存器的配置,如对AT24CXX的某些参数进行设置
- 写寄存器时,主设备除了发出开始标志和地址位,还要加一个R/W位,0为写,1为读
- 在第9个时钟周期(高电平时),AT24CXX产生应答信号
- 主设备开始传送寄存器地址,并接到应答
- 然后开始传送寄存器数据,必不可少要有应答信号
- 最后主设备发送停止信号
2.连续写多个字节
对连续地址的写入
通信时序与上面写一个字节类似,连续写就是,收到了从机的应答信号(ACK),继续写。
3.读一个字节
读取IIC器件某个寄存器的数值
- 由主设备产生开始信号,然后发送从设备地址位和一个写数据位,等待应答
- 发送寄存器地址,开始读寄存器
- 收到应答信号后,主设备再发一个开始信号,然后发送从设备地址位和一个读数据位
- 然后从设备AT24CXX产生应答信号并开始发送寄存器中的数据
- 通信以主设备产生的拒绝应答信号(nACK)和结束标志(Stop)结束
- 拒绝应答信号(nACK)产生定义为SDA数据在第9个时钟周期一直为高
4.连续读多个字节
用于某些是一组连续的数据需要读,可用该模式
通信时序与上面读一个字节类似,上面是读一个字节后就nACK叫停,若连续读,则发送ACK,直到不需要继续读时在回复nACK。