当前位置: 首页 > news >正文

I2C总线详解

一、概述

I2C(Inter-Integrated Circuit)总线是由飞利浦半导体(现恩智浦NXP)在1980年代开发的一种双向、二线制、同步串行通信总线。它设计初衷是提供一种简单、高效的方式,让主板、嵌入式系统或物联网设备上的微控制器(CPU)能够与周边设备芯片进行通信。由于其硬件连接简单,引脚占用少,在各类传感器、EEPROM、RTC(实时时钟)等设备中得到了广泛应用。

二、物理特性与硬件连接
  1. 两线制

    • SDA:串行数据线,用于双向数据传输。

    • SCL:串行时钟线,由主设备产生,用于同步数据位传输的节奏。

  2. 线与特性
    这是I2C总线能够实现多主多从通信的基石。

    • 硬件基础:SDA和SCL线都通过上拉电阻连接到正电源VCC。总线上的所有设备其I/O引脚都是开漏输出集电极开路输出结构。

    • 工作原理

      • 当任何一个设备的输出为低电平时,它会将总线通过MOS管或三极管下拉到低电平。由于“线与”逻辑,此时整个总线呈现为低电平。

      • 只有当所有设备都输出高电平(即释放总线,呈高阻态)时,上拉电阻才会将总线拉至高电平。

    • 核心优势

      • 电平冲突检测:如果一台设备试图输出高电平,而另一台正在输出低电平,结果总线是低电平。这使主设备能够通过读取总线电平与自己输出的电平进行比较,从而判断是否发生了总线仲裁,这对于支持多主模式至关重要。

      • 无需担心电源时序:不同设备的逻辑电平可以不同,只要其开漏输出能够承受VCC电压即可。

  3. 支持多设备连接

    • 总线采用主从式通信架构。

    • 主设备:负责发起和终止一次数据传输,并产生时钟信号SCL。通常是微控制器、CPU或DSP。

    • 从设备:响应主设备的寻址和命令,被动地接收或发送数据。例如传感器、存储器等。

    • 总线上可以连接多个主设备(支持多主竞争仲裁)和多个从设备

