SPI,UART,I2C都有什么区别,及其各自的特点

发布者:lidong4069最新更新时间:2020-10-28 来源: eefocus关键字:SPI  UART  I2C 手机看文章 扫描二维码
随时随地手机看文章

区别:

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

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

I2C:一种串行传输方式,三线制,网上可找到其通信协议和用法的 


3根线实现数据双向传输 

串行外围接口 Serial peripheral interface 

UART:通用异步收发器 

UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能: 


将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,并从接收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠票也是串行设备)。可以处理计算机与外部串行设备的同步管理问题。有一些比较高档的UART还提供输入输出数据的缓冲区,现在比较新的UART是16550,它可以在计算机需要处理数据前在其缓冲区内存储16字节数据,而通常的UART是8250。现在如果您购买一个内置的调制解调器,此调制解调器内部通常就会有16550 UART。


I2C:能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。 总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存。


更详细的区别:

第一个区别当然是名字:

     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要少。


SPI、I2C、UART三种串行总线协议的区别


     SPI(Serial Peripheral Interface:串行外设接口)


     I2C(INTER IC BUS)


     UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)


SPI

The SPI includes these distinctive features:


   Master mode and slave mode


   Bi-directional mode


   Slave select output


   Mode fault error flag with CPU interrupt capability


   Double-buffered data register


   Serial clock with programmable polarity and phase


    Control of SPI operation during wait mode


SPI 有两种模式,Normal Mode and Bidirectional Mode,包括以下几根线:


SS      Slave Select


SCK    Serial Clock


MOSI Master Output, Slave Input


MISO Master Input, Slave Output


MOMI Master Output, Master Input


SISO   Slave Input, Slave Output


其中前四根线用于Normal Mode ,常用的也是4根线的Normal Mode 。


MOSI


This pin is used to transmit data out of the SPI module when it is configured as a Master and receive data


when it is configured as Slave.


MISO


This pin is used to transmit data out of the SPI module when it is configured as a Slave and receive data


when it is configured as Master.


SS


This pin is used to output the select signal from the SPI module to another peripheral with which a data


transfer is to take place when its configured as a Masterand its used as an input to receive the slave select


signal when the SPI is configured as Slave.


SCK


This pin is used to output the clock with respect to which the SPI transfers data or receive clock in case of


Slave.


SPI 是一种允许一个主设备启动一个与从设备的同步通讯的协议,从而完成数据的交换。也就是SPI是一种规定好的通讯方式。这种通信方式的优点是占用端口较少,一般4根就够基本通讯了。同时传输速度也很高。一般来说要求主设备要有SPI控制器(但可用模拟方式),就可以与基于SPI的芯片通讯了。


SPI 的通信原理很简单,它需要至少4根线,事实上3根也可以。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时 钟),CS(片选)。其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许 在同一总线上连接多个SPI设备成为可能。


接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原 因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过SDO线,数据在时钟上沿或下沿时改变,在紧接着的下沿或上沿被读取。 完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。


要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。


这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。


SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。


不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。


 

I2C

    只要求两条总线线路:一条串行数据线SDA 一条串行时钟线SCL


    每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址主机可以作为主机发送器或主机接收器


    它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁,防止数据被破坏


    串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 快速模式下可达400kbit/s 高速模式下可达3.4Mbit/s


    片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整


    连接到相同总线的IC 数量只受到总线的最大电容400pF 限制


UART

UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。


显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。


UART常用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。


明显可以看出,SPI和UART可以实现全双工,但I2C不行

关键字:SPI  UART  I2C 引用地址:SPI,UART,I2C都有什么区别,及其各自的特点

上一篇:麻雀虽小 五脏俱全:MCU专用RTOS简述
下一篇:PWM输出引脚重映射

推荐阅读最新更新时间:2024-11-18 15:02

SPI 的主模式和从模式
主机写 从机读 主机读 从机写 数据输出是将数据送到那两根线上,数据采样是将数据从总线上读取到主从机中。 以下内容来源于《51单片机轻松入门—基于STC15W4K系列》第5章 第5章SPI通信 5.1SPI总线数据传输格式 5.1.1 接口定义 SPI是高速、全双向、同步、四线或三线制串行外围设备接口,采用主从模式结构,支持多从机模式应用,一般仅支持单主机,在主机的移位时钟脉冲下,数据按位传输,可以是高位在前(MSB first),低位在后,也可以低位在前,高位在后的顺序发送,目前应用中的数据速率可达5Mbps以上的水平,SPI接口唯一的一个缺点是没有应答机制确认是否接收到数据,但一般的SPI从器件设计都很完善,只
[单片机]
<font color='red'>SPI</font> 的主模式和从模式
I2C总线通信接口的CPLD实现
    摘要: 介绍采用ALTERA公司的可编程器件,实现I2C总线的通信接口的基本原理;给出部分VHDL语言描述。该通信接口号专用的接口芯片相比,具有使用灵活,系统配置方便的特点。     关键词: I2C总线 CPLD VHDL I2C总线是PHILIPS公司开发的一种简单、双向二线制同步串行总线。它只需要两根线(串行时钟线和串行数据线)即可在连接于总线上的器件之间传送信息。该总线是具备多主机系统所需要的包括裁决和高低速设备同步等功能的高性能串行总线,应用极为广泛。 目前,虽然市场上有专用I2C总线接口芯片,但是地址可选范围小,性能指标固定,功能单一,而且使用不方便。针对I2C总线的电气特性及其通信协
