I2C接口与SPI和UART接口的区别

2023-11-18

一、SPI  I2C UART通信速率比较:
SPI > I2C > UART
1、同步通信>异步通信;
2、同步通信时必须有一根时钟线连接传输的两端;
3、都是串行通信方式,并行通信用于内部存储间的通信,如flash;
4、适合传输的距离和通信速率成反比关系;
3-SPI:两条合一的数据线、1时钟线、1CS(设备片选线)  
SPI:2数据线、1时钟线、1CS(设备片选线 )/串行 同步 通信全双工
I2C:1数据线、1时钟线/串行 同步 通信半双工  传输距离比UART短
UART:2数据线、       1地线/串行 异步 通信全双工  传输距离比I2C长些
(I2C接口是“器件间”接口,是在一块板子之内传输数据)
(UART是  “设备间”接口,更多的是用于两台设备之间传输数据

二、串行和并行、同步和异步的区别:


串行通信:利用一条数据线将数据一位一位的顺序传送,特点是通信线路简单,成本

低,适合于长距离传送


并行通信:利用多条数据线将数据的各位同时传送,特点是传输速度快,适合于短距离

传送

 

异步:在一个字符的传输时间范围内保持同步即可


同步:在数据传输过程中,需要一根时钟线同步,IIC总线,SPI总线


三、I2C接口与串行接口的区别:


I2C   两线式串行总线

UART 通用串行异步收发器    串口

     UART是串行异步通信接口,它包括RS232、RS499、RS423、RS422和RS485等接口规范和

标准规范,即
UART串行异步通信口的总称。

有很大方式的不同。譬如i2c是带地址的通讯,支持多方通讯,串口就搞不定;两者通讯的机制原理也不同;另

外速度上I2C相对会快一些,好像i2c是philips发明的,目的就是解决速度的瓶颈。网上有很多资料,自己搜一下吧!

 

1、I2C接口是"器件间"接口,是在一块板子之内数据的,RS232串行接口是"设备间"接口,更多的是用于两台设备之间传        输数据。



2、从传输数据的距离来说,应该是RS232传输的距离较远,但二者具体差别多少,我没有做过专门的试验。



3、串口是一根线传送数据,一根线接收数据


      I2C是一根线是时钟线,一根线是数据线,数据线是双向的,可以接收,也可以发送。


 

4、协议不同,波特率不同

     串行接口,像单片机,时钟由内部MCU提供,而I2C接口要由器件来决定,不能太快。


 
5、I2C是同步串行传输,RS232(或称UART,通用异步收发器)是异步串行传输。



6、同步方式必须有一根时钟线连接传输的两端,i2c里的scl就是这根时钟线。因为同步方式不用花费额外的开销对其       数据,所以其传输速率一般比异步方式高。



四、总线接口 UART I2C SPI USB的异同点


  
1、UART 通用异步串行口,速率不快,可全双工,结构上一般由波特率产生器、UART发送器、UART接收器组成,

硬件上两线,一收一发。


2、SPI 高速同步串行口,高速,可全双工,收发独立,同步接口,可实现多个SPI设备互联,硬件4条线。

 
3、I2C 双向、两线、串行、多主控接口标准。速率不快,半双工,同步接口,具有总线仲裁机制,非常适合器件间

近距离经常性数据通信,可实现设备组网。

 
4、USB 通用串行总线,高速,半双工,由主机、hub、设备组成。设备可以与下级hub相连构成星型结构。



五、串口通信:UART、SPI、I2C区别:



1、UART就是两线,一根发送一根接收,可以全双工通信,线数也比较少。数据是异步传输的,对双方的时序要求比

较严格,通信速度也不是很快。在多机通信上面用的最多。


2、SPI接口和上面UART相比,多了一条同步时钟线,上面UART的缺点也就是它的优点了,对通信双方的时序要求不

严格不同设备之间可以很容易结合,而且通信速度非常快。一般用在产品内部元件之间的高速数据通信上面,如大容

量存储器等。


3、I2C接口也是两线接口,它是两根线之间通过复杂的逻辑关系传输数据的,通信速度不高,程序写起来也比较复

杂。一般单片机系统里主要用来和24C02等小容易存储器连接。


SPI:高速同步串行口。3~4线接口,收发独立、可同步进行


UART:通用异步串行口。按照标准波特率完成双向通讯,速度慢


SPI:一种串行传输方式,三线制,网上可找到其通信协议和用法的3根线实现数据双向传输串行外围接口 

(Serial peripheral  Interface)




UART:通用异步收发器

UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计

算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能:


1、将由计算机内部传送过来的并行数据转换为输出的串行数据流。

2、将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。

3、在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。

4、在输出数据流中加入启停标记,并从接收数据流中删除启停标记。

5、处理由键盘或鼠标发出的中断信号(键盘和鼠票也是串行设备)。

6、处理由键盘或鼠标发出的中断信号(键盘和鼠票也是串行设备)。

7、可以处理计算机与外部串行设备的同步管理问题。

8、有一些比较高档的UART还提供输入输出数据的缓冲区,现在比较新的UART是16550,它可以在计算机需要处理

       数据前在其缓冲区内存储16字节数据,而通常的UART是8250。

9、现在如果您购买一个内置的调制解调器,此调制解调器内部通常就会有16550 UART。


I2C: 

能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C是多主控总线,所以任何一个设备都能像

主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作

为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存。


I2C总线:
I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了

电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率

支持40个组件。I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都

可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。


UART:

单端,远距离传输。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很

GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。串口通信的概念非

常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送

数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备

线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。具体的适用范

围就可多了,军用,医疗...到处到能用。


第一个区别当然是名字:
     SPI(Serial Peripheral Interface:串行外设接口);
     I2C(INTER IC BUS:意为IC之间总线)
     UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)


