[硬件基础]-快速了解I2C串行通信协议

news2024/10/7 0:12:35

快速了解I2C串行通信协议

文章目录

  • 快速了解I2C串行通信协议
    • 1、硬件接口
    • 2、数据帧
    • 3、数据操作
    • 4、时钟拉伸(Clock Stretching)
    • 5、总线仲裁
    • 6、权衡:功率与速度
    • 7、总结

内部集成电路协议(Inter-Integrated Circuit Protocol,I2C 或 IIC)是一种串行、同步、多主、板对板、半双工通信协议。 顾名思义,它主要用于印刷电路板(PCB)内的通信。 飞利浦半导体于 1982 年发明了它,其目的是使用更少的微控制器引脚与其他电子设备配合使用。 它仅使用两条线路与所连接的设备进行通信; 因此,有时也称为两线协议。 I2C 支持主从配置,但这里的术语从主从变为控制器-目标或控制器-外设。

在这里插入图片描述

1、硬件接口

I2C的物理接口由两条线组成:SDA和SCL。 SCL(串行时钟)是总线主机的时钟信号,SDA(串行数据)是数据信号。 I2C 驱动器是“漏极开路”,这意味着该器件只能将输出接地,或者将其输出置于高阻抗状态,这意味着它无法将其输出驱动为逻辑 1。高阻抗状态意味着输出不连接任何东西 ,即处于浮动状态。 SDA 和 SCA 线上分别连接了一对外部电阻,以便在器件将其输出置于高阻抗状态时上拉线路。 这种开漏极配置可防止线路短路,因为连接在一起的主设备和所有从设备永远不会向同一线路施加冲突的电压。

在这里插入图片描述

图1 开漏I2C驱动器

I2C 驱动器的时钟输入和数据输入缓冲器用作 I2C 设备的输入,因为它们用于读取线路的状态。 另一方面,当设备在总线上写入时,MOSFET 控制线路上的输出。

I2C总线支持不同的模式,支持不同的数据交换比特率。

模式速度
标准模式100kbit/s
快速模式400kbit/s
快速模式(plus)1Mbit/s
高速模式3.4Mbit/s

应该注意的是,这些比特率决定了总线上数据传输的速度,而不是设备的处理速度。

2、数据帧

I2C 协议以主从(控制器-外设)配置运行,因此总线上的读/写权限仅由主机拥有。 主机决定哪个从机将接收或发送数据给主机。 I2C有专门的数据帧,可以与总线上最多128个设备进行通信。

在这里插入图片描述

图2 I2C数据帧

启动条件

在通信空闲状态下,SDA和SCL线被上拉。 为了启动通信,主设备将 SDA 线拉低,同时 SCL 线仍为高电平,并提醒总线上的从设备准备好进行通信。

寻址从机

在这个启动条件之后,主设备向它想要与之通信的从设备发送一个 7 位地址。 该地址由连接到总线的所有设备读取,并且具有该地址的设备响应主设备的请求。

读/写操作

7 位地址后面跟着一个 R/W 位 - “1”用于读取操作,“0”用于写入操作。 R/W 决定谁将接管 SDA 线进行数据传输,主机还是从机。 读写操作都是从master角度进行的,如下:

  • 读取操作 - 主设备将接收从设备发送的数据,因此也称为从总线读取。
  • 写操作 - 主机将数据传输到从机。 因此它被称为写入总线。

需要注意的是,是主机(而不是从机)在 SCL 线上产生时钟信号来采样 SDA 线上的数据。

应答/不应答

为了检查从机是否连接到总线或者是否忙,主机等待从机的确认,即主机等待从机在第 9 个时钟周期将 SDA 线拉低。 如果满足这样的条件,主设备会收到从设备的肯定响应,称为 ACK。 但如果SDA线在第9个时钟周期保持高电平,则称为NACK。 这种机制使主机能够检查具有给定地址的从机是否存在于总线上。 ACK/NACK 的另一个用途是确定从设备是否已接收到传输的比特而没有任何错误。

3、数据操作

主机发送或接收的数据是正在执行通信的实际数据。 数据帧的所有其他部分都是协议的支持机制。 正如前面提到的,有两种操作:写和读。

写操作