三、通信协议与寻址机制
  1. 通信的发起与终止

    • 起始条件(起始信号):在SCL为高电平时,SDA线出现一个从高到低(下降沿)的跳变。这表示一次通信的开始,并唤醒所有从设备准备接收地址。

    • 停止条件(停止信号):在SCL为高电平时,SDA线出现一个从低到高(上升沿)的跳变。这表示本次通信的结束,释放总线,总线恢复空闲状态(高电平)。

  2. 设备寻址与数据流向

    • 唯一地址:总线上每个从设备都必须有一个7位的唯一设备地址(部分I2C设备支持10位地址扩展)。

    • 地址帧结构:主设备发送起始条件后,紧接着发送的第一个字节就是地址字节

      • 高7位:从设备地址。

      • 最低位:(之后的数据流向)读写控制位

        • 0:表示主设备接下来要向从设备写入数据(主发从收

        • 1:表示主设备接下来要从从设备读取数据(从发主收

    • 举例:一个从设备地址为 0x48 (二进制 0100 1000)。

      • 主设备要数据时,发送的地址字节为:0x48 << 1 | 0 = 0x90 (二进制 1001 0000)。

      • 主设备要数据时,发送的地址字节为:0x48 << 1 | 1 = 0x91 (二进制 1001 0001)。

  3. 应答机制
    每个字节(包括地址字节和每一个数据字节)传输完成后,接收方必须发送一个应答位

    • ACK:第9个时钟周期,SDA被拉低(低电平),表示接收成功。

    • NACK:第9个时钟周期,SDA保持高电平,表示:

      • 接收失败。

      • 主设备作为接收方时,发送NACK来告知从设备“这是最后一个字节,不要再发了”。

        3.数据传输规则:

                1.I2C 以字节(8 位)为单位传输数据,且高位(MSB)先传输

                2.在传输过程中,在时钟线(SCL)为低电平时,只允许发送方改变数据线(SDA).接收方不得采样。

               3. 在传输过程中,在时钟线(SCL)为高电平时,只允许接收方采样数据线(SDA).发送方需要保持SDA的稳定

四、典型操作时序详解
1. 写操作时序

这种操作常用于向EEPROM等存储设备写入数据,或向配置寄存器写入命令。

  • 步骤

    1. 主机发送起始信号

    2. 主机发送从机地址 + 写位(之后的数据流向,主发从收)

    3. 从机回复ACK

    4. 主机发送要写入的内存地址

    5. 从机回复ACK

    6. 主机开始逐字节发送一个或多个数据字节。每发送一个字节,从机回复一个ACK。

    7. 主机发送停止信号,结束本次通信。

  • 时序图示意

2. 读操作时序

读操作相对复杂,主设备需要先告诉从设备要读取哪个地址的数据。有两种常见方式,重点介绍效率更高的“复合格式”读操作。

  • 高效读操作(复合格式)

    1. 主机发送起始信号

    2. 主机发送从机地址 + 写位(之后的数据流向,主发从收)。 //此次是为了告诉从设备要读取哪个地址的数据,一般被叫做“哑写”

    3. 从机回复ACK

    4. 主机发送要读取的内存地址。 // 主机此时是在“写”地址指针

    5. 从机回复ACK

    6. 主机不发送停止信号,而是再次发送一个起始信号。 // 关键步骤:重启

    7. 主机发送从机地址 + 读位(改变之后的数据流向,从发主收)。 

    8. 从机回复ACK

    9. 从机开始逐字节发送一个或多个数据字节。每接收一个字节,主机回复一个ACK,但对于最后一个字节,主机必须回复NACK

    10. 主机发送停止信号,结束通信。

  • 关键点

    • 为何高效:在一次通信过程中完成了“设置地址指针”和“读取数据”两个动作,无需两次完整的通信周期。

    • 最后一个字节的NACK:这是至关重要的。它向从设备表明主设备不再请求更多数据,从设备在收到NACK后会释放SDA线。如果不发送NACK,从设备可能会继续尝试发送下一个字节,导致通信时序错乱。

  • 时序图示意

五、总结
特性描述
总线结构二线制(SDA, SCL),开漏输出,需上拉电阻,具有“线与”特性。
通信模式同步、串行、半双工、主从式。
寻址方式7位或10位从设备地址,首个字节包含读写方向位。
关键信号起始条件、停止条件、应答位、重复起始条件。
操作模式支持标准模式、快速模式、高速模式等,速率从100kbps到5Mbps不等。
应用优势硬件简单,引脚节省,支持多主多从,有成熟的软件库和硬件支持。
http://www.dtcms.com/a/419087.html

相关文章:

  • 从底层到应用:开散列哈希表与_map/_set 的完整实现(附逐行注释)
  • MoonBit 异步网络库发布
  • OpenLayers地图交互 -- 章节十六:双击缩放交互详解
  • Kubernetes HPA从入门到精通
  • 株洲做网站的公司网站页面设计
  • 汕头企业网站建设价格视频作为网站背景
  • 视频抽帧完全指南:使用PowerShell批量提取与优化图片序列
  • 1、User-Service 服务设计规范文档
  • 企业网站模板购买企业级网站建设
  • 路由器设置手机网站打不开wordpress跳转二级域名
  • MySQL在线DDL:零停机改表实战指南
  • 哪个做图网站可以挣钱马鞍山网站建设公司排名
  • 杭州公司做网站电商是干什么工作的
  • 揭秘InnoDB磁盘I/O与存储空间管理
  • 【深度相机术语与概念】
  • Android studio 依赖jar包里的类引用时红名,但能构建打包运行。解决红名异常
  • 做设计常用的素材网站网站seo啥意思
  • 云南最便宜的网站建设农村电商平台简介
  • AI时代下,我们需要新一代的金融基础软件
  • 挪威网站后缀网站服务器ip
  • Salesforce 生态中的缓存、消息队列和流处理
  • 【开源】基于STM32的无线条码扫描仪控制系统设计
  • 南京我爱我家网站建设新村二手房有限责任公司和有限公司的区别
  • WebStorm 快捷键大全(Windows / macOS 双平台对照)
  • 多线程顺序输出abc
  • CSS盒模型全面解析
  • 免费开源cms网站源码网页设计公司网站设计
  • [pytest] autouse 参数:自动使用fixture
  • 上海市建上海市建设安全协会网站wordpress盲注
  • 论文阅读三-第二章(3)