[半导体设计/制造]
基于51的IIC通讯原理及协议详解(I2C
IIC 的一些特征: 两条总线:串行数据总线(SDA)和串行时钟总线(SCL) 真正的多主机总线 连接到相同总线的ic数量只受到总线的最大电容400pF限制。 串行8位双向数据在标准模式下可达100K bit/s 快速模式400K bit/s,高速模式下3.4Mbit/s. 数据有效性规定: IIC总线在进行数据传输时,SCL在高电平区间,SDA上的电平必须保持稳定 SDA的数据的高或者低电平状态只有在SCL线的时钟信号是低电平时才能改变。 起始和停止条件: 起始:SCL高电平时,SDA由高电平向低电平切换。 停止:SCL高电平时,SDA由低电平向高电平切换。 模拟时序如下: 起始与终止: 应答与非应答: 总线上进行一次数据传
[单片机]
基于51的IIC通讯原理及协议详解(<font color='red'>I2C</font>)
STM32通过io模拟SPI与ADC124S021通信
/***************************** U11 *********************************/ //extern unsigned int ad_val; unsigned char ch_temp; #define AD_FF 1 #define AD_ZF 2 #define AD_MF 3 #define AD_GM 4 #define ADC124S21_CS_PA4_OUT GPIO_Pin_4 //使用PA4作为输出,控制ADC124S21芯片的片选 #define ADC124S21_CLK_PA5_SCK
[单片机]
单线SPI的在线编程方案
“串口下载”是大多数工程师最早接触的程序下载方式,尤其是一开始使用51单片机的工程师们。随着硬件集成度越来越高,芯片资源不断被压缩,工程师也想到了另一种“串口下载”方式,只需一根数据线即可。 随着半导体行业的飞速发展,芯片集成度越来越高,随之研发设计出来的PCBA大小已经能和硬币比肩,功能却一点都没有受到影响,是如何做到的呢?在不影响功能的情况下尽量裁剪硬件资源,这是每个工程师都头疼的问题,关键在于裁剪后如何保证编程能够正常进行。 编程接口多种多样,包括工程师们熟悉的UART、I2C、SPI、SWD等,一般需要2-6根线进行烧录,而其中有一种编程接口只需要一根数据线即可实现程序的烧写,这对必须尽量压缩硬件资源的工程师来说是
[嵌入式]
单线<font color='red'>SPI</font>的在线编程方案
连接SPI接口器件 - 第一部分
LEC2 Workbench系列技术博文主要关注莱迪思产品的应用开发问题。这些文章由莱迪思教育能力中心(LEC2)的FPGA设计专家撰写。LEC2是专门针对莱迪思屡获殊荣的低功耗FPGA和解决方案集合的全球官方培训服务供应商。 莱迪思CrossLink™-NX FPGA拥有丰富的特性,可加速实现高速和低速接口。本文(系列博文的第一篇)描述了使用CrossLink-NX FPGA连接基于SPI的外部组件。第一篇博文介绍了使用两个时钟域实现连接DAC(亚德诺半导体公司的AD7303 DAC)的SPI接口。第二篇博文将介绍使用单个时钟域实现连接ADC(亚德诺半导体公司的 ADC AD7476)的SPI接口。两个案例中呈现了两种
[嵌入式]
连接<font color='red'>SPI</font>接口器件 - 第一部分
STM32F02R8T6Nuceo板子Uart2串口问题
21IC买了一块1元的活动板子,移植了RTT(RT-THREAD)的国人嵌入式操作系统.系统能够正常跑起来,接着就按照RTT的官网教程,写了一个串口驱动. 原来定义的是UART1的端口,但是没有找到板子的USART1的引脚,虽然STM32可以映射,但是仍然没有看到有甩出来的引脚.初略看了一下官网的使用手册,发现图上有USART2引出来. 上图看一下, 好家伙,那就直接接地,接TX与RX到PC端的USB转串口吧. 杯具来了,发现无论如何自己的程序都没有输出打印,怀疑自己的代码有问题.用mbed的示例BIN文件试试,也发现不行.难道是电平问题?换了别人使用的开发板与PC的USB转串口,oh mygod!!还是不行. 心灰意冷,心灰
[单片机]
具有电隔离、线"或"能力和改善噪声容限的I2C接口
本设计实例描述了一种简单而有效的方法为连接在I 2 C总线上的设备提供光隔离(图1)。这个电路改进了早期的版本。(参考1)。SDA和SCL处在I 2 C总线的主区域。SDA1和SCL1在从设备区域。可以很容易对时钟线路进行光隔离,因为它具有从主设备到从设备的单向性。P沟道MOSFET,Q3为快速光耦合器IC2的LED提供电流,缓冲时钟线路。 但数据线路是双向的。电路的该部分是对称的。电阻R6和R7为IC在总线从设备一侧的上拉电阻,而R3和R1为与位于SDA/SCL一侧平行于主I 2 C上拉电阻的虚拟上拉电阻。如果SDA和SDA1线都为高电平——也就是说,I2C设备没有将其电平拉低——Q1将截止,没有电流流进光耦IC2的发光二极
[应用]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved