嵌入式通信协议全解析: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更适用于长距离或不同设备间的通信。
相关文章
|
4月前
|
存储 缓存 NoSQL
Redis常见面试题全解析
Redis面试高频考点全解析:从过期删除、内存淘汰策略,到缓存雪崩、击穿、穿透及BigKey问题,深入原理与实战解决方案,助你轻松应对技术挑战,提升系统性能与稳定性。(238字)
|
6月前
|
存储 安全 测试技术
Python面试题精选及解析
本文详解Python面试中的六大道经典问题,涵盖列表与元组区别、深浅拷贝、`__new__`与`__init__`、GIL影响、协程原理及可变与不可变类型,助你提升逻辑思维与问题解决能力,全面备战Python技术面试。
293 0
|
8月前
|
Web App开发 缓存 前端开发
浏览器常见面试题目及详细答案解析
本文围绕浏览器常见面试题及答案展开,深入解析浏览器组成、内核、渲染机制与缓存等核心知识点。内容涵盖浏览器的主要组成部分(如用户界面、呈现引擎、JavaScript解释器等)、主流浏览器内核及其特点、从输入URL到页面呈现的全过程,以及CSS加载对渲染的影响等。结合实际应用场景,帮助读者全面掌握浏览器工作原理,为前端开发和面试提供扎实的知识储备。
341 4
|
4月前
|
监控 Java 关系型数据库
面试性能测试总被刷?学员真实遇到的高频问题全解析!
面试常被性能测试题难住?其实考的不是工具,而是分析思维。从脚本编写到瓶颈定位,企业更看重系统理解与实战能力。本文拆解高频面试题,揭示背后考察逻辑,并通过真实项目训练,帮你构建性能测试完整知识体系,实现从“会操作”到“能解决问题”的跨越。
|
8月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
4644 50
|
8月前
|
前端开发 JavaScript 开发者
2025 最新 100 道 CSS 面试题及答案解析续篇
本文整理了100道CSS面试题及其答案,涵盖CSS基础与进阶知识。内容包括CSS引入方式、盒模型、选择器优先级等核心知识点,并通过按钮、卡片、导航栏等组件封装实例,讲解单一职责原则、样式隔离、响应式设计等最佳实践。适合前端开发者巩固基础、备战面试或提升组件化开发能力。资源地址:[点击下载](https://pan.quark.cn/s/50438c9ee7c0)。
175 5
2025 最新 100 道 CSS 面试题及答案解析续篇
|
8月前
|
缓存 NoSQL Java
Java Redis 面试题集锦 常见高频面试题目及解析
本文总结了Redis在Java中的核心面试题,包括数据类型操作、单线程高性能原理、键过期策略及分布式锁实现等关键内容。通过Jedis代码示例展示了String、List等数据类型的操作方法,讲解了惰性删除和定期删除相结合的过期策略,并提供了Spring Boot配置Redis过期时间的方案。文章还探讨了缓存穿透、雪崩等问题解决方案,以及基于Redis的分布式锁实现,帮助开发者全面掌握Redis在Java应用中的实践要点。
453 6
|
8月前
|
NoSQL Java 微服务
2025 年最新 Java 面试从基础到微服务实战指南全解析
《Java面试实战指南:高并发与微服务架构解析》 本文针对Java开发者提供2025版面试技术要点,涵盖高并发电商系统设计、微服务架构实现及性能优化方案。核心内容包括:1)基于Spring Cloud和云原生技术的系统架构设计;2)JWT认证、Seata分布式事务等核心模块代码实现;3)数据库查询优化与高并发处理方案,响应时间从500ms优化至80ms;4)微服务调用可靠性保障方案。文章通过实战案例展现Java最新技术栈(Java 17/Spring Boot 3.2)的应用.
704 9
|
8月前
|
设计模式 安全 Java
Java 基础知识面试题全解析之技术方案与应用实例详解
本内容结合Java 8+新特性与实际场景,涵盖函数式编程、Stream API、模块化、并发工具等技术。通过Lambda表达式、Stream集合操作、Optional空值处理、CompletableFuture异步编程等完整示例代码,助你掌握现代Java应用开发。附面试题解析与技术方案,提升实战能力。代码示例涵盖计算器、员工信息统计、用户查询、模块化系统设计等,助你轻松应对技术挑战。
241 9
|
8月前
|
缓存 算法 NoSQL
校招 Java 面试高频常见知识点深度解析与实战案例详细分享
《2025校招Java面试核心指南》总结了Java技术栈的最新考点,涵盖基础语法、并发编程和云原生技术三大维度: 现代Java特性:重点解析Java 17密封类、Record类型及响应式Stream API,通过电商案例演示函数式数据处理 并发革命:对比传统线程池与Java 21虚拟线程,详解Reactor模式在秒杀系统中的应用及背压机制 云原生实践:提供Spring Boot容器化部署方案,分析Spring WebFlux响应式编程和Redis Cluster缓存策略。
227 0

推荐镜像

更多
  • DNS