I2C中为什么线与?为什么要有上拉电阻?

news2024/11/18 3:26:07

1、为什么采用漏极开路?

        首先,连接到 I2C 上的设备是开漏输出的。以漏极开漏输出(OD)为例,是指将输出级电路结构改为一个漏极开路输出的 MOS 管。这样做的好处在于:

  • 防止短路。
  • 可以实现“线与”逻辑,可以减少一个与门的使用,简化电路。

结论:I2C支持多个主设备与多个从设备连接在同一根总线上,如果不开漏输出,会出现短路现象。

2、为什么要加上拉电阻?

但是,采用开漏输出时,如果没有上拉电阻的存在,只能输出低电位,无法输出高点位。

结论:连接上拉电阻后,才可以输出高电位。

在验证 I2C 接口时,我们同样要对上拉电阻做处理。如下:以从端驱动 SDA 和 SCL 为例

从端对SDA/SCL线的驱动:

assign SCL = scl_slave === 0 ? 1'b0 : 1'bz ;
assign SDA = sda_slave === 0 ? 1'b0 : 1'bz ;

也就是说:

  • 当从端驱动 SDA/SCL 为低(0)时,从端会直接给 SDA/SCL 一个0值;
  • 如果从端驱动 SDA/SCL 不为低(0)时,从端会给 SDA/SCL 一个高阻态值。

为什么是高阻态?而不是直接给高电位(1)呢?

因为高阻态是一个无效驱动,而高电位(1)是一个有效驱动,如果置为1会跟其他的驱动源造成多驱动冲突。为了避免多重驱动的问题,当 Slave 或者 Master 不打算驱动任何一根线时(SDA/SCL),那必须把 SDA/SCL 给一个高阻态(z)值。

经过上拉处理:

如果在整个总线上,master 和 slave 都没有给 SDA/SCL 一个有效驱动(即低电位),会通过上拉电阻将 SCL/SDA置为高电位(1)。

注意:这个给的高电位(1)是一个弱信号,可以防止形成多驱动源造成冲突。

assign (week0,week1) SCL = enable_pullup_registor ? 1: 0;
assign (week0,week1) SDA = enable_pullup_registor ? 1: 0;

举个例子:

I2C支持多主设备与多个从设备,下面 master1 给 slave1 发送一个从地址(0110 011),master2 给 slave2 发送一个从地址(0110 001),

在这里插入图片描述

解释上图中的例子:

  • 当 master1 发送最后一个R/W位 = 0 时,此时,会直接将SDA线拉低,slave1 可以看到SDA线为低。
  • 当 master2 发送最后一个R/W位 = 1 时,此时,master2 会给 SDA一个高阻值(Z),表明 master1 不对总线SDA做驱动,此时上拉电阻会将SDA信号线置为1(弱信号),slave2 看到的是SDA为高。

3、为什么要线与?      

        现在,我们已经知道了 I2C 为什么要漏极开路和添加上拉电阻的目的了,那么又为什么要线与?I2C 支持多个主设备与多个从设备连接在同一根总线上,如果多个设备同时占用总线,怎么判断谁先占用总线呢?所以就需要一种仲裁机制。I2C 没有 Arbiter 直接的来处理仲裁,而是通过线与的逻辑实现仲裁。

仲裁过程:当主设备A准备占用I2C时,需要在SCL为高时,将SDA拉高,再拉低,满足一个启动条件。当主设备A将SDA拉高后,需要检查SDA的电平:

  • 如果此时SDA电平为高,说明主设备可以占用总线,然后主设备A会将SDA拉低,一次满足启动条件,开始传输;
  • 如果此时SDA电平为低,说明总线已经被其他设备占用,主设备A会退出。

为什么SDA为低,就是被其他设备占用了呢?
因为线与逻辑的存在。只有总线上有其他的设备将SDA置为0,线与后,SDA线的电平为0。主设备A检查SDA线的电平时,会发现为低电平。所以仲裁时,哪个设备更早地将SDA线拉低,谁就抢占了优先权。