首先,主机通过发送 7 位地址来对总线上的从机进行寻址。 如果从设备在总线上存在或处于活动状态,它就准备好传输。 之后,主设备发出W位,通知从设备主设备将接管SDA线并向从设备发送数据。 主设备在下一个时钟周期等待从设备的 ACK。 收到从机的 ACK 后,主机在每个时钟周期逐位发送“数据”。 主设备将数据写入总线,因此在 I2C 协议中称为“写”操作。

读操作

如果主机想要接收来自从机的数据,它会在总线上寻址从机并发送一个 R 位,并等待来自从机的 ACK。 收到从机的 ACK 后,主机允许从机接管 SDA 线,向主机传输数据。 这里主机从总线读取数据,因此这在 I2C 协议中称为“读”操作。

与 UART 相比,使用 I2C 的优点之一是通信由主机保持活动状态,并且在所有数据传输完成之前无需重新初始化通信,这意味着可以传输的位数没有限制。 每个数据帧传输。 例如:如果主机要向从机写入32位数据,则无需启动和结束通信4次(一次8位)。 在来自从机的每个 ACK 之后,可以将另一个 8 位块发送到从机。 与 UART 不同,I2C 减少了每个数据帧的起始位和停止位造成的开销。 但是,如果我们想将操作模式从读更改为写,或者反之亦然,则需要结束该帧。

除了减少位开销之外,ACK/NACK 还可以用作 I2C 总线中的错误检查机制。 对于写操作,如果主设备收到从设备的 NACK,则会重新发送数据到从设备。 如果主设备从从设备读取数据时收到 NACK,则主设备会丢弃已接收到的位。

停止条件

传输完成后,主机通过在 SCL 为高电平时将 SDA 线从低电平更改为高电平来发出停止条件。 这完成了事务并使通信回到空闲状态。

至此,我们完成了 I2C 数据帧及其所有部分的解释。 但这还不是全部。 I2C 提供了一些非常酷的功能,对于创建强大的系统非常有帮助。 并非所有 I2C 设备都支持这些功能,但需要注意它们。

4、时钟拉伸(Clock Stretching)

前面提到,I2C 通信设备支持的比特率不一定是设备的数据处理速度。 那么,如果主设备向从设备请求一些数据而从设备尚未准备好所请求的数据怎么办? 由于主设备将在下一个时钟周期期待从设备的 ACK,并且如果从设备未能将 SDA 线拉低,则主设备将认为通信失败。 为了克服通信中的这一限制,从设备使用“时钟拉伸”来通知主设备它正忙并且需要更多时间来处理数据。 从机通过将 SCL 线拉低来实现此目的,这会停止通信,因为 I2C 中的数据采样是在 SCL 线的上升沿完成的。 并非所有 I2C 设备都支持时钟拉伸; 因此,需要设备的数据表来验证这一点。 有时这也会引起问题,因为如果设备出现故障,并保持 SCL 线拉低,整个总线就会停止,主设备无法与其他从设备通信。

在这里插入图片描述

图3 时钟拉伸实现

5、总线仲裁

I2C 总线支持多个主设备,并且可以与连接到总线的所有设备进行通信。 连接在总线上的主设备不断监视 SDA 和 SCL 线路的启动和停止条件,并保持挂起的传输,直到总线再次空闲。 这就是它们在同一总线上并发操作的方式,但可能存在传输由两个主机同时发起的情况。 为了避免这种情况,总线上的主设备不断监视 SDA 线,以检查 SDA 线是否被另一个主设备拉低。 如果其中一个在本应为高电平时检测到 SDA 为低电平,则它会断定另一个主机当前处于活动状态并立即终止自己的传输。 该过程称为总线仲裁。

在这里插入图片描述

图4 I2C中的总线仲裁

如上图所示,Master A和Master B同时发起数据传输。 然而,Master B 设法将 SDA 线拉低,而 Master A 希望 SDA 线拉高。 Master A 检测到这种冲突,并失去仲裁权,即不再控制 SDA 线。

6、权衡:功率与速度

更高的比特率对于现代通信系统非常重要。 为了快速处理数据,还需要快速从从站获取数据。 I2C 支持每秒 3.2Mbits 的比特率。 这意味着 I2C 线每秒将在高电平和低电平之间改变状态 320 万次。 由于 PCB 走线或用于通信的电线上的高电容,使得线路的这种快速切换变得困难,并且时钟线路的上升时间增加。 上升时间是线路从逻辑低电平转换到逻辑高电平所需的时间。 下面是线路中每个电容的上升时间差异的示例。 红色波形的电容为 30nF,因此与电容为 1nF 的绿色波形相比,其上升速度要慢得多。

