0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通信协议比较:USART、I2C、SPI

机智云 2022-08-28 15:12 次阅读

61bc0fd2-24a1-11ed-9ade-dac502259ad0.png通信协议的基本概念

通信协议不难理解,就是两个(或多个)设备之间进行通信,必须要遵循的一种协议。通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。通过通信信道和设备互连起来的多个不同地理位置的数据通信系统,要使其能协同工作实现信息交换和资源共享,它们之间必须具有共同的语言。交流什么、怎样交流及何时交流,都必须遵循某种互相都能接受的规则。这个规则就是通信协议。

61bc0fd2-24a1-11ed-9ade-dac502259ad0.png通讯方式分类

1、按照数据的传送方式划分

串行通讯与并行通讯

串行通讯:指设备之间通过少量数据信号线(一般是 8 根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。

并行通讯:指使用 8、16、32 及 64 根或更多的数据线进行传输的通讯方式,同时传输多个数据位的数据。

两者比较:在数据传输速率相同时,并行效率更高,可以传输更多数据量;而串行通讯节省成本。并行传输对同步要求较高,且随着通讯速率的提高,信号干扰的问题会显著影响通讯性能。比较如下:

61d51ce8-24a1-11ed-9ade-dac502259ad0.png

2、按数据通讯方向划分

全双工、半双工、单工通讯

61eaa8ba-24a1-11ed-9ade-dac502259ad0.png

62105416-24a1-11ed-9ade-dac502259ad0.png

3、按照数据通讯的同步方式/是否使用时钟信号进行划分

同步通讯和异步通讯

同步通讯:收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据。通讯中通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样

623d55d8-24a1-11ed-9ade-dac502259ad0.png

异步通讯:不使用时钟信号进行数据同步,直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据,某些通讯中还需要双方约定数据的传输速率,以便更好地同步。

6254793e-24a1-11ed-9ade-dac502259ad0.png

两者比较:在同步通讯中,数据信号所传输的内容绝大部分就是有效数据,而异步通讯中会包含有帧的各种标识符,所以同步通讯的效率更高,但是同步通讯双方的时钟允许误差较小,而异步通讯双方的时钟允许误差较大。

4、按照通讯速率

比特率和波特率

比特率(Bitrate):每秒钟传输的二进制位数,单位为比特每秒(bit/s)。

波特率(Baudrate):表示每秒钟传输了多少个码元

61bc0fd2-24a1-11ed-9ade-dac502259ad0.png三、串口协议

USART——串口通讯

包括RS232RS499、RS423、RS422RS485接口规范和标准规范

627d2c3a-24a1-11ed-9ade-dac502259ad0.png

串口通讯协议的物理层及协议层:

1、物理层:串口通讯的物理层有很多标准及变种,主要有RS-232标准,一般只使用 RXD、TXD 以及 GND 三条信号线,直接传输数据信号。

2、协议层:串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据

数据校验

奇校验:有效数据和校验位中“1”的个数为奇数;

偶校验:有效数据和校验位中“1”的个数为偶数;

3、USART——通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)

RX、TX

串行通信:以帧格式传输数据,即是一帧一帧的传输,每帧包含有起始信号、数据信息、停止信息,可能还有校验信息。

字符帧:一个字符帧发送需要三个部分:起始位+数据帧+停止位。起始位是一个位周期的低电平,位周期就是每一位占用的时间;数据帧就是我们要发送的 8 位或 9 位数据,数据是从最低位开始传输的;停止位是一定时间周期的高电平。

I2C通讯协议

I2C通讯协议(Inter-Integrated Circuit):由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。

1、物理层:双向串行数据线(SDA),串行时钟线(SCL)

62a27148-24a1-11ed-9ade-dac502259ad0.png

(1) 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中,可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。

(2) 一个 I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。

(3) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。

(4) 总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。

(5) 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。

2、协议层:定义了通讯的起始和停止信号、数据有效性、响应、仲裁时钟同步和地址广播等环节

62c24ea0-24a1-11ed-9ade-dac502259ad0.png

S:传输开始信号;SLAVE_ADDRESS:从机地址;R/W:传输方向选择位,1为读,0为写

