【总线协议】I2C

155 阅读2分钟

两线制

I2C总线具有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL。

SCL为高,SDA稳定,则数据有效

举例,下图表示1010000

SCL为高,SDA信号下降沿,传输开始

SCL为高,SDA信号上升沿,传输结束

数据传输

I2C 总线上可以挂多个主设备,多个从设备(外围设备)。每个接到 I2C 总线上的器件都有唯一的地址。这时主机即为发送端,总线上收数据的器件则为接收端。

  1. 多主机仲裁

    • 主机只能在总线空闲时启动传输。多个主机可能在起始条件的最小持续时间内产生一个起始条件,结果在总线上产生一个规定的起始条件。

    • 当 SCL 线是高电平时,仲裁在 SDA 线发生。在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同。

  2. 总线寻址

    • 采用7位的寻址字节(寻址字节是起始信号后第一个字节),D7~D1位组成从机的地址,D0位是数据传送方向,为 “0” 时表示主机向从机写数据,为 “1” 时表示主机由从机读数据。
    • 主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,若相同,则认为自己正在被主机寻址。
  3. 写数据

    • 完整的一次写数据,如下图所示

  4. 读数据

    • 完整的一次读数据,如下图所示

  5. 应答信号

    • 如读写图所示,应答信号由从机产生,非应答信号可能是主机产生也可能是从机产生,产生非应答信号的情况主要有以下几种:
      • I2C总线上没有主机所指定地址的从机设备;
      • 从机正在执行一些操作,处于忙状态,还没有准备好与主机通讯;
      • 主机发送的一些控制命令,从机不支持;
      • 主机接收从机数据时,主机产生非应答信号,通知从机数据传输结束,不要再发数据了。