在看了DaveoCKII大佬的博客后,结合自己所学写了这篇关于IIC协议的博客,在这里先得感谢这位大佬的分享,能让我们这些后辈能更好的去学习!

一、IIC简介

I2C(Inter-Integrated Circuit)协议是一种串行总线通信协议,广泛应用于微控制器和各种外围设备之间的数据传输。它由飞利浦(现在的NXP)于1980年提出,主要用于低速、短距离的设备间通信,特别适用于嵌入式系统、传感器和存储器等应用。

二、主要特点

1. 双线通信

I²C总线采用两根信号线进行数据传输:

  • SDA(Serial Data Line):数据传输线,用于传输数据。

  • SCL(Serial Clock Line):时钟传输线,用于同步数据传输。时钟信号由主设备生成,确保所有设备在同一时刻读取数据。

2. 主从架构

  • I²C通信是基于主从模式的:

    • 主设备(Master)负责控制通信的启动、时钟信号的生成以及数据流的管理。

    • 从设备(Slave)响应主设备的命令,执行操作并返回数据。

3. 设备地址

  • 每个I²C从设备都有一个唯一的7位或10位地址。主设备通过发送目标设备的地址来选择通信的对象。

  • 地址的分配由硬件或软件管理,I²C允许多个设备连接在同一总线上,每个设备使用不同的地址。

4. 支持多设备连接

  • I²C允许多个设备连接到同一总线上,设备数目不受限。通过设备的地址进行区分,主设备可以与多个从设备进行通信。

5. 支持多种通信速率

  • I²C支持多种传输速率,根据应用需求可以选择不同的工作模式:

    • 标准模式(Standard mode):最大传输速率为100 kbps。

    • 快速模式(Fast mode):最大传输速率为400 kbps。

    • 高速模式(High-Speed mode):最大传输速率为3.4 Mbps。

6. 同步通信

  • I²C总线是同步通信,即数据传输由时钟信号(SCL)同步。在时钟信号的控制下,数据位在SDA线上逐位传输。

7. 开漏(Open-Drain)输出

  • I²C总线的SDA和SCL信号线采用开漏输出。这意味着数据线或时钟线在传输低电平时会被驱动为低电平,而高电平由外部的上拉电阻来提供。多个设备可以共享同一条数据线,而不会发生电气冲突。

8. 简易的设备控制

  • 设备可以通过**启动信号(Start)停止信号(Stop)**来控制通信的开始和结束。启动信号通知总线上的所有设备准备接收数据,停止信号表示通信结束。

9. 支持点对点和点对多点通信

  • 在I²C总线中,点对点通信指的是一个主设备和一个从设备之间的数据传输。点对多点通信指的是一个主设备控制多个从设备。

10. 错误检测

  • I²C协议包含错误检测机制,例如确认位(ACK/NACK)用于确认每个字节是否正确传输。如果接收方没有正确接收数据,会发送非确认信号(NACK),表示数据传输失败。

11. 低功耗特性

  • I²C是一种低功耗的通信协议,尤其适合电池供电的设备。在空闲或待机状态下,I²C设备消耗的电流非常小,仅在传输数据时才会增加功耗。

12. 多主模式(可选)

  • I²C支持多主模式,即总线上可以有多个主设备。多个主设备可以控制总线,但实际应用中,多主模式较为复杂,通常采用单一主设备模式。

13. 支持软总线和硬件总线

  • I²C不仅支持硬件实现,也支持软件实现。硬件总线采用芯片内的控制器来处理I²C通信,软件总线则由主设备的软件来控制通信的实现。

三、硬件结构

1. 物理层结构

I²C总线由两条双向开漏信号线组成:

SDA(Serial Data Line):传输数据。

SCL(Serial Clock Line):由主设备产生时钟信号,控制通信时序。

关键特性

开漏输出(Open-Drain):所有设备通过开漏结构连接到总线,需外接上拉电阻(通常为4.7kΩ,具体值由总线电容和速率决定)。

线与逻辑:任一设备可将总线拉低,避免信号冲突。

解释:

I²C总线的SDA和SCL线均为开漏输出(Open-Drain),所有设备共享总线:

若任一设备拉低总线(输出低电平),总线表现为低电平。

只有当所有设备均释放总线(输出高电平)时,总线才通过上拉电阻表现为高电平。

这种机制称为线与逻辑。


2. 总线拓扑

多主多从架构:支持多个主设备和从设备共享总线,通过仲裁机制解决冲突。

设备地址:每个从设备有唯一的7位或10位地址(由协议版本决定),主设备通过地址选择通信对象。


3. 硬件组成

主设备(Master)

发起通信,控制SCL时钟。

负责启动(START)和停止(STOP)条件。