A/A:应答(ACK)或非应答(NACK)信号;P:停止传输信号

通讯过程:起始信号产生后,所有从机就开始等待主机紧接下来广播 的从机地址信号(SLAVE_ADDRESS)。在 I2C 总线上,每个设备的地址都是唯一的,当主机广播的地址与某个设备地址相同时,这个设备就被选中了,没被选中的设备将会忽略之后的数据信号。根据 I2C协议,这个从机地址可以是 7位或 10位。在地址位之后,是传输方向的选择位,该位为 0 时,表示后面的数据传输方向是由主机传输至从机,即主机向从机写数据。该位为 1时,则相反,即主机由从机读数据。从机接收到匹配的地址后,主机或从机会返回一个应答(ACK)或非应答(NACK)信号,只有接收到应答信号后,主机才能继续发送或接收数据。

读和写数据:I2C通讯更常用的是复合格式,该传输过程有两次起始信号(S)。一般在第一次传输中,主机通过 SLAVE_ADDRESS 寻找到从设备后,发送一段“数据”,这段数据通常用于表示从设备内部的寄存器或存储器地址(注意区分它与 SLAVE_ADDRESS 的区别);在第二次的传输中,对该地址的内容进行读或写。第一次通讯是告诉从机读写地址,第二次则是读写的实际内容。

(2)通讯的起始和停止信号:起始和停止信号一般由主机产生

起始信号:SCL为高,SDA 高 —>低;

停止信号:SCL为高,SDA 低 —>高;

62f675c2-24a1-11ed-9ade-dac502259ad0.png

数据有效性:传输时,SCL 为高电平的时候 SDA 表示的数据有效,即此时的 SDA 为高电平时表示数据“1”,为低电平时表示数据“0”。当 SCL为低电平时,SDA 的数据无效,一般在这个时候 SDA 进行电平切换,为下一次表示数据做好准备。

3、I2C特性及架构

软件模拟协议:直接控制芯片的两个 GPIO 引脚,分别用作 SCL 及 SDA,按照上述信号的时序要求,直接控制引脚的输出(若是接收数据时则读取 SDA 电平),就可以实现 I2C 通讯。由直接控制 GPIO 引脚电平产生通讯时序时,需要由 CPU 控制每个时刻的引脚状态。

硬件协议:STM32 的 I2C 片上外设专门负责实现 I2C 通讯协议,只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。

SPI通讯协议

SPI(Serial Peripheral Interface):串行外围设备接口,是一种高速全双工的通信总线。

1、SPI物理层:3条总线及片选线(SCK、MOSI、MISO、片选线共4根)

631e9a8e-24a1-11ed-9ade-dac502259ad0.png

(1)片选线:从设备选择信号线,当有多个 SPI 从设备与 SPI 主机相连时,设备的其它信号线 SCK、MOSI及 MISO同时并联到相同的 SPI总线上,即无论有多少个从设备,都共同只使用这 3 条总线;而每个从设备都有独立的这一条 NSS 信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。I2C 协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯;而 SPI 协议中没有设备地址,它使用 NSS 信号线来寻址,当主机要选择从设备时,把该从设备的 NSS 信号线设置为低电平,该从设备即被选中片选有效,接着主机开始与被选中的从设备进行 SPI 通讯。所以SPI通讯以 NSS 线置低电平为开始信号,以 NSS 线被拉高作为结束信号。

(3) MOSI(Master Output,Slave Input):主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。

(4) MISO(Master Input,Slave Output):主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。

2、协议层:SPI 协议定义了通讯的起始和停止信号、数据有效性、时钟同步等环节。

SPI通讯时序:

6340e8aa-24a1-11ed-9ade-dac502259ad0.png

(1)通讯的起始和停止信号:

起始信号:NSS 信号线由高变低,是 SPI 通讯的起始信号。NSS 是每个从机各自独占的信号线,当从机在自己的 NSS 线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。

停止信号:NSS 信号由低变高,是 SPI 通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。

