嵌入式通信协议全解析: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串行端口。

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

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

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

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

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

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

不同协议标准区分图:

UART

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

UART的特点:

  1. 异步通信:UART使用起始位和停止位来同步数据流,不需要外部时钟信号。这意味着发送方和接收方各自有独立的时钟,只要它们的时钟速率足够接近即可。

  2. 串行数据传输:数据一位接一位地发送,这与并行通信中同时发送多位数据不同。

  3. 全双工操作:UART支持同时发送和接收数据,这意味着TXD和RXD是独立的信号线。

UART的通信过程:

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

UART的配置参数:

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

框图分析:

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

相关函数:

 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)
标准库:
串口的发送函数
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
串口的接收函数
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);

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被激活时,相应的从设备才会响应。
一主一从结构:

单主多从结构:

 SPI时序图:

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):时钟线,用于同步数据的发送和接收。

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位地址,这使得主设备能够选择特定的从设备进行通信。地址通常在设备的规格书中给出。在数据传输开始时,主设备首先发送从设备的地址和读写方向的控制位,然后才能进行数据的读取或写入。

I²C的时序:

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

更为严格的时序讲解:

I²C的优点:

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

面试题:

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

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

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

-优点:占用引脚资源少

-缺点:速度相对较慢

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

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

-优点:速度快

-缺点:占用引脚资源多

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更适用于长距离或不同设备间的通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/43642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件防止拷贝如何实现?这些攻略给你了

在信息爆炸的时代,数据安全成为企业和个人不可忽视的重要环节。文件的非法拷贝不仅可能侵犯知识产权,还可能导致敏感信息的泄露,进而引发严重的后果。 因此,了解并掌握文件防止拷贝的方法和技术至关重要。本文将详细介绍几种常见…

【多线程】wait()和notify()

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 为什么需要wait()方法和notify()方法?2. wait()方法2.1 wait()方法的作用2.2 wait()做的事情2…

OpenBayes 教程上新 | 清华大学强推!YOLOv10 实现更高效的目标检测

过去几年中,由于 YOLO 在计算成本和检测性能之间的有效平衡,它已经成为实时目标检测领域的主要范式。然而,YOLO 依赖于非极大值抑制 (NMS) 进行后处理,这阻碍了 YOLO 的端到端部署,并对推理延迟产生了不利影响。 YOLO…

SpringBootV12和mybatis全部知识点

框架: 快速开发项目的一个架子 ssh ssm spring --> applicationContext.xml配置文件(spring不是业务层,是管理其他框架的) springmvc --> springmvc.xml配置文件 (对应之前servlet) mybatis —> mybatis-config.xml配置文件(对应之前jdbc) —> springboot优化…

【AI技术的未来之路】从模型到应用,跨越超级应用陷阱,迈向个性化智能体

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《热点时事》 期待您的关注 ​ 目录 引言 一、AI技术应用场景探索: 二、避免超级应用陷阱的策略: 三、个…

【STM32】MDK的编译过程及文件类型全解

1.编译过程简介 编译:MDK软件使用的编译器是armcc和armasm, 它们根据每个c/c和汇编源文件编译成对应的以“.o”为后缀名的对象文件(Object Code,也称目标文件), 其内容主要是从源文件编译得到的机器码,包含了代码、数据…

无线网卡怎么连接台式电脑?让上网更便捷!

随着无线网络的普及,越来越多的台式电脑用户希望通过无线网卡连接到互联网。无线网卡为台式电脑提供了无线连接的便利性,避免了有线网络的束缚。本文将详细介绍无线网卡怎么连接台式电脑的四种方法,包括使用USB无线网卡、内置无线网卡以及使用…

火柴棒图python绘画

使用Python绘制二项分布的概率质量函数(PMF) 在这篇博客中,我们将探讨如何使用Python中的scipy库和matplotlib库来绘制二项分布的概率质量函数(PMF)。二项分布是统计学中常见的离散概率分布,描述了在固定次…

Flask 邮件发送实例(代码直接可用)

