I2C总线协议详解

时间:2026-05-21
  在电子通信领域,I2C 总线协议是一种被广泛应用的通信协议,它为设备之间的数据传输提供了一种高效、稳定的方式。接下来,我们将深入探讨 I2C 总线协议的各个方面。
  I2C 总线物理拓扑结构
  I2C 总线在物理连接上极为简单,主要由 SDA(串行数据线)、SCL(串行时钟线)及上拉电阻构成。其通信原理是通过对 SCL 和 SDA 线高低电平时序的精准控制,产生 I2C 总线协议所需的信号,从而实现数据的传递。在总线空闲状态时,这两根线通常会被上拉电阻拉高,维持高电平状态。这种设计使得 I2C 总线在硬件实现上较为简便,降低了系统的复杂度和成本。

 

  I2C 总线特征
  I2C 总线上的每个设备都具备主设备或从设备的双重角色,并且每个设备都有一个的地址,该地址可从 I2C 器件的数据手册中获取。主从设备之间通过这个地址来确定通信对象。在常见应用中,我们通常将带有 I2C 总线接口的 CPU 模块作为主设备,而把挂接在总线上的其他设备视为从设备。
  I2C 总线上可挂接的设备数量受到总线电容 400pF 的限制。如果挂接的是相同型号的器件,还会受到器件地址位的约束。其数据传输速率在不同模式下有所不同,标准模式下可达 100kbit/s,快速模式下可达 400kbit/s,高速模式下更是能达到 3.4Mbit/s。一般通过 I2C 总线接口可编程时钟来调整传输速率,同时传输速率也与所接上拉电阻的阻值有关。I2C 总线上的主设备与从设备之间以字节(8 位)为单位进行双向的数据传输。
  I2C 总线协议
  I2C 协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件,且起始和结束信号均由主设备产生。当总线处于空闲状态时,SCL 和 SDA 都保持高电平。当 SCL 为高电平而 SDA 由高到低跳变时,表示产生起始条件;当 SCL 为高而 SDA 由低到高跳变时,表示产生停止条件。起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他 I2C 器件无法访问总线;停止条件产生后,本次数据传输的主从设备释放总线,总线再次进入空闲状态。

 

  在数据传输过程中,主设备在 SCL 线上产生每个时钟脉冲时,会在 SDA 线上传输一个数据位。当一个字节按数据位从高位到低位的顺序传输完后,从设备会拉低 SDA 线,回传给主设备一个应答位,此时才认为一个字节真正传输完成。不过,并非所有字节传输都必须有应答位,例如当从设备不能再接收主设备发送的数据时,会回传一个否定应答位。

  此外,I2C 总线上的每个设备都有地址,主从设备之间的数据传输建立在地址基础上。主设备在传输有效数据前要先指定从设备的地址,大多数从设备的地址是 7 位的,协议规定再给地址添加一个位,用于表示接下来数据传输的方向,0 表示主设备向从设备写数据,1 表示主设备向从设备读数据。

  

  I2C 总线操作
  对 I2C 总线的操作实际上就是主从设备之间的读写操作,大致可分为以下三种情况:
  主设备往从设备中写数据:这是一种常见的操作方式,主设备将数据发送给从设备,以实现数据的写入。
  主设备从从设备中读数据:主设备从从设备获取所需的数据,满足系统对数据的需求。
  主设备往从设备中写数据,然后重启起始条件,紧接着从从设备中读取数据;或者主设备从从设备中读数据,然后重启起始条件,紧接着主设备往从设备中写数据:在单个主设备系统中,这种重复开启起始条件的机制比用 STOP 终止传输后又再次开启总线更具效率。


上一篇:线性电源(4)LDO ≠ 线性电源
下一篇:晶体三极管工作原理讲解方法探讨

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料