总线 ---- IIC总线

简介

I2C总线是飞利浦(PHLIPS)公司推出的一种半双工串行总线,用于连接微控制器及其外围设备, I2C串行总线有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 它仅通过两根信号线就可以完成对所有挂载在I2C总线上的从器件进行操作。这样的好处是可以大大的节省我们微处理器的IO口资源。

硬件连接

IIC总线可以挂载多个主设备和多个从设备,同一时刻只能有一个主设备
总线 ---- IIC总线
两根信号线都接上拉电阻,总线在空闲状态下为高电平

IIC时序

总线 ---- IIC总线

在数据传输过程中,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线为低电平期间,数据线上的状态才允许变化

总线 ---- IIC总线
总线 ---- IIC总线

读写时序
总线 ---- IIC总线
如果从机需要延迟下一个数据字节开始传送的时间,可以通过把SCL电平拉低并保持来强制主机进入等待状态
总线 ---- IIC总线

寻址

D1-D7位为地址位,理论上IIC总线可以最多挂载2^7 -1=127个从设备
总线 ---- IIC总线

总线总裁

I2C总线上的仲裁分两部分:SCL线的同步和SDA线的仲裁。

1 SCL线的同步(时钟同步)
SCL同步是由于总线具有线“与”的逻辑功能,即只要有一个节点发送低电平时,总线上就表现为低电平。当所有的节点都发送高电平时,总线才能表现为高电平。正是由于线“与”逻辑功能的原理,当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号。这就是SCL的同步原理

2 SDA仲裁
SDA线的仲裁也是建立在总线具有线“与”逻辑功能的原理上的。节点在发送1位数据后,比较总线上所呈现的数据与自己发送的是否一致。是,继续发送;否则,退出竞争。SDA线的仲裁可以保证I2C总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失。总线系统通过仲裁只允许一个主节点可以继续占据总线