关于Flask 邮件发送功能的代码实现,很多文章讲得并不清楚,往往学习视频才能讲清楚,我在这里出一个简单实例,直接告诉你各个配置具体对应的是什么意思以及如何获取。 1、实例 from flask import Flask from flask_mail import Ma…

快速掌握 ==== js 正则表达式

git 地址 https://gitee.com/childe-jia/reg-test.git 背景 在日常开发中,我们经常会遇到使用正则表达式的场景,比如一些常见的表单校验,会让你匹配用户输入的手机号或者身份信息是否规范,这就可以用正则表达式去匹配。相信大多数…

ISO 20000认证:驱动企业IT服务管理变革的利器

在信息技术驱动商业发展的今天,企业对高效、可靠和安全的IT服务需求日益增长。ISO 20000作为国际公认的IT服务管理标准,能够帮助企业在竞争激烈的市场环境中脱颖而出,实现IT服务管理的全面提升。本文将深入探讨ISO 20000认证如何帮助企业优化…

C++第三弹 -- 类与对象(上)

目录 前言一. 面向过程和面向对象的初步认识二. 类的引入三. 类的定义1.定义2. 命名规则建议 四. 类的访问限定符以及封装1. 访问限定符2.面试题3. 封装 五. 类的作用域六. 类的实例化七. 类的对象大小的计算八. 类成员函数this指针1. this指针的引出2. this指针的特性3. C语言…

最新版本的办公工具,你不来尝试一下吗?

前言 大家好,我是小雨,看到最近ONLYOFFICE更新了最新的版本,更新了一下当前版本来具体的测评一下,先来看看官网提供的各类更新信息,下面是我找到的三个主页,包括功能演示链接,官网连接以及专门…

能源电子领域2区SCI,版面稀缺,即将截稿,无版面费!

【SciencePub学术】今天小编给大家推荐1本能源电子领域的SCI!影响因子1.0-2.0之间,最重要的是审稿周期较短,对急投的学者较为友好! 能源电子类SCI 01 / 期刊概况 【期刊简介】IF:1.0-2.0,JCR2区&#xf…

羊大师:探索羊奶奥秘,解锁免疫力提升新篇章

在浩瀚的自然界中,羊奶以其独特的营养价值和健康益处,悄然成为提升免疫力的新宠。自古以来,羊奶就被视为珍贵的滋补佳品,而今,随着科学的深入探索,其提升免疫力的奥秘正逐渐揭开面纱。 羊奶中富含的免疫球蛋…

Avalonia开发实践(二)——开发带边框的Grid

一、开发背景 在实际开发工作中,常常会用到Grid进行布局。为了美观考虑,会给每个格子加上边框,如下图: 原生的Grid虽然有ShowGridLines属性可以控制显示格子之间的线,但线的样式不能定义,可以说此功能非常…

java中 使用数组实现需求小案例(二)

Date: 2024.07.09 16:43:47 author: lijianzhan 需求实现: 设计一个java类,java方法,使用Random函数,根据实现用户输入随机数生成一个打乱的数组。 package com.lin.java.test;import java.util.Arrays; import java.util.Rando…

TAGE predictor

参考文档:分支预测算法(一):TAGE|SunnyChen的小窝 TAGE的基础概念 TAGE是现今最经典的分支预测算法,TAGE及其后续的变体都是当今高性能微处理器的分支预测算法基础。因此,要聊分支预测算法的话题必定绕不开…

uniapp内置组件uni.navigateTo跳转后页面空白问题解决

文章目录 导文空白问题 导文 在h5上跳转正常 但是在小程序里面跳转有问题 无任何报错 页面跳转地址显示正确,但页面内容为空 空白问题 控制台: 问题解决: 方法1: 可能是没有注册的问题,把没注册的页面 注册一下。 方…

数据库基础练习4

准备 create table dept (dept1 int ,dept_name varchar(11)) charsetutf8; create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int) charsetutf8;insert into dept values(101,财务),(102,销售),(103,IT技术),(104,行政);INSERT …