IIC总线概述
IIC总线是一种串行、半双工总线,有以下特点:
- 应用于低速、近距离的芯片之间。
- 由两根双向的信号线组成:数据线SDA用于收发数据;时钟线SCL用于通信双方时钟的同步。
- 多主机总线:
1、连接在IIC总线上的器件分为主机和从机,主机可以发起和结束一次通信,从机只能被主机呼叫。
2、冲突检测、仲裁功能:多个主机同时启用总线,防止错误。
3、IIC总线上的器件都有一个唯一的地址(7bit),且每个器件既可以作为主机,也可以作为从机。但同一时刻只能有一个主机。
4、总线上的器件增加和删除不影响其他器件正常工作。
IIC总线通信过程
- 主机发送起始信号启用总线
- 主机发送一个字节数据指明从机地址和后续字节的传送方向(0:主机给从机发数据;1:从机给主机发数据)
- 被寻址的从机发送应答信号回应主机
- 发送器发送一个字节数据
- 接收器发送应答信号回应发送器
- 重复步骤4、5
- 通信完成后主机发送停止信号释放总线
IIC总线寻址方式
-
IIC传输的数据,包括地址和数据。
-
主机发送完起始信号后,发送一个字节数据指明从机地址(高7位)和后续字节(低位)的传送方向,从机接收后将高7位地址与自己的地址进行比较,相同则认为自己被寻址,再根据最后一位将自己定为发送器或接收器,且在一次通信过程中,只能作为发送器或接收器。
0:主机给从机发数据;
1:从机给主机发数据。 -
与UART等通信方式不同,在一次通信中,IIC能发送多个字节的数据,而UART等只能发送一个字节数据。
IIC总线信号实现
IIC通信过程中,总共涉及四种信号模式:
- 起始信号
- 发送一个字节数据
- 应答信号
- 停止信号
起始信号、停止信号
- 空闲时,SCL和SDA均为高电平
- SCL为高电平,SDA由高电平变为低电平时表示起始信号,起始信号产生后,总线处于占用状态(主机发起)
- SCL为高电平,SDA由低电平变为高电平时表示停止信号,停止信号产生后,总线处于空闲状态(主机发起)
字节传送、应答
IIC总线通信时,每个字节为8位。数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后,接收器必须发送1位应答位来回应发送器,即一帧9位。
同步信号
IIC总线在进行数据传输时
- 时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生变化
- 时钟线SCL为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化。
典型IIC时序
高亮部分表示数据由主机向从机传送,普通部分为从机向主机传送;
A表示有应答,A#表示无应答。
- 主机向从机发送数据
S | 从机地址 | 0 | A | 数据 | A | 数据 | A/A# | P |
---|
- 从机向主机发送数据
S | 从机地址 | 1 | A | 数据 | A | 数据 | A# | P |
---|
- 主机先向从机发送数据,然后从机再向主机发送数据
S | 从机地址 | 0 | A | 数据 | A/A# | S | 从机地址 | 1 | A | 数据 | A | 数据 | A# | P |
---|