(2)数据有效性:SPI 使用 MOSI 及 MISO 信号线来传输数据,使用 SCK 信号线进行数据同步。MOSI及 MISO 数据线在 SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的。MOSI 及 MISO 的数据在 SCK 的上升沿期间变化输出,在 SCK的下降沿时被采样。即在 SCK的下降沿时刻,MOSI及 MISO 的数据有效,高电平时表示数据“1”,为低电平时表示数据“0”。在其它时刻,数据无效,MOSI 及 MISO为下一次表示数据做准备。SPI每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。

DMA——直接存储器存取

DMA(Direct Memory Access):是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU,即在传输数据的时候,CPU 可以干其他的事情,好像是多线程一样。数据传输支持从外设到存储器或者存储器到存储器

1、DMA请求:如果外设要想通过 DMA 来传输数据,必须先给 DMA 控制器发送 DMA 请求,DMA收到请求信号之后,控制器会给外设一个应答信号,当外设应答后且 DMA 控制器收到应答信号之后,就会启动 DMA的传输,直到传输完毕。

2、通道:DMA 具有 12 个独立可编程的通道,其中 DMA1 有 7 个通道,DMA2 有 5 个通道,每个通道对应不同的外设的 DMA 请求。虽然每个通道可以接收多个外设的请求,但是同一

时间只能接收一个,不能同时接收多个。

3、仲裁器:当发生多个 DMA 通道请求时,就意味着有先后响应处理的顺序问题,这个就由仲裁器理。

4、DMA 数据配置:DMA 传输数据的方向有三个——从外设到存储器,从存储器到外设,从存储器到存储器。

USART/I2C/SPI比较

1、通信速率比较:

SPI > I2C > UART

(1)同步通信>异步通信;

(2)同步通信时必须有一根时钟线连接传输的两端;

(3)都是串行通信方式,并行通信用于内部存储间的通信,如flash;

(4)适合传输的距离和通信速率成反比关系;

2、连线方式:

SPI:2数据线、1时钟线、1CS(设备片选线),串行同步通信全双工;

I2C:1数据线、1时钟线,串行同步通信半双工,传输距离比UART短;

UART:2数据线、1地线,串行异步通信全双工,传输距离比I2C长些;

(I2C接口是“器件间”接口,是在一块板子之内传输数据)

(UART是 “设备间”接口,更多的是用于两台设备之间传输数据)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信
    +关注

    关注

    18

    文章

    6032

    浏览量

    135985
