I2C通信

简介

串行、半双工总线通信,适用于近距、低速的芯片之间的通信,

i2c一共两根线,sda用于收发数据,scl用于双方时钟的同步

总线有权发起和结束一次通信,从机只能被呼叫,当多主机同时启动总线时,i2c也具备冲突检测和仲裁功能,从机有唯一的器件地址(7bit)

I2C(Inter-Integrated Circuit)是一种用于短距离数字通信的串行通信协议,通常用于连接微控制器、传感器、存储器和其他数字设备。以下是I2C通信的详细过程:

I2C基本概念:

  • 主从结构:I2C通信通常涉及两种设备,一个是I2C主设备,另一个是I2C从设备。主设备控制通信的起始和停止,并发出通信请求;从设备响应主设备的请求并提供数据。

  • 双线制:I2C通信使用两根线:时钟线(SCL,Serial Clock Line)和数据线(SDA,Serial Data Line)。SCL负责同步通信的时钟,SDA用于传输数据。

I2C通信的详细过程:

  1. 总线初始化

    • 通信开始前,主设备负责初始化I2C总线。这包括配置通信速率(时钟频率),通信模式(标准模式、快速模式等),并启动总线。
  2. 起始条件(Start Condition)

    • 主设备通过将SCL保持高电平,然后将SDA从高电平转为低电平,来发出起始条件信号。这表示通信的开始。
  3. 地址传输

    • 主设备将从设备的7位地址和一个读/写位(通常是R/W位,表示读或写)传输到SDA线上。这告诉从设备主设备想要读还是写数据。
  4. 应答(Acknowledge)

    • 从设备接收到地址后,如果能正确响应,则在SDA上发送一个应答位(ACK)。主设备通常会在这个时间点上释放SDA线,以等待从设备的应答。
  5. 数据传输

    • 主设备和从设备之间的数据传输包括多个字节。每个字节的数据都通过SDA线传输,并由SCL线的时钟信号同步。数据的传输可以是读操作或写操作,取决于前面的地址传输中的读/写位。
  6. 停止条件(Stop Condition)

    • 当数据传输完成后,主设备发出停止条件信号。这是通过将SCL保持高电平,然后将SDA从低电平转为高电平来实现的。停止条件表示通信的结束。
  7. 重复起始条件(Repeated Start Condition)(可选):

    • 在某些情况下,主设备可能需要在不断电的情况下与同一从设备进行多次通信。为了避免发送完整的地址序列,可以使用重复起始条件来继续通信。
  8. 错误处理

    • 在通信过程中,可能会出现错误,如通信超时、丢失的应答等。主设备通常需要实现错误处理机制来处理这些情况。

总的来说,I2C通信是一种灵活且广泛应用于各种数字设备之间的通信协议。主设备通过发送起始条件、地址和数据来控制通信,而从设备则响应并提供数据。通信的结束由停止条件表示。这种双线制的通信协议使得多个设备可以在同一总线上通信,从而简化了硬件连接。

时序图

主机在发送起始信号后必须先发送一个字节数据,高7位表示从机地址,最低位表示后续字节传输方向,0表示主机发从机收,1表示从机发主机收

image-20230917095726704

通信流程

  1. 主机发起起始信号启动总线
  2. 主机发送一个字节的数据指明从机地址和后续数据字节的传输方向
  3. 被寻址的从机发送应答信号回应主机
  4. 发送器发送一个字节的数据
  5. 接收器发送应答数据回应发送器
  6. 循环步骤 4、5
  7. 通信完成后,主机释放总线

起始信号和终止信号

起始信号

SCL为高,SDA由高变低

终止信号

SCL为高,SDA由低变高

image-20230917100156260

字节传送和应答

每个字节为8位,数据传送时先发送高位,后发送低位,发送器发完一个字节数据后,接收器必须 发送1位应答位回应,即是一帧共9位

同步信号

SCL为低电平期间,发送器向数据线发送一位数据,当SCL为高电平期间,接收器从数据线读取一位数据

image-20230917101354294

典型时序

阴影表示主机向从机发送,无阴影表示从机向主机发送,S表示起始信号,A表示应答,P表示终止信号

主机向从机发送数据

image-20230917102222600

从机向主机发送数据

image-20230917102247251

主机先向从机发送数据,然后从机再向主机发送数据

image-20230917102336869

I²C(IIC)总线协议详解—完整版 - 知乎 (zhihu.com)

最后修改:2023 年 11 月 10 日
如果觉得我的文章对你有用,请随意赞赏