嵌入式通信协议全解析:SPI、I²C、UART详解(附带面试题)

简介: 通信是指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递。从广义上来说,通信是指需要信息的双方或多方在不违背各自意愿的情况下采用任意方法、任意媒质,将信息从某方准确安全地传送到另方。在出现电波传递通信后,通信被单一解释为信息的传递,是指由一地向另一地进行信息的传输与交换,其目的是传输消息。通信方式包括利用“电”来传递消息的电信,这种通信具有迅速、准确、可靠等特点,且几乎不受时间、地点、空间、距离的限制,因而得到了飞速发展和广泛应用。


目录

一、什么是通信

二、 通信的分类

同步通信(Synchronous Communication)

异步通信(Asynchronous Communication)

不同协议标准区分图:

UART

UART的特点:

UART的通信过程:

UART的配置参数:

框图分析:

时序图(1/8NULL/1: 1个起始位,8个数据为,没有校验位,1个停止位):

相关函数:

HAL库:

标准库:

SPI

SPI的基本组成部分:

SPI的工作原理:

一主一从结构:

单主多从结构:

SPI时序图:

I²C

I²C的信号线:

I²C的工作原理:

数据传输:

起始和停止条件:

应答信号:

I²C的寻址:

I²C的时序:

更为严格的时序讲解:

I²C的优点:

面试题:

1. 串行、并行通信的优缺点

2. 全双工、半双工、单工区别?

3. 同步通信异步通信的区别 ?优缺点?

同步通信

异步通信

4. 用你自己的话讲一下IIC,SPI,UART,并且说出他们的区别。

区别


一、什么是通信

    通信是指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递。从广义上来说,通信是指需要信息的双方或多方在不违背各自意愿的情况下采用任意方法、任意媒质,将信息从某方准确安全地传送到另方。在出现电波传递通信后,通信被单一解释为信息的传递,是指由一地向另一地进行信息的传输与交换,其目的是传输消息。通信方式包括利用“电”来传递消息的电信,这种通信具有迅速、准确、可靠等特点,且几乎不受时间、地点、空间、距离的限制,因而得到了飞速发展和广泛应用。

二、 通信的分类

通信方式根据数据传输的方向可以大致分为两大类:同步通信(Synchronous Communication)和异步通信(Asynchronous Communication,在此基础上又可以分成三小类:单工(Simplex)、半双工(Half-Duplex)和全双工(Full-Duplex)。下面我将详细解释每一类通信的特点:

同步通信(Synchronous Communication)

同步通信依赖于共享的时钟信号来协调数据的发送和接收。在同步通信中,发送方和接收方都遵循相同的时钟频率,确保数据位在正确的时间点被采样和处理。这通常涉及到以下特点:

  • 时钟信号:存在一个共同的时钟信号,它控制着数据的发送和接收时间。这个时钟信号可以是外加的,也可以是数据本身携带的(如曼彻斯特编码)。
  • 固定的数据速率:由于时钟信号的存在,数据传输速率是固定的,不需要额外的信号来标识数据的开始和结束。
  • 效率高:由于不需要额外的起始和停止位,同步通信在高速数据传输中更为高效。
  • 应用:同步通信常见于高速数据总线、网络通信(如以太网、光纤通道)和内部处理器通信中。

异步通信(Asynchronous Communication)

异步通信不需要共享的时钟信号。数据的发送和接收基于数据包或字符的开始和结束标志。异步通信的典型特征包括:

  • 起始位和停止位:数据传输前会先发送一个起始位(通常是一个低电平),表示数据帧的开始;数据传输结束后发送一个或多个停止位(通常是高电平),表示数据帧的结束。
  • 可变的数据速率:异步通信允许数据速率在一定范围内变化,因为每个数据帧都有自己的开始和结束标记。
  • 简单性:异步通信简化了硬件设计,因为不需要精确的时钟同步。
  • 应用:异步通信广泛应用于低速串行通信中,如UART接口、Modem通信和RS-232串行端口。
  • 单工通信适合于只需要单向数据传输的应用场景。

(我只能给你发信息,你不能给我发。)

  • 半双工通信适合于需要双向通信但不需同时进行发送和接收的情况,可以节省资源和成本。

(我在给你发信息的时候,你不能给我发,等我发完了你才可以发。)

  • 全双工通信适用于需要高效、双向实时通信的场景,如语音通话和高速数据传输。

(我们可以同时互发消息)

不同协议标准区分图:

image.gif 编辑

UART

UART(Universal Asynchronous Receiver/Transmitter)是一种用于串行通信的协议,常用于微控制器、计算机和外围设备之间的数据传输。UART允许设备通过两条主要的信号线进行全双工通信,这两条线分别是TXD(发送数据)和RXD(接收数据)。在更复杂的设置中,可能还会包含额外的控制和握手信号线。

UART的特点:

  1. 异步通信:UART使用起始位和停止位来同步数据流,不需要外部时钟信号。这意味着发送方和接收方各自有独立的时钟,只要它们的时钟速率足够接近即可。
  2. 串行数据传输:数据一位接一位地发送,这与并行通信中同时发送多位数据不同。
  3. 全双工操作:UART支持同时发送和接收数据,这意味着TXD和RXD是独立的信号线。

image.gif 编辑

UART的通信过程:

  • 起始位:一个低电平信号,表示数据传输的开始。
  • 数据位:随后是数据位,通常为8位,每个位表示一个二进制数字(0或1)。
  • 奇偶校验位(可选):用于错误检测,可以是奇校验或偶校验。
  • 停止位:一个高电平信号,表示数据传输的结束。停止位可以是1位、1.5位或2位长。

image.gif 编辑

UART的配置参数:

  • 波特率:定义数据传输速率,单位是bits per second (bps)。例如,9600 baud意味着每秒传输9600个位。据搜索发现国际上好像有套标准,我一般会用9600,标准: 110、300、600、1200、1800、2400、4800、9600。
  • 数据位:每个字符的位数,通常是5到8位。
  • 奇偶校验:用于错误检测,可以是无校验、奇校验或偶校验。
  • 停止位:停止位的数量,可以是1、1.5或2位。

框图分析:

image.gif 编辑

时序图(1/8NULL/1: 1个起始位,8个数据为,没有校验位,1个停止位):

image.gif 编辑

相关函数:

HAL库:

串口的发送函数
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
串口的接收函数
HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

image.gif

标准库:

串口的发送函数
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
串口的接收函数
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);