4、总结全文

  • 漏极开路是为了防止I2C上连接多个主设备与多个从设备时出现短路;
  • 上拉电阻的存在是为了在使用漏极开路之后,可以输出高电平;
  • “线与”是为了在多个主设备同时占用总线时,具有仲裁的能力。
     

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

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

相关文章

移动DICT项目是什么?

DICT项目 我们运营商的伙伴,很多人都知道我们的DICT,但是大家知不知道什么是DICT。你想一想,所谓的DICT,就是指的大数据技术与IT和CT的深度融合。 实际上,DICT的可以拆分成三个词, 第一个DT&#xff0c…

腾讯服务器CentOS Stream 8安装redis详情的步骤

tencent服务器安装的系统版本创建一个新的文件夹 /athena/redis mkdir /athena cd /athena mkdir redis1、切换到 “redis” 目录: cd /athena/redis2、使用 YUM 包管理器安装 GCC、C 和 Make 软件包: yum install gcc-c make -y这条命令将使用 YUM …

C++【set 和 map 学习及使用】

✨个人主页: 北 海 🎉所属专栏: C修行之路 🎃操作环境: Visual Studio 2019 版本 16.11.17 文章目录 🌇前言🏙️正文1、预备知识1.1、关联式容器1.2、键值对1.3、树型结构的关联式容器 2、set2.…

网工内推 | 网络运维专场,弹性工作,14薪

01 南凌科技股份有限公司 招聘岗位:网络运维工程师 职责描述: 1、负责及时响应客户需求、做好客户报障接收,受理与记录工作,及时做好值班记录与故障交接; 2、通过网管平台实时监控客户线路及机房设备的运行状态、性能…

mNGS 02:SnakeMake流程简介

<~生~信~交~流~与~合~作~请~关~注~公~众~号生信探索> 流程代码在&#xff1a;https://jihulab.com/BioQuest/SnakeMake-mNGS 或https://github.com/BioQuestX/SnakeMake-mNGS 教程链接在&#xff1a;https://doc.bioquest.cn/mngs mNGS Pipeline summary Metagenomic nex…

我的世界(MC) Forge 1.20.1 服务端搭建教程

Debian系统使用MCSManager9面板搭建Minecraft Java版MOD服务器的教程&#xff0c;本教程用的Forge1.20.1服务端&#xff0c;用其他服务端的也可以参考一下。 本教程使用Docker来运行mc服&#xff0c;可以方便切换不同Java版本&#xff0c;方便安装多个mc服版本。 视频教程&am…

【网络技术】什么是DNS及常见问题

序言 域名服务器&#xff08;Domain Name Server&#xff0c;DNS&#xff09;是一种用于存储和管理域名解析信息的服务器。它们负责将易于记忆的域名&#xff08;例如 www.example.com&#xff09;转换为与之关联的 IP 地址&#xff08;例如 192.0.2.1&#xff09;&#xff0c;…

基于M300仿地飞行,D2Pros “房地一体”免像控验证

引言 目前&#xff0c;倾斜摄影技术被广泛运用于“房地一体”项目。但在云贵川某些地形起伏较大的地区&#xff0c;运用这项技术还存在一些困难。地形高差太大导致建模精度不够&#xff0c;这是让很多客户感到头疼的问题。 同时&#xff0c;采用分层飞行或者参考最高点加大重…

2023全球数字经济大会——开放原子全球开源峰会观后感及总结

目录 前言 什么是开源&#xff1f; 主会场院士及企业领导的主要观点 展台街采环节互动&#xff08;仅代表个人观点&#xff09; 软硬协同开源分论坛精华观点 1.加速迈入云原生时代-英特尔携手合作伙伴的技术创新与实践 2.英特尔Linux操作系统及12种解决方案示例 3.英特尔基础软…

深度学习--常见激活函数的实现