第二,区别在电气信号线上:


     SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现多个

SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主

从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。

     如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而

定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。


     I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在

器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
     如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。(注:

I2C资料了解得比较少,这里的描述可能很不完备)


     UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传

输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
     显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。


第三,从第二点明显可以看出,SPI和UART可以实现全双工,但I2C不行;


第四,看看牛人们的意见吧!


     wudanyu:I2C线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支

持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI

实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协

议。
     quickmouse:I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

I2C接口与SPI和UART接口的区别 的相关文章

  • springCloud-系统学习3- 创建微服务工程2

    2 11 Feign应用 是对下面代码的优化 自动根据参数拼接http请求地址 2 11 1 操作 效果 2 12 Feign负载均衡及熔断 Feign集成了ribbon配置项和Hystrix熔断的Fallback配置项 可以使用Feign
  • 基于ARM编译安装docker-harbor

    基于ARM编译安装docker harbor 一 编译内核 此举是为了保证redis镜像可以正常启动 1 安装依赖 yum y install gcc bc gcc c ncurses ncurses devel cmake elfutil
  • Python3 类型转换

    INT 支持转换为INT类型的 仅有 float str bytes 其他类型均不支持 float gt int 会去掉小数点及后面的数值 仅保留整数部分 int 12 94 12 str gt int 如果字符串中有数字 0 9 和正负号
  • 将yyyy-MM-dd hh:mm:ss转化为yyyy-MM-dd

    Date currentTime new Date SimpleDateFormat formatter new SimpleDateFormat yyyy MM dd Date strtodate String datas try str
  • Java异常和处理机制

    棒棒有言 追逐梦想的过程就像是一个人在走一条黑暗 幽深而又漫长的隧道 多少次跌倒又爬起 经历了多少个暗无天日的黑夜与白天 一路上沉淀着难以计数的汗水与泪水 不断地自我暗示 只要自己坚持 只要勇敢地一向往前走 就必须能找到出口 必须会看到光明
  • 读书笔记 摘自:《思维导图攻略:快速上手与落地实践》

    思维导图攻略 快速上手与落地实践 王健文 出版 2019 01 01 7 3万字 内容提要 无落地 不导图 思维导图的学习并不在于思维导图的绘制本身 而是在于实际应用和思维提升 第一章 精英人士自我提升的思维利器 第一节 提升大脑学习力的秘
  • 广州华锐互动:利用VR复原文化遗址,沉浸式体验历史文物古迹的魅力

    在过去的几十年里 科技发展飞速 为我们打开了无数新的视角和可能性 其中 虚拟现实 Virtual Reality 简称VR 技术的崭新应用 为我们提供了一种全新的 近乎身临其境的体验历史的方式 本文将重点探讨VR技术在复原历史古迹方面的应用
  • How to use tar command to complete file compression and decompression in Ubuntu

    TAR 1 GNU TAR Manual TAR 1 NAME tar an archiving utility SYNOPSIS Traditional usage tar A
  • beam search的例子

    看了一下网上对beam search的讲解 感觉都说的太杂了 我试图用一个最简单的例子来帮助读者理解 见下图 假设我有一个模型 能够根据当前词输出下一个词的概率分布 最后依次这样就能生成一大串文本 以上面的图为例 The 的下一个词的最大概
  • Spring StateMachine使用笔记

    Spring StateMachine使用笔记 配置状态机 状态 分层状态 withStates 配置状态 states状态列表 可以使用多个withStates进行parent分层 配置区域 当相同的分层状态机具有多组状态时 每个都具有初
  • 系统移植开发阶段部署

    开发阶段部署阶段 uboot镜像 ubootpak bin flash SD linux内核镜像 uImage tftp下载 根文件系统 rootfs nfs挂载 本文操作需要用到uboot命令进行镜像搬移和根文件系统挂载 uboot中常用
  • EPS学习笔记3----------常用地物采集方法(房屋,斜坡,台阶)

    1 三维模型中房屋绘制方法 面状地物 五点房 不会自动弹出房屋属性录入窗口 任意绘制法 绘制结束弹出房屋属性录入窗口 多点法 1 首先在房屋某一面用鼠标左键选择一点 2 鼠标移到房屋屋檐处 利用shift A将前一节点高程移到屋檐高程 3
  • 前端开发常见面试题第三篇(Vue和React)

    文章目录 1 Vue中直接获取组件内的DOM元素或子组件实例 2 生命周期 3 双向绑定原理 4 v if和v show的区别 5 Vue导航钩子 6 路由跳转的方式 7 vuex常用的是什么 怎么使用 8 父子组件之间通信 9 跨域处理
  • Java排序算法:选择排序

    Java排序算法 选择排序 选择排序它的主要思想是 在未排序的数组中选择最小的元素 然后将其放置在数组的起始位置 再在剩余的未排序数组中选择最小元素 并将其放置在已排序部分的末尾 重复此过程 直到整个数组排序完成 选择排序的步骤如下 1 从
  • 15款业界公认的最佳视频处理软件

    因为需要购买昂贵的视频处理软件和高性能图形计算机 所以视频处理是一项比较耗费金钱的技术活 正是由于这样 一部分人选择使用性能较好的免费在线编辑软件 无需太多视频处理知识便可在浏览器中剪切和编辑视频 然而 当我们无法连接网络或网络很慢的时候
  • IC卡片使用基础

    一 卡片基本概念 集成电路卡 即日常生活中常使用的卡片 可以根据读写特性分为两类 ID卡和IC卡 ID卡 全称身份识别卡 是一种不可写入的感应卡 含固定编号 卡内除了卡号外 无任何保密功能 其 卡号 是公开 裸漏的 IC卡 带有存储器 又称
  • redis缓存击穿、缓存穿透、缓存雪崩、缓存一致性解决方案的代码实现

    1 0 缓存击穿 概念 一些redis的key过期 同时大量数据请求过期的key或者redis不存在的key 导致大量请求打到数据库 导致数据库瘫痪 解决方案 1 设置热点数据永不过期 2 对热点数据加锁 分布式锁 代码实现 初始化项目 商
  • 【笔记】有点麻烦的MatConvNet的dagnn的debug过程

    尝试用MatConvNet训练 然而遇到了以下bug 一脸懵逼折腾了四天 No public property dilate exists for class dagnn Conv Error in dagnn Layer load lin
  • javaweb课程设计之商品后台管理系统

    主要技术 layui框架 html5 jsp oracle数据库 servlet session filter 功能说明 基于java开发的商品管理系统 管理员在后台进行添加商品 修改商品 删除商品 批量删除商品 设置商品上下架功能等 完美