image.gif

SPI

SPI(Serial Peripheral Interface)是一种用于短距离、芯片间通信的同步串行通信协议。它是由Motorola公司开发的,并在许多微控制器、传感器、存储器和其他外设中得到了广泛应用。SPI协议的主要特点是其高速度、全双工通信能力和相对简单的接口设计。

SPI的基本组成部分:

SPI接口通常包括以下四个信号线:

  1. MOSI(Master Out Slave In):这是主设备向从设备发送数据的信号线。
  2. MISO(Master In Slave Out):这是从设备向主设备发送数据的信号线。
  3. SCK(Serial Clock):这是时钟信号线,由主设备产生,用于同步数据的发送和接收。
  4. SS/CS(Slave Select/Chip Select):这是一个或多个信号线,用于选择特定的从设备。当一个从设备的SS/CS被激活(通常为低电平)时,它才参与通信。

SPI的工作原理:

  • SPI通信是基于主从架构的,其中至少有一台主设备和一台或多台从设备。主设备控制通信的时序和速率。
  • 数据通过MOSI和MISO线同时传输,实现了全双工通信。
  • 主设备通过SCK线提供时钟信号,从设备根据这个时钟信号同步接收和发送数据。
  • SS/CS线用于选择具体的从设备,只有当SS/CS被激活时,相应的从设备才会响应。

一主一从结构:

image.gif 编辑

单主多从结构:

image.gif 编辑

SPI时序图:

image.gif 编辑

I²C

I²C(Inter-Integrated Circuit)总线是由Philips公司(现NXP Semiconductors)开发的一种两线式串行总线协议,用于连接低速的微控制器、传感器、EEPROM、A/D转换器、D/A转换器、I/O扩展器等设备。I²C以其简单性、成本效益和多功能性而闻名,广泛应用于各种电子设备中,尤其是空间受限的便携式设备。

I²C的信号线:

I²C总线使用两条双向信号线:

  1. SDA(Serial Data):数据线,用于传输数据。
  2. SCL(Serial Clock):时钟线,用于同步数据的发送和接收。

image.gif 编辑

I²C的工作原理:

I²C通信是基于主从架构的,其中至少有一台主设备和一台或多台从设备。主设备负责启动和终止数据传输,控制时钟信号,并选择从设备。从设备被动地响应主设备的请求。

数据传输:

数据传输是在SCL线处于高电平期间进行的,SDA线上的数据在SCL线的上升沿被采样。在数据传输过程中,SDA线的状态只能在SCL线处于低电平时改变。

起始和停止条件:

  • 起始条件:当SCL线保持高电平时,SDA线从高电平变为低电平,这标志着一次I²C传输的开始。
  • 停止条件:同样地,当SCL线保持高电平时,SDA线从低电平变为高电平,这标志着一次I²C传输的结束。

应答信号:

每次传输完一个字节后,接收方会发送一个应答信号(ACK)来确认数据是否正确接收。应答信号是在SCL线的第九个时钟周期的下降沿时在SDA线上产生的。如果SDA线在这个时钟周期内为低电平,则表示应答成功;如果SDA线为高电平,则表示应答失败。

I²C的寻址:

每个I²C从设备都有一个唯一的7位地址,这使得主设备能够选择特定的从设备进行通信。地址通常在设备的规格书中给出。在数据传输开始时,主设备首先发送从设备的地址和读写方向的控制位,然后才能进行数据的读取或写入。

image.gif 编辑

I²C的时序:

  • 总线在空闲状态 时,SCL和SDA都保持着高电平
  • 当SDA由高电平转为低电平时且此时SCL为高电平,此时代表着产生了一个开始信号
  • 当SDA由低电平转为高电平时且此时SCL为高电平,此时代表着产生了一个停止信号