常见激活函数 简介激活函数的初衷激活函数必须是非线性函数 常见的激活函数与实现Step跃阶函数公式优点缺点应用场景代码实现效果图 Sigmoid函数与代码实现公式Sigmoid函数优点Sigmoid函数缺点代码实现效果图 ReLu公式优点缺点代码效果图 LeakyReLU公式优点缺点代码效果图 tanh…

快速构建机器学习Web应用的神器:Gradio

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

FreeRTOS实时操作系统(一)RTOS的基本概念

文章目录 前言操作系统分类编程风格纠正FreeRTOS介绍任务调度方式任务状态 总结 前言 最近买了把75系列的机械键盘&#xff0c;没有数字区域&#xff0c;想起来稚辉君曾经做过一把客制化键盘&#xff0c;于是下载了资料准备学一学&#xff0c;网上很多开源的都是用的ATMEGA32U…

面试专题:Redis

1.redis简介 简单来说 redis 就是一个数据库&#xff0c;不过与传统数据库不同的是 redis 的数据是存在内存中的&#xff0c;所以存写速度非常快&#xff0c; 因此 redis 被广泛应用于缓存方向。另外&#xff0c;redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不…

Redis入门 - Redis Stream

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis入门 - Redis Stream | CoderMast编程桅杆Redis入门 - Redis Stream Redis Stream 是 Redis 5.0 版本新增加的数据结构。 Redis Stream 主要用于消息队列&#xff08;MQ&#xff0c;Message Queue&#xff09;&#xf…

【Spring】— Spring MVC入门

目录 Spring MVC入门1.Spring MVC概述2.案例——第一个Spring MVC应用1.创建项目&#xff0c;引入JAR包2.配置前端控制器3.创建Controller类4.创建Spring MVC的配置文件&#xff0c;配置控制器映射信息5.创建视图&#xff08;View&#xff09;页面6.启动项目&#xff0c;测试应…

Axios异步调用

promise 主要解决异步深层嵌套的问题 promise 提供了简洁的API 使得异步操作更加容易 1. Promise 基本API //实例方法 .then() //得到异步任务正确的结果 .catch() //获取异常信息 .finally() //成功与否都会执行&#xff08;不是正式标准&#xff09; 2. axios基本使用 …

window服务器环境将springboot项目 jar包注册成一个window服务自启动

目录 1.下载WinSW工具 2.新建一个Window Service信息的xml文件 3.将xml和exe重命名 4.安装卸载服务 5.修改配置文件 6.常用命令(注意winsw是exe名字 1.下载WinSW工具 下载winswhttps://github.com/winsw/winsw/releases 2.新建一个Window Service信息的xml文件 <!--…

OpenCV 笔记_3

文章目录 笔记_3直方图匹配(直方图规定化) 主要针对单通道图像模板匹配matchTemplate 模板匹配函数 图像卷积filter2D 卷积函数 过滤器图像噪声的产生cvflann::rand_double 产生随机浮点数在&#xff08;0~1&#xff09;之间cvflann::rand_int 产生随机整数在&#xff08;0~RAN…

最受欢迎的项目管理软件大揭秘!

项目管理软件是现代化项目管理的重要工具。这种软件可以帮助管理项目进度、资源、预算等方面的事项&#xff0c;以及项目团队之间的沟通和协作。目前市面上有很多不同的项目管理软件&#xff0c;如&#xff1a;Zoho Projects、Wrike、Asana、Trello、Basecamp、Jira等等。然而&…

操作系统-文件管理-文件系统基础

目录 一、文件的概念 文件地属性 文件的基本操作 二、文件的逻辑结构 2.1顺序文件 2.2索引文件 2.3索引顺序文件 2.4文件的目录 2.4.1文件控制块FCB 2.4.2目录结构 2.4.3索引结点(FCB改进) 三、文件保护 3.1口令保护 3.2加密保护 3.3访问控制 四、物理结构 4.1连…