Advertisement

浅谈 IIC I2C 总线协议

阅读量:

简介

该技术也可称为双向二进制同步串行接口(I2C)或智能集成电路(IIC),由Philips公司开发出一种简洁且高效的集成电路技术。其中"IIC"即Integrable Inter-Integrated Circuit缩写为Integrable I2C技术。

IIC只需使用两条双向传输线路即可完成通信操作,在这种设计中我们采用了一条SDA(Serial Data Line)和一条SCL(Serial Clock Line)。需要注意的是这两条线路均采用开漏方式输出数据信号因此在连接时需要通过上拉电阻将它们接至VCC电源线上以确保信号完整性。与之相比IIC总线系统作为一个多主机设计能够允许多个设备共享同一根总线实现互操作性需求但其特点是任何时候只能有一台设备被指定为主机负责发送数据而其他设备则作为从机角色运行以保证系统的高效运转

IIC理论上理想传输距离为15米;然而,在实际应用中却受到噪声和通信速率提升的影响而导致实际传输距离显著缩短;通常仅适用于微电极器件间的通信;不适于进行远程通信;在快速模式下可实现400Kbps的速度;而在高速模式下则可达到高达3.4Mbps的速度;但需要注意的是,在速度越快的情况下系统的可靠性反而越低


硬件连接

这里写图片描述

主机与从机通过上图所示的方式连接到主干线上,在之前的内容中提到过,在IIC总线上SDA与SCL信号都需要连接到上拉电阻以接通电源电压VCC。采用7位地址寻址方案时会排除掉全零广播地址这一无效地址码,在理论计算下一条完整的IIC总线最多可以挂载127个独立设备节点(即2^7 - 1 = 127),每个设备节点对应一个唯一的地址码。


通讯过程

1)位传输

IIC如何通过SDA和SCL两条线传输0和1比特呢?首先需要明确的是,SCL线必须是由主机时钟进行严格控制的,否则会导致信号混乱。值得注意的是,在大多数IIC总线设计中,默认情况下SDA线会被配置为低电平("0"),而只有在特定条件下才会被拉高("1")。对于发送"1"比特的操作来说,在SCL处于高电平时需要将SDA拉至高电平;而对于发送"0"比特的操作,则应在SCL保持高电平时将SDA降至低电平。这种操作方式确保了数据传输过程中的稳定性与可靠性。

这里写图片描述

在常规的数据传输过程中,在SCL处于较高水平时,则要求SDA的电平保持恒定;否则系统将将其识别为其他类型的动作(如图所示)。

这里写图片描述

当SCL处于较高水平时(即SCL=1),然而SDA却下降至0,则被定义为主机启动行为;反之,则被定义为主机终止行为

2)数据帧

前面说到,我们已经可以发送“0”和“1”了,那具体怎么传数据呢?

这里写图片描述

主机与从机的通信数据帧如上图,流程如下:

  1. 主机首先启动通信流程(S),使得接收到的数据表明主机准备进行读/写操作。
  2. 在确定目标设备后随后,在确定目标设备后
  3. 接着,在确定目标存储位置之后这时主机还需要发送要访问的寄存器地址
  4. 每次传输一个字节后立即返回确认信息
  5. 当所有数据传输完成之后主、从双方结束通信流程,并释放总线

这里的ACK是主机至从机的响应。当主机发送完数据后会先释放SDA,并持续监控SDA的电平变化。若从机正常接收到数据,则将SDA的电平降至较低水平;若在主机监控时间内检测到SDA仍维持高电平,则表明数据未能成功接收。

这里写图片描述

如图所示,在主机与从机进行数据接收的过程中接收数据 时会发生总线上的电平变化。值得注意的是,在主机试图读取数据之前必须先向从机发出查询指令并指定目标寄存器地址(DUMMY WRITE)。随后系统会发送起始指令及目标地址,并启动对SDA总线的解码过程。在此期间接收方的数据段 SDI n段是由来自主控单元的数据传输完成的——当主机完成对一个字节的数据接收后会立即发送ACK信号以确认成功。

这里写图片描述

下图是主机往从机写数据 时总线上电平变化。

这里写图片描述

全部评论 (0)

还没有任何评论哟~