image.gif 编辑

更为严格的时序讲解:

image.gif 编辑

I²C的优点:

  • 简洁性:仅使用两条信号线,减少了布线的复杂性和成本。
  • 多从设备:可以连接多个从设备,只要它们具有不同的地址。
  • 低功耗:适用于电池供电的设备。

面试题:

1. 串行、并行通信的优缺点

串行通信:指的是同一时刻只能收或发一个bit位信息。因此只用1根信号线即可。

-串行传输:数据按位顺序传输。

-优点:占用引脚资源少

-缺点:速度相对较慢

image.gif 编辑

并行通信:指的是同一时刻可以收或发多个bit位的信息,因此需要多根信号线才行

-并行传输:数据各个位同时传输。

-优点:速度快

-缺点:占用引脚资源多

image.gif 编辑

2. 全双工、半双工、单工区别?

  • 单工通信适合于只需要单向数据传输的应用场景。

(我只能给你发信息,你不能给我发。)

  • 半双工通信适合于需要双向通信但不需同时进行发送和接收的情况,可以节省资源和成本。

(我在给你发信息的时候,你不能给我发,等我发完了你才可以发。)

  • 全双工通信适用于需要高效、双向实时通信的场景,如语音通话和高速数据传输。

3. 同步通信异步通信的区别 ?优缺点?

同步通信

  • 特点:依赖共同时钟,数据传输同步进行。
  • 优点:高时效性,数据传输效率高。
  • 缺点:需要时钟同步,可能增加成本和复杂性。

异步通信

  • 特点:无需共同时钟,数据包独立发送。
  • 优点:架构灵活,容错性好,非阻塞性。
  • 缺点:数据包有额外开销,系统管理复杂。

4. 用你自己的话讲一下IIC,SPI,UART,并且说出他们的区别。

1. IIC是一个两线式的串行通信协议。其主要应用于近距离,低速的设备间通信。他的两条线分别是SDA数据线和SCL时钟线。其中SCL时钟线是为了同步数据而用,而数据线是为了发送数据。其二者相辅相成。

2. SPI是一种全双工,同步的串行通信协议。其主要作用于计算机和外设之间的数据通信。它则有四条线,主向从发信号一条,从向主发信号一条,时钟线一条,片选线一条。其中时钟线仍然是为了同步数据的发送和接收。片选线因为SPI是一个一主多从或者一主一从,所以片选线是为了明了此时通信的设备。

3. UART是异步通信,一般用于计算机和设备进行调试。UART一般是三条线,RX,TX,GND。其中GND是一条地线。RX是接收。TX是发送嘛。其通信是通过起始位和停止位以及波特率进行通信规定标准。一般用于长距离的通信且对同步要求不高的这种。

区别

  1. 同步与异步:SPI和IIC是同步通信,依赖时钟信号;而UART是异步通信,使用起始位和停止位来界定数据包。
  2. 通信速度:SPI通常提供最高的数据传输速度,其次是IIC,UART相对较慢。
  3. 信号线数量:SPI使用四条线,IIC使用两条线,UART使用三到四条线。
  4. 多设备通信:IIC和SPI都支持多设备通信,但SPI需要为每个设备提供单独的SS(片选)信号线,而IIC通过地址识别设备。
  5. 应用范围:SPI和IIC主要用于短距离、同一电路板上的设备间通信,而UART更适用于长距离或不同设备间的通信。
相关文章
|
1天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
9 2
|
1天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
9 2
|
12天前
|
存储 NoSQL MongoDB
MongoDB面试专题33道解析
大家好,我是 V 哥。今天为大家整理了 MongoDB 面试题,涵盖 NoSQL 数据库基础、MongoDB 的核心概念、集群与分片、备份恢复、性能优化等内容。这些题目和解答不仅适合面试准备,也是日常工作中深入理解 MongoDB 的宝贵资料。希望对大家有所帮助!
|
17天前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
51 1
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
391 37
|
1月前
|
网络协议 数据格式
【通信协议讲解】单片机基础重点通信协议解析与总结之ModBus(五)
【通信协议讲解】单片机基础重点通信协议解析与总结之ModBus(五)
|
1月前
|
IDE 开发工具
【通信协议讲解】单片机基础重点通信协议解析与总结之CAN(四)
【通信协议讲解】单片机基础重点通信协议解析与总结之CAN(四)
|
1月前
【通信协议讲解】单片机基础重点通信协议解析与总结之串口通信(三)
【通信协议讲解】单片机基础重点通信协议解析与总结之串口通信(三)
|
1月前
【通信协议讲解】单片机基础重点通信协议解析与总结之SPI(二)
【通信协议讲解】单片机基础重点通信协议解析与总结之SPI(二)
|
1月前
【通信协议讲解】单片机基础重点通信协议解析与总结之IIC(一)
【通信协议讲解】单片机基础重点通信协议解析与总结之IIC(一)

热门文章

最新文章

推荐镜像

更多