随机推荐

  • webSocket的使用

    在Spring Boot项目中使用Java WebSocket 添加依赖 在项目的构建文件 如pom xml 中添加Java WebSocket的依赖项 可以使用Java EE的WebSocket API或者其他第三方库 例如 Tyrus
  • MATLAB绘制局部放大图

    在数据处理时 当曲线出现跳变的时间极短 出于观察跳变时间段波形的需要 需要对曲线跳变处进行局部放大处理 本文给出了此种情况下MATLAB绘制局部放大图的流程 同时 当曲线的峰值数据与平均值相差一个数量级时 如峰值12 平均值范围落在是 1间
  • awk内置函数

    http blog csdn net nuoline article details 8610679
  • 【爬虫进阶】猿人学任务七之字体反爬(难度2.0)

    目录 前言 特此说明 分析 代码过程 成果 完整源码 前言 往期有讲解过某团字体反爬 感觉效果不太好 所以本章重新找了个例子 希望能帮助大家理解透彻 再遇到直接手撕 特此说明 如果涉及到版权问题 请立刻联系博主删除 分析 首先 我们看题目
  • C++实现栈(链表模拟)【每一步详细深入讲解,代码清晰、简单、易懂】

    文章目录 一 利用链表实现栈 1 链表实现的思路 2 设计栈的结构 3 入栈操作 4 出栈操作 5 判断栈空 6 构造析构 7 完整代码 一 利用链表实现栈 1 链表实现的思路 由于栈是一种较为简单的数据结构 用链表实现栈 逻辑上和数组差不
  • 多输入通道和多输出通道

    目录 多输入通道和多输出通道 目录 1 什么是多输入通道和多输出通道 2 多输入通道和多输出通道的实现 2 1 多输入通道和多输出通道的卷积操作 2 2 多输入通道和多输出通道的全连接操作 3 多输入通道和多输出通道的实例 3 1 导入必要
  • 若依SpringBoot+Vue分离版打包部署(前端)

    遇到的问题为vue项目webpack dev server配置后本地连接服务器地址正常请求 但是打包之后请求服务器接口一直是404 Vue前端打包 1 npm run build prod 打包 2 npm run preview 打包正式
  • 【Vue2从入门到精通】深入浅出,带你彻底搞懂Vue2组件通信的9种方式

    文章目录 人工智能福利文章 Vue组件间通信分类 1 props emit 1 1 父组件向子组件传值 1 2 子组件向父组件传值 2 parent children 3 ref refs 3 1 ref作用于组件 3 2 ref作用于Ht
  • FLASH位宽为8、16、32时,CPU与外设之间地址线的连接方法

    原文地址 http www eefocus com E5 8D 83 E9 87 8C E7 9F A5 E9 B9 B0 blog 10 03 186914 04945 html FLASH连接CPU时 根据不同的数据宽度 比如16位的N
  • java BigDecimal保留两位小数

    对于一些精准的数字 如涉及到金额时我们一般会使用BigDecimal类型来保存和处理 在处理保留小数位数时 如果通过DecimalFormat表达式需要注意下 1 通过DecimalFormat保留两位小数 通过上图可以看到 在补位时 如果
  • 文件上传之IIS6.0解析漏洞

    文章目录 1 判断iis版本 2 使用目录解析漏洞 2 1 写asp一句话木马 2 2 bp抓包 2 3 修改上传路径 2 4 实用工具连接 2 5 get shell 3 使用文件解析漏洞 3 1 写一句话马 3 2 上传 3 3 抓包改
  • mmyolo框架实现在VOC数据集上复现Yolov6教程(详细)

    写在开头 最近学习mmyolo的框架 想着它能将所有配置都写在一个config文件里 只需要改配置文件就可以改动模型 感觉挺方便的 就想着Yolov6用mmyolo框架来实现 但mmyolo并没有提供v6的voc实现配置 v5是有的 看下图
  • RocketMQ的消息优先级

    有些场景 需要应用程序处理几种类型的消息 不同消息的优先级不同 RocketMQ是个先入先出的队列 不支持消息级别或者Topic级别的优先级 业务中简单的优先级需求 可以通过间接的方式解决 下面列举三种优先级相关需求的具体处理方法 第一种
  • Linux环境下的jdk安装(大数据环境)

    jdk安装 创建软件存放目录 上传文件 我使用的MobaXterm 创建解压目录 解压jdk压缩包 修改软件名 使他简洁易操作 配置环境变量 让配置文件生效 查看jdk版本信息 将HP01 的usr文件夹整体拷贝到HP02 HP03目录下
  • 如何使用 FreeRTOS中的xQueueCreate,xQueueSend,xQueueReceive

    信号量Semaphore和互斥量mutex 只能用于进程间的同步 并不能传递更多的数据 在freertos 提供了messageQ 用来在实现进程同步的同时 传递数据 进程间通信 或者ISR和TASK之间通信 如果没有messageQ 则只
  • Object&Objects

    Object 概念 Object 是类层次结构的根 每个类都可以将 Object 作为超类 所有类都直接或者间接的继承自该类 换句话说 该类所具备的方法 所有类都会有一份 toString 作用 以良好的格式 更方便的展示对象中的属性值 重
  • c++ Json库读取和写入json文件

    include json include writer h include json include reader h include
  • Fabric中的“账户”体系

    本文的联盟链是以Fabric为例 本文中transaction翻译成事务 而非交易 联盟链相对于公链 最大的不同在于 联盟链上的数据不是对所有人都公开的 只有联盟内的成员才可以访问 写入链上数据 第二个重要的区别 联盟链不发币 所以联盟链里
  • WSL安装与使用(Ubuntu22.04)

    文章目录 概要 WSL介绍 WSL安装 安装环境 安装方式一 命令行安装 不推荐 可能出现奇怪的问题 安装方式二 通过控制面板安装 WSL 安装Ubuntu22 04 通过Microsoft Store Ubuntu更换镜像源 进入Ubun
  • I2C接口与SPI和UART接口的区别

    一 SPI I2C UART通信速率比较 SPI gt I2C gt UART 1 同步通信 gt 异步通信 2 同步通信时必须有一根时钟线连接传输的两端 3 都是串行通信方式 并行通信用于内部存储间的通信 如flash 4 适合传输的距离