收藏 人收藏

    评论

    相关推荐

    CAN总线与其他串行通信协议比较

    CAN总线与其他串行通信协议相比,具有其独特的特点和优势。以下是对CAN总线与UART、I2CSPI等常见串行通信协议比较: 一、基本特
    的头像 发表于 11-12 09:56 616次阅读

    I2C协议的基础知识

    本文从I2C协议的概述开始,描述协议的历史、不同速度模式、物理层和数据帧结构,最后介绍I2C混合电压系统中电平兼容性以及上拉电阻大小计算。
    的头像 发表于 10-22 15:51 498次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>协议</b>的基础知识

    物联网嵌入式软件中的I2C总线设计详解

    基本概念、特点、通信协议,以及在不同场景下的高级应用和最佳实践。I2C接口只有2根信号线,总线上可以连接多个设备,硬件实现简单,可扩展性强。I2C
    的头像 发表于 09-29 16:21 388次阅读
    物联网嵌入式软件中的<b class='flag-5'>I2C</b>总线设计详解

    DHT11用的是SPI还是I2C

    DHT11并不使用SPII2C通信协议,而是采用单总线(1-Wire)协议进行通信 。单总线协议
    的头像 发表于 09-04 09:11 1112次阅读

    简单认识I2C通信协议

    I2C(Inter-Integrated Circuit)通信协议是由飞利浦公司(现为恩智浦半导体)开发的一种简单、双向二线制同步串行总线协议。自1982年发布以来,I2C
    的头像 发表于 07-25 18:06 1456次阅读

    如何使用Dave 3.1.10在XMC4400微控制器上实现I2c通信协议 软件?

    我一直在尝试使用 Dave 3.1.10 与 XMC4400 执行 I2c 通信协议,以实现传感器接口。 软件但我做不到。 Dave 3.1.10 的语法有所不同。 我无法使用 Dave
    发表于 06-03 07:21

    I2CSPI、UART的通信过程还可以这样理解

    到目前为止,I2CSPI和UART等仍然是电子嵌入式设备中最常用的通信协议,本文,我们将剖析这三种协议,让大家清楚、直观的了解它们的功能、优点和局限性,并辅以GIF动图展示。一、II
    的头像 发表于 05-23 08:10 7164次阅读
    <b class='flag-5'>I2C</b>、<b class='flag-5'>SPI</b>、UART的<b class='flag-5'>通信</b>过程还可以这样理解

    SPII2C通信协议:应用与区别

    本文深入解析了SPII2C这两种通信协议的特点、工作原理和应用场景。SPI适用于高速数据传输,常用于存储器芯片和显示器驱动等领域;I2C
    的头像 发表于 04-22 16:45 1828次阅读

    逼真动画展示I2CSPI、UART的通信过程

    到目前为止,I2CSPI和UART等仍然是电子嵌入式设备中最常用的通信协议,本文,我们将剖析这三种协议,让大家清楚、直观的了解它们的功能、优点和局限性,并辅以GIF动图展示。
    的头像 发表于 04-12 08:27 982次阅读
    逼真动画展示<b class='flag-5'>I2C</b>、<b class='flag-5'>SPI</b>、UART的<b class='flag-5'>通信</b>过程

    总结usart、uart、i2cspi区别及相关知识

    USART、UART、I2CSPI是四种不同的串行通信协议,它们各自具有独特的特点和应用领域
    的头像 发表于 04-10 09:47 1786次阅读
    总结<b class='flag-5'>usart</b>、uart、<b class='flag-5'>i2c</b>、<b class='flag-5'>spi</b>区别及相关知识

    用STM32F103普通IO模拟通信协议I2C,SPI,串口,怎么精准的控制通讯的速率?

    用STM32F103普通IO模拟通信协议I2C,SPI,串口等。 怎么精准的控制通讯的速率,我看到STLINK也是用的STM32的芯片,为何通讯速度能达到10M那么高? 怎么操作的,有例程指导一下吗?
    发表于 03-28 08:24

    什么是I2C协议 I2C总线的控制逻辑

    在实际使用过程中,I2C比较容易出现的一个问题就是死锁 ,死锁在I2C中主要表现为:I2C死锁时表现为SCL为高,SDA一直为低。
    发表于 03-12 09:17 1065次阅读
    什么是<b class='flag-5'>I2C</b><b class='flag-5'>协议</b> <b class='flag-5'>I2C</b>总线的控制逻辑

    什么是I2C接口?什么是I3C接口?I2CI3C的区别

    I2C接口是一种串行通信协议,全称为Inter-Integrated Circuit,即集成电路间总线。它是一种双向、两线制(SCL和SDA)的串行通信接口,主要用于连接微控制器和其他外围设备,如传感器、存储器、显示器等。
    的头像 发表于 02-17 14:39 6350次阅读
    什么是<b class='flag-5'>I2C</b>接口?什么是<b class='flag-5'>I3C</b>接口?<b class='flag-5'>I2C</b>与<b class='flag-5'>I3C</b>的区别

    蓝牙串口通讯总线——I2C/SPI/UART

    Sensor、Touch、蓝牙模块、WIFI模块等也都兼容这三种通信协议的1种以上。那么这三条通信总线有什么区别呢?工业物联网无线通信专业厂商为您一一细说—— I2C:半双工、同步、串
    的头像 发表于 01-22 09:41 1645次阅读
    蓝牙串口通讯总线——<b class='flag-5'>I2C</b>/<b class='flag-5'>SPI</b>/UART

    XV4001BC车载用SPI/I2C输出接口的数字输出

    XV4001BC车载用SPI/I2C输出接口的数字输出,可实现角速度输出和温度传感器输出,满足汽车导航和通讯系统的要求。SPI / I2C 输出接口角速度输出(16bit)、温度传感
    发表于 01-02 16:33 0次下载