支持多主模式下的总线仲裁。

从设备(Slave)

响应主设备的地址寻址。

根据主设备指令发送或接收数据。

常见从设备:传感器、EEPROM、ADC/DAC等。


4. 关键电路特性

上拉电阻:将SDA和SCL拉至高电平(VDD)。

总线上的等效电容由所有设备的输入电容、走线电容等组成,I²C总线的高电平由外部上拉电阻拉高,信号的上升时间由RC时间常数决定,最大允许上升时间由I²C协议规定,需满足:

标准模式(100kbps)≤1000ns

快速模式(400kbps )≤300 ns                                                                                                 

高速模式(3.4Mbps)≤80 ns

电容较大时问题:总线电容大(例如多设备、长走线),RC时间常数大,导致上升时间过长,可能超出协议限制。

解决方案:选择较小的上拉电阻(如1kΩ–2kΩ),以减小RC时间常数,加快信号上升沿。 

电容较小时问题:总线电容小(设备少、走线短),RC时间常数小,但过小的电阻会增加功耗。解决方案:选择较大的上拉电阻(如4.7kΩ–10kΩ),在满足上升时间的前提下降低功耗。


5. 通信流程

  1. 起始条件(START):SCL为高时,SDA从高跳变到低。

  2. 地址帧:主设备发送从设备地址(7位或10位) + 读写位。

  3. 数据传输:每8位数据后跟随一个ACK/NACK应答位。

  4. 停止条件(STOP):SCL为高时,SDA从低跳变到高。


6. 总线仲裁与时钟同步

仲裁:多个主设备同时发送时,通过SDA的线与逻辑竞争总线控制权(先释放高电平者退出)。

仲裁过程:

1.当多个主设备同时启动通信时,仲裁通过逐位比较SDA线的实际电平与自身发送的电平来实现:

起始条件同步:所有主设备同时发送起始条件(SDA从高到低),此时无冲突。

2.逐位竞争:主设备开始发送地址或数据位,监控SDA线状态:

3.若某主设备发送高电平(释放总线),但检测到SDA线为低电平,说明有其他设备正在发送低电平。该主设备立即退出仲裁,停止发送后续数据,转为从设备模式。发送低电平的主设备继续控制总线,直至通信完成。

时钟同步:SCL通过线与逻辑实现主设备间的时钟同步。


7. 硬件设计注意事项

上拉电阻优化:根据总线长度和速率调整阻值(例如:高速模式需更小的阻值)。

信号完整性:长距离布线需考虑阻抗匹配和干扰抑制。

地址冲突:确保从设备地址唯一,可通过硬件地址引脚或软件配置实现。

四、IIC总线时序

1、基本时序单元

1)、起始条件(Start Condition)与停止条件(Stop Condition)

起始条件定义:主设备在SCL为高电平时,拉低SDA线。

起始条件作用:标志通信开始,通知总线上的所有设备准备接收数据。

停止条件定义:主设备在SCL为高电平时,释放SDA线(SDA从低变为高)。

停止条件作用:标志通信结束,释放总线控制权。

时序图


2)、数据位传输(Data Bit Transfer)

数据有效性:SDA线上的数据在SCL高电平时必须保持稳定,仅在SCL低电平时允许变化。

传输顺序:数据按高位(MSB)在前,低位(LSB)在后的顺序发送。

3)、应答信号(ACK/NACK)

ACK(确认):接收方在每字节传输后拉低SDA线,表示成功接收数据。

NACK(非确认):接收方保持SDA线高电平,表示未成功接收数据或通信终止。

时序图

2. 数据传输时序

(1) 数据帧格式

一次完整的I²C数据传输包含以下部分:

  1. 起始条件(Start)
  2. 从设备地址(7位或10位) + 读写位(1位,0=写,1=读)
  3. 应答位(ACK/NACK)
  4. 数据字节(8位)
  5. 应答位(ACK/NACK)
  6. 停止条件(Stop)
(2) 数据写入流程

以主设备向从设备写入数据为例:

  1. 主设备发送起始条件
  2. 主设备发送从设备地址(7位) + 写位(0)
  3. 从设备返回ACK(拉低SDA)。
  4. 主设备发送数据字节(8位)
  5. 从设备返回ACK
  6. 重复步骤4-5,直至数据传输完成。
  7. 主设备发送停止条件
(3) 数据读取流程

以主设备从从设备读取数据为例:

  1. 主设备发送起始条件
  2. 主设备发送从设备地址(7位) + 读位(1)
  3. 从设备返回ACK
  4. 从设备发送数据字节(8位)
  5. 主设备返回ACK(继续接收)或NACK(停止接收)。
  6. 重复步骤4-5,直至数据读取完成。
  7. 主设备发送停止条件

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