一文读懂I2C总线 (超详细配42张高清图)

本文深度解析I2C通信总线,介绍其历史、基本概念、数据传输流程、传输数据格式等内容。I2C接口简单、可扩展性强,适用于通讯速率要求不高的多器件通信场景。还阐述了其在传感器网络、多设备控制等方面的高级应用,并给出Arduino应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一文读懂I2C总线 (超详细配42张高清图)

image-20240117074415427

I2C(Inter-Integrated Circuit)通信总线,作为嵌入式系统设计中的一个关键组成部分,其灵活性和高效率使其在高级应用中备受青睐。本文旨在提供关于I2C通信总线的深度解析,包括其基本概念、特点、通信协议,以及在不同场景下的高级应用和最佳实践。I2C接口只有2根信号线,总线上可以连接多个设备,硬件实现简单,可扩展性强。I2C通信协议可以用普通GPIO引脚进行软件模拟。I2C接口主要用于通讯速率要求不高,以及多个器件之间通信的应用场景。

1. I2C总线历史

I2C(Inter-Integrated Circuit)总线是一种重要的串行通信协议,它的历史可以追溯到上世纪80年代初期。以下是对I2C总线历史的详细介绍:

  1. 起源
    • I2C总线技术由荷兰的飞利浦半导体(现在的恩智浦半导体)在1982年开发。最初,这项技术是为了在电视机内部实现简单、高效、低成本的通信而设计的。
  2. 设计目标
    • 设计I2C的初衷是减少电视机等复杂电子系统内部的布线数量,同时也降低制造成本。通过使用只有两根线的通信总线,它有效地减少了器件间连接的复杂性。
  3. 技术发展
    • 随着技术的成熟和普及,I2C协议得到了广泛的应用和扩展。从最初的标准模式(100kHz),发展到快速模式(400kHz)和高速模式(3.4MHz)。
  4. 标准化和开放
    • 虽然最初由飞利浦半导体开发,但I2C协议后来被标准化并广泛应用于多种设备中。飞利浦半导体放弃了对这项技术的专利权,使其成为开放标准。
  5. 广泛应用
    • I2C技术由于其简单性和有效性,已成为嵌入式系统设计中不可或缺的一部分。

image-20240115224523301

2. I2C通信总线基本概念

I2C是一种多主机、两线制、低速串行通信总线,广泛用于微控制器和各种外围设备之间的通信。它使用两条线路:串行数据线(SDA)和串行时钟线(SCL)进行双向传输。

特点

  1. 两线制总线:I2C仅使用两条线——串行数据线(SDA)和串行时钟线(SCL)进行通信,有效降低了连接复杂性。

  2. 多主多从设备支持:I2C支持多个主设备和多个从设备连接到同一总线上。每个设备都有唯一的地址。

  3. 可变的时钟速率:I2C总线支持不同的速率模式,如标准模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps)。

  4. 同步通信:I2C是一种同步通信协议,数据传输由时钟信号(SCL)来控制。

  5. 简单的连接:I2C通信对硬件的要求比较低,很容易在微控制器和外围设备间实现连接。

  6. 地址分配:每个I2C设备都通过一个7位或10位的地址来识别,这使得总线上可以连接多个设备。

  7. 阻塞传输:I2C支持阻塞传输机制,即主设备可以在传输过程中控制总线,防止其他设备发送数据。

  8. 应用广泛:由于其简单和灵活性,I2C被广泛应用于各种电子产品中,如传感器、LCD显示器、EEPROM等。

  9. 总线仲裁和冲突检测:在多主模式下,I2C能够处理多个主设备同时尝试控制总线的情况。

  10. 低功耗:I2C总线的设计使其成为低功耗的通信方式,适用于电池供电的设备。

基本特征

  1. 总线结构
    • 两线制:使用两条线进行通信,分别是串行数据线(SDA)和串行时钟线(SCL)。
    • 多主多从结构:支持多个主设备和多个从设备连接到同一总线上。
  2. 通信方式
    • 同步串行:数据传输同步于时钟信号。
    • 字节格式:每个字节由8位数据构成,加上开始和停止条件以及可选的应答位。
  3. 时钟速率
    • 支持多种速率,包括标准模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps)。

工作原理

  1. 总线控制
    • 开始和停止条件:通信由主设备通过在SDA线上生成特定的信号模式来开始和结束。
    • 地址帧:每次通信开始时,主设备发送一个地址帧来指定与之通信的从设备。
  2. 数据传输
    • 主从通信:主设备控制时钟信号,向从设备发送或接收数据。
    • 应答位:每个字节后,接收方

发送一个应答位(ACK)或非应答位(NACK),以告知发送方数据是否被成功接收。

地址和仲裁

  1. 设备地址
    • 7位或10位地址:每个I2C设备都有一个唯一的地址,允许在同一总线上连接多个设备。
  2. 总线仲裁
    • 在多主模式下,当两个主设备同时尝试控制总线时,I2C协议包含仲裁机制以决定哪个设备获得控制权。

3. I2C数据传输流程

数据信号以8位的序列传输。所以在特殊的开始条件发生后,就会出现第一个8位序列,它指示了数据被发送到哪个从设备的地址。每个8位序列之后都会跟随一个称为确认的位。

image-20240116072057906

在大多数情况下,第一个确认位之后会跟着另一个寻址序列,但这次是针对从设备的内部寄存器。在寻址序列之后是数据序列,直到数据完全传输完毕,并以一个特殊的停止条件结束。

开始条件发生在数据线在时钟线仍然高电平的时候变低。之后,时钟开始,并且在每个时钟脉冲期间传输每一位数据。设备寻址序列从最重要的位开始,以最不重要的位结束,实际上是由7位组成的,因为第8位用于指示主设备是向从设备写入(逻辑低)还是从中读取(逻辑高)。

下一个确认位由从设备用来指示它是否成功接收了前一个位序列。所以这次主设备将SDA线的控制权交给从设备,如果从设备成功接收了前一个序列,它将把SDA线拉低到所谓的确认状态。

如果从设备没有把SDA线拉低,这种状态被称为不确认,意味着它没有成功接收前一个序列,这可能由多种原因造成。例如,从设备可能正忙,可能不理解接收到的数据,或者不能再接收任何数据等等。 在这种情况下,主设备决定如何继续操作。

image-20240116072217028

接下来是内部寄存器的寻址。内部寄存器是从设备内存中包含各种信息或数据的位置。

<

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾格北峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值