嵌入式通信协议全解析: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.mfbz.cn/a/788251.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式探索:装饰器模式

1. 装饰器模式定义 装饰器模式(Decorator Pattern) 装饰器模式是一种结构型设计模式,允许向一个对象动态添加行为。在不改变类的接口的情况下,装饰器模式在原始类上增加额外的职责,并且支持多个装饰器嵌套使用。 装…

使用树莓派进行python开发,控制电机的参考资料

网站连接:https://www.cnblogs.com/kevenduan?page1 1、简洁的过程步骤, 2、有代码示例, 3、有注意事项,

数据结构--二叉树相关习题5(判断二叉树是否是完全二叉树 )

1.判断二叉树是否是完全二叉树 辨别: 不能使用递归或者算节点个数和高度来判断。 满二叉树可以用高度和节点来判断,因为是完整的。 但是完全二叉树前面是满的,但是最后一层是从左到右连续这种 如果仍然用这种方法的话,如下图…

零信任网络安全

随着数字化转型的发生,网络边界也在不断被重新定义,因此,组织必须使用新的安全方法重新定义其防御策略。 零信任是一种基于“永不信任,永远验证”原则的安全方法,它强调无论在公司内部或外部,任何用户、设…

电脑文件夹怎么设置密码?让你的文件更安全!

在日常使用电脑的过程中,我们常常会有一些需要保护的个人文件或资料。为了防止这些文件被他人未经授权访问,对重要文件夹设置密码是一种有效的保护措施,可是电脑文件夹怎么设置密码呢?本文将介绍2种简单有效的方法帮助您为电脑文件…

数据结构基础--------【二叉树题型】

1、前提(待补充) 1.**DFS(Depth First Search)😗*递归法得到最终的数组(深度优先算法) 其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,如果遇到死路就往回退,回退过程中如果遇…

简易限流实现

需求描述 写一个1秒两个的限流工具类,2r/s 使用semaphore 代码实现-类似令牌桶算法 public class LimitHelper {private int maxLimit;private Semaphore semaphore;private int timeoutSeconds;public LimitHelper(int maxLimit, int timeoutSeconds) {this.max…

OpenAI与Thrive Global推出Thrive AI Health:AI驱动的健康教练应用

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

MMGPL: 多模态医学数据分析与图提示学习| 文献速递-基于深度学习的多模态数据分析与生存分析

Title 题目 MMGPL: Multimodal Medical Data Analysis with Graph Prompt Learning MMGPL: 多模态医学数据分析与图提示学习 01 文献速递介绍 神经学障碍,包括自闭症谱系障碍(ASD)(Lord等,2018年)和阿…

虚拟内存【Linux】

虚拟内存 为什么需要虚拟内存Linux虚拟内存的结构32位系统下的虚拟地址空间64位系统下的虚拟地址空间页表多级页表TLB 流程虚拟内存的作用 为什么需要虚拟内存 为了在进行多进程编码进行内存访问的时候保持内存的隔离性,数据安全性,所以出现了虚拟内存。…

PPI(每英寸像素数)、DPI(每英寸点数)和Pixel(像素)的区别和联系?

一、定义 PPI、DPI和Pixel是图像处理、打印和显示领域中常用的三个概念,它们之间既有区别又有联系。以下是对这三个概念进行分别讲解: 1. PPI(Pixels Per Inch)-即每英寸像素数,是图像分辨率的一种表示方…

(补充):java各种进制和文本、图像、音频在计算机中的存储方式

文章目录 前言一、进制1 逢几进一2 常见进制在java中的表示3 进制中的转换(1)任意进制转十进制(2)十进制转其他进制二、计算机中的存储1 计算机的存储规则(文本数据)(1)ASCII码表(2)编码规则的发展演化2 计算机的存储规则(图片数据)(1)分辨率、像素(2)黑白图与灰度…

科技日报社激发数据要素价值,树立媒体行业数字化转型标杆

更多案例研究与行业报告,请前往爱分析官网 媒体行业企事业单位在数据要素领域得天独厚,日积月累的新闻报道、媒资素材、读者反馈和市场研究,沉淀出属于它们的“数据金矿”。 但是,多数相关单位尚未重视和发挥数据要素价值&#…

LLM应用构建前的非结构化数据处理(三)文档表格的提取

1.学习内容 本节次学习内容来自于吴恩达老师的Preprocessing Unstructured Data for LLM Applications课程,因涉及到非结构化数据的相关处理,遂做学习整理。 本节主要学习pdf中的表格数据处理 2.环境准备 和之前一样,可以参考LLM应用构建前…

车载聚合路由器应用场景分析

乾元通QYT-X1z车载式1U多卡聚合路由器,支持最多8路聚合,无论是应急救援,还是车载交通,任何宽带服务商无法覆盖的区域,聚合路由器可提供现场需要的稳定、流畅、安全的视频传输网络,聚合路由器可无缝接入应急…

Flutter-实现物理小球碰撞效果

效果 引言 在Flutter应用中实现物理动画效果,可以大大提升用户体验。本文将详细介绍如何在Flutter中创建一个模拟物理碰撞的动画小球界面,主要代码实现基于集成sensors_plus插件来获取设备的加速度传感器数据。 准备工作 在开始之前,请确保在pubspec.yaml文件中添加senso…

未羽研发测试管理平台

突然有一些觉悟,程序猿不能只会吭哧吭哧的低头做事,应该学会怎么去展示自己,怎么去宣传自己,怎么把自己想做的事表述清楚。 于是,这两天一直在整理自己的作品,也为接下来的找工作多做点准备。接下来…

rsync远程同步--累了,明天继续再写~。

rsync官网链接 rsync(Remote Sync,远程同步)开源快速备份工具,是一个用于本地和远程文件同步的Unix-like命令行程序。它使用“快速数据传输算法”,只发送源和目标之间的差异,因此数据传输非常高效。 可以在不同主机之间镜像同步整 个目录树…

[安洵杯 2019]easy_serialize_php

源码&#xff1a; <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_SESSION){unset($_SESSION); }$_SESSION["user"] guest; …

JRE、JVM、JDK分别是什么。

JDK JDK的英文全称是Java Development Kit。JDK是用于制作程序和Java应用程序的软件开发环境。JDK 是 Java 开发工具包&#xff0c;它是 Java 开发者用来编写、编译、调试和运行 Java 程序的集合。JDK 包括了 Java 编译器&#xff08;javac&#xff09;、Java 运行时环境&…