在这里插入图片描述

图5 电容对上升时间的影响

为了解决时钟信号上升时间增加的问题,使用阻值低于4.7 kΩ的上拉电阻。 这允许更多电流在线路中流动,但这会增加 I2C 线路的功耗。 因此,该协议中需要在速度和功耗之间进行权衡,因为随着速度的提高,功耗也会增加。

7、总结

I2C 广泛用于将传感器分线、存储设备、显示器和其他从设备连接到微控制器 - 因为它需要最少的硬件连接。 由于它在爱好者社区中很受欢迎,因此用于实现和调试该协议的资源非常丰富。 我们希望本文能让您清楚地了解 I2C 的工作原理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1039771.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TS编译选项——TS代码错误不生成编译文件

一、TS不生成编译文件 在tsconfig.js文件中配置noEmit属性 {"compilerOptions": {// outDir 用于指定编译后文件所在目录"outDir": "./dist", // 将编译后文件放在dis目录下// 不生成编译后的文件"noEmit": true,} } 二、TS代码错…

看到一个外贸经典案例, 分享一下

最近看到一个经典案例,案例可能没有多少新奇,但是大家的评论以及给出的解决方案却能给我们很多启发,一个事情要从多方面去进行假设然后一一排除去找到最合适的解决方法, 下面,让我们一起来看看这个外贸小伙伴遇到的问…

《你好,C语言》:从另一个视角学习并重新审视C语言的意义

《你好,C语言》:从另一个视角学习并重新审视C语言的意义 尽管C语言诞生了这么多年,但是它依然活跃在开发者一线,不可否认的是C语言的确有它独特的魅力。本文将从一个全新的视角,重新带领大家学习领悟C语言的奥秘&#…

[XR-FRAME] 1.O3 文档导览 || XR-FRAME / 有点寡淡,加上图像

开始 | 微信开放文档 文档导览 - XR-FRAME / 有点寡淡&#xff0c;加上图像 。 文档导览&#xff0c;知识点整理。 加入纹理 &#xff1a; 新学习标签&#xff1a; <xr-assets bind:progress"handleAssetsProgress" bind:loaded"handleAssetsLoaded…

TS编译选项——编译TS文件同时对JS文件进行编译

一、允许对JS文件进行编译 我们在默认情况下编译TS项目时是不能编译js文件的&#xff0c;如下图中的hello.js文件并未编译到dist目录下&#xff08;这里配置了编译文件放到dist目录下&#xff09; 如果我们想要实现编译TS文件同时对JS文件进行编译&#xff0c;就需要在tsconfi…

GIS基础教程之坐标系

本教程从以下几个方面入手&#xff1a; 坐标系的基本概念 地理坐标系 投影坐标系 如何选择坐标系 根据研究区域大小 根据研究目的&#xff08;等角&#xff1f;等面积&#xff1f;等距离&#xff1f;其他&#xff09; 推荐一个在线坐标系选择网站 GIS坐标系几种情况 数…

【dbeaver】win环境的kerberos认证和Clouders集群中Kerberos认证使用Dbeaver连接Hive和Phoenix

一、下载驱动 cloudera官网 1.1 官网页面下载 下载页面 的Database Drivers 挑选比较新的版本即可。 1.2 集群下载 Hive可能集群没有驱动包。驱动包名称&#xff1a;HiveJDBC42.jar。41结尾的包也可以使用的。注意Jar包的大小一定是十几MB的。几百KB的是thin包不可用。 …

nginx(七十九)nginx与tls/ssl续

一 nginx与tls/ssl续 说明&#xff1a; 本文是基于tls/ssl学习之后,对之前所写tls/ssl博客的补充,重复的不再啰嗦curve: [椭圆] 曲线补充&#xff1a; 会不定期的补充教育&#xff1a; 解决问题为出发点,不要停留在理论上​遗留&#xff1a; wiresahrk分析TLS 1.2 1.3 握手各…

win11系统固定到快速访问的文件夹无法调整顺序的问题

最近在使用win11系统时&#xff0c;固定到快速访问的文件夹无法调整顺序。网上搜了一大圈没有对应的解决方法&#xff0c;柳暗花明&#xff0c;在博主yin0hao的一篇文章中找到了类似的&#xff0c;跟着做了一下&#xff0c;结果问题也解决了。在此记录。 在文件资源管理器地址…

关于10万并发压测时弹性扩容失效问题回答

之前压测过2万用户在30秒内每个用户每秒5次请求&#xff0c;OPS大概在3千左右&#xff0c;但是弹性伸缩虽然在扩容预期值的时候很给力&#xff0c;也能将新加的服务器添加到负载均衡中&#xff0c;但是当cpu使用率超过80%的时候&#xff0c;我其实是有配置报警任务的&#xff0…

MySQL:基础操作(1)

下载配置mysql MySQL&#xff1a;码包安装mysql&#xff08;5.6.51&#xff09;_鲍海超-GNUBHCkalitarro的博客-CSDN博客https://blog.csdn.net/w14768855/article/details/133186897?spm1001.2014.3001.5501 初始登录MySQL mysql -u 用户名 [-p] 一开始什么都没设置 mysql…

MIPI协议介绍-CPHY

MIPI协议概述 MIPI(Mobile Industry Processor Interface): 是MIPI联盟发起为移动应用处理器制定的开放标准.MIPI接口协议层主要包括CSI和DSI两种,其中CSI主要用于图像输出&#xff0c;如图像传感器等&#xff1b; DSI主要用于图像输入&#xff0c;如屏幕显示器等.对于camera而…

AUTOSAR扫盲贴--不是黑神话【基本概念和方法论】

猴子纵有72搬变化,也跳不出如来的手掌 目录 1. 引言 2. AUTOSAR的基本概念 2.1. AUTOSAR的架构和组成部分 2.2. AUTOSAR的规范和

验证和观察Activity生命周期【Intent跳转】

创建测试项目&#xff0c;验证和观察Activity生命周期&#xff0c;使用Intent实现Activity之间的跳转&#xff1a; 1、创建TestActivity项目&#xff1b; 2、创建SecondActivity及相应布局&#xff1b; 3、在MainActivity和SecondActivity中重写onStart()、onResume()等生命…

Momentum Contrast for Unsupervised Visual Representation Learning 论文学习

1. 解决了什么问题&#xff1f; 非监督学习在自然语言处理非常成功&#xff0c;如 GPT 和 BERT。但在计算机视觉任务上&#xff0c;监督预训练方法要领先于非监督的方法。这种差异可能是因为各自的信号空间不同&#xff0c;语言任务有着离散的信号空间&#xff08;单词、短语等…

机器学习总结

对以下文章机器学习总结 什么是深度学习?最易懂的机器学习入门文章-CSDN博客 人工智能和机器学习之间的关系 人工智能是一个最宽泛的概念&#xff0c;是一个研究领域&#xff0c;同时也是一个实现目标&#xff0c;而机器学习则是实现这一目标的一类方法。深度学习只是机器学…

N9000A 安捷伦Agilent信号分析仪

181/2461/8938利用先进的低成本信号分析工具&#xff0c;轻松完成基本的信号表征 借助可选的内置跟踪发生器&#xff0c;可以执行经济高效的激励响应测量 通过 X 系列测量应用软件增添重要功能 可以在射频和微波教育实验室中与培训套件结合使用&#xff0c;通过实践练习加深…

基于微信小程序的数学辅导系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言用户微信端的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考论文参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉…

wepack打包生产环境使用http-proxy-middleware做api代理转发的方法

首先安装http-proxy-middleware依赖&#xff0c;这个用npm和yarn安装都可以。 然后在express服务器的代码增加如下内容&#xff1a; const express require("express"); const app express(); const { createProxyMiddleware, fixRequestBody, } require("h…

初识C语言——详细入门(系统性学习day4)

目录 前言 一、C语言简单介绍、特点、基本构成 简单介绍&#xff1a; 特点&#xff1a; 基本构成&#xff1a; 二、认识C语言程序 标准格式&#xff1a; 简单C程序&#xff1a; 三、基本构成分类详细介绍 &#xff08;1&#xff09;关键字 &#xff08;2&#xf…