简介
其实关于IIC通信协议的相关原理的相关理论我在最开始的文章当中进行过讲解,但是没有详细的去进行过说明,在今天的这篇文章中我们就来详细说明一下IIC协议的相关理论。
一、IIC 总线组成
1、定义介绍
采用串行总线可以简化系统硬件结构、减小系统体积、提高系统可靠性。常 用的串行总线有单总线(1-Wire Bus)、IIC(Inter-Integrated Circuit)、SPI(Serial Peripheral Interface)等。 IIC 总线是 Phlips 公司推出的一种同步串行总线,是一种支持多主机多从机 系统、总线仲裁以及高低速器件同步功能的高性能串行总线技术。 IIC 总线只有两根双向信号线:一根是数据线 SDA,一根是时钟线 SCL。
多主机多从机
----
在
IIC
总线系统上可以挂载多个主机设备与从机设备;
总线仲裁----对于总线上挂载有多主机设备的情况下,为避免多个主机同 时向总线发起通信,需要有相应的总线仲裁机制,避免出现总线冲突;
高低速器件同步--
通过
IIC 总线连接的两个器件的传输速度不一定相同, 因此需要通过从机的时钟延展(
clock stretching
)功能保证两者的通信速度一致。
即:如果果从机跟不上主机的速率,
IIC
协议规定从机可以通过将
SCL 时钟线拉 低来暂停传输直到从机释放掉
SCL
线,传输才能继续进行。
2、传输速率
标准模式:100Kbit/s
快速模式:400kbit/s
高速模式:3.4Mbit/s
三、工作原理
每一个连接到 IIC
总线上的器件都有一个唯一的器件地址(
ID),主机通过 ID
建立多机通信机制,因此
IIC
总线节省了外围器件的片选信号线。虽然 IIC 总 线上可以连接多个主机和多个从机,但是同一时刻,只能有一个主机向总线上发 起传输,如果有多个主机同时发起传输,则会根据
IIC 总线的仲裁机制,最终 只给一个主机授权,没有得到仲裁的主机则会停止传输。而且,
IIC 总线上只能 由主机主动发起传输,从机无法主动发起传输,这也就意味着从机和从机之间也
是无法直接交换数据的。
IIC 总线在传输数据时必须遵循规定的数据传输时序,一次完整的数据传输 过程中共有四类信号:起始信号、数据信号、应答信号和停止信号。
起始信号:在 SCL
为高电平时,
SDA 的电平由高电平跳变为低电平,称为 I2C 总线的起始信号,标志着一次数据传输开始。起始信号由主机主动产生,在 产生起始信号之前
I2C
总线必须处于空闲状态。
停止信号:在 SCL
为高电平时,
SDA
由低电平跳变为高电平,称为 I2C 总 线的停止信号,标志着一次数据传输终止。停止信号由主机主动产生,产生停止 信号之后
I2C
总线将返回空闲状态。
数据信号:IIC
总线传输数据时,在
SCL
为高电平时,
SDA 必须保持稳定的 逻辑电平,高电平表示数据
1
,低电平表示数据
0
;只有在
SCL 为低电平时才允 许
SDA
上的电平状态改变。
应答信号:IIC
总线传输数据时,每传输一个字节后都必须有一个
SCL 周期 的应答信号;与应答信号相对应的时钟由主机产生,发送端必须释放
SDA 使其 处于高电平状态,以便接收端在这一个
SCL
周期发出应答信号。
应答信号有两种状态:应答(ACK
)、非应答(
NACK),接收端在应答位期 间输出低电平则为应答,输出高电平则为非应答。
当由于某种原因,从机设备不产生应答时,如从机在进行其它处理而无法接 收总线上的数据时,必须释放 SDA 总线,然后由主机产生一个停止信号以终止 数据传输。
当主机在接收数据时,接收到最后一个字节后,必须给从机发送一个非应答 信号,使从机释放总线以便主机可以发送停止信号,终止数据传输。
需要注意的是:在某些情况下,从机在收到一个完整的字节后,有可能因为 需要忙于其它工作(如处理内部中断服务)而无法立刻接收下一个字节,这时从 机需要将 SCL 拉为低电平,从而强制主机处于等待状态,直到从机准备好接收 下一个字节时,再释放
SCL 为高电平状态,从而可以继续传输数据。这种现象 称为时钟拉伸(
Clock Stretching
)。
四、数据地址
IIC
总线协议规定:起始信号表明一次传输开始,其后为寻址字节(高
7 位 为从机地址、最低
1 位为方向位,方向位表明主机与从机之间的数据传输方向, 0--
主机发送数据给从机,
1--从机发送数据给主机);在寻址字节后是对应的读、 写操作的数据字节和应答位;在数据传输完成后主机必须发送停止信号。
IIC 总线的数据传输方式有许多读、写组合方式:主机写操作、主机读操作、 主机读写操作。