嵌入式通信协议全解析: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更适用于长距离或不同设备间的通信。
相关文章
|
19天前
|
人工智能 前端开发 Java
Java 面试资料中相关代码使用方法与组件封装方法解析
这是一份详尽的Java面试资料代码指南,涵盖使用方法与组件封装技巧。内容包括环境准备(JDK 8+、Maven/Gradle)、核心类示例(问题管理、学习进度跟踪)、Web应用部署(Spring Boot、前端框架)、单元测试及API封装。通过问题库管理、数据访问组件、学习进度服务和REST接口等模块化设计,帮助开发者高效组织与复用功能,同时支持扩展如用户认证、AI推荐等功能。适用于Java核心技术学习与面试备考,提升编程与设计能力。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
51 6
Java 面试资料中相关代码使用方法与组件封装方法解析
|
14天前
|
算法 Java 关系型数据库
校招 Java 面试基础题目解析及学习指南含新技术实操要点
本指南聚焦校招Java面试,涵盖Java 8+新特性、多线程与并发、集合与泛型改进及实操项目。内容包括Lambda表达式、Stream API、Optional类、CompletableFuture异步编程、ReentrantLock与Condition、局部变量类型推断(var)、文本块、模块化系统等。通过在线书店系统项目,实践Java核心技术,如书籍管理、用户管理和订单管理,结合Lambda、Stream、CompletableFuture等特性。附带资源链接,助你掌握最新技术,应对面试挑战。
33 2
|
15天前
|
缓存 NoSQL Java
校招 Java 面试常见知识点及实战案例全解析
本文全面解析了Java校招面试中的常见知识点,涵盖Java新特性(如Lambda表达式、、Optional类)、集合框架高级应用(线程安全集合、Map性能优化)、多线程与并发编程(线程池配置)、JVM性能调优(内存溢出排查、垃圾回收器选择)、Spring与微服务实战(Spring Boot自动配置)、数据库与ORM框架(MyBatis高级用法、索引优化)、分布式系统(分布式事务、缓存应用)、性能优化(接口优化、高并发限流)、单元测试与代码质量(JUnit 5、Mockito、JaCoCo)以及项目实战案例(电商秒杀系统、社交消息推送)。资源地址: [https://pan.quark.cn/s
66 4
|
14天前
|
SQL Java 数据库连接
阿里腾讯互联网公司校招 Java 面试题总结及答案解析
本文总结了阿里巴巴和腾讯等互联网大厂的Java校招面试题及答案,涵盖Java基础、多线程、集合框架、数据库、Spring与MyBatis框架等内容。从数据类型、面向对象特性到异常处理,从线程安全到SQL优化,再到IOC原理与MyBatis结果封装,全面梳理常见考点。通过详细解析,帮助求职者系统掌握Java核心知识,为校招做好充分准备。资源链接:[点击下载](https://pan.quark.cn/s/14fcf913bae6)。
29 2
|
15天前
|
Java 关系型数据库 MySQL
2025 年互联网公司校招 Java 面试题总结及答案实操示例解析
本项目基于Spring Boot 3与Java 17技术栈,围绕校园招聘常见面试题,提供核心知识点的实操示例。涵盖多线程、RESTful API设计、数据库操作(Spring Data JPA)、事务管理及异常处理等。通过完整代码实现与运行步骤,帮助理解用户管理、线程池配置等实际应用场景。资源包含项目结构、关键代码示例(如User实体类、UserService服务层、ThreadService多线程实现)及数据库迁移脚本,适合深入学习与实践。环境要求:JDK 17+、Maven 3.8+、MySQL 8.0+。
64 3
|
15天前
|
存储 安全 算法
Java 集合面试题 PDF 下载及高频考点解析
本文围绕Java集合面试题展开,详细解析了集合框架的基本概念、常见集合类的特点与应用场景。内容涵盖`ArrayList`与`LinkedList`的区别、`HashSet`与`TreeSet`的对比、`HashMap`与`ConcurrentHashMap`的线程安全性分析等。通过技术方案与应用实例,帮助读者深入理解集合类的特性和使用场景,提升解决实际开发问题的能力。文末附带资源链接,供进一步学习参考。
28 4
|
14天前
|
存储 算法 Java
校招 java 面试基础题目及解析
本文围绕Java校招面试基础题目展开,涵盖平台无关性、面向对象特性(封装、继承、多态)、数据类型、关键字(static、final)、方法相关(重载与覆盖)、流程控制语句、数组与集合、异常处理等核心知识点。通过概念阐述和代码示例,帮助求职者深入理解并掌握Java基础知识,为校招面试做好充分准备。文末还提供了专项练习建议及资源链接,助力提升实战能力。
66 0
|
3月前
|
机器学习/深度学习 人工智能 JSON
Resume Matcher:增加面试机会!开源AI简历优化工具,一键解析简历和职位描述并优化
Resume Matcher 是一款开源AI简历优化工具,通过解析简历和职位描述,提取关键词并计算文本相似性,帮助求职者优化简历内容,提升通过自动化筛选系统(ATS)的概率,增加面试机会。
263 18
Resume Matcher:增加面试机会!开源AI简历优化工具,一键解析简历和职位描述并优化
|
7月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
203 2
|
6月前
|
Java 程序员
面试官的加分题:super关键字全解析,轻松应对!
小米,29岁程序员,通过一个关于Animal和Dog类的故事,详细解析了Java中super关键字的多种用法,包括调用父类构造方法、访问父类成员变量及调用父类方法,帮助读者更好地理解和应用super,应对面试挑战。
114 3

推荐镜像

更多
  • DNS