前言:

为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。

在这里插入图片描述


1. 概述

1.1 同步通信原理

同步通信: 发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定(例如:在时钟信号的上升沿的时候,将数据发送出去)发送数据,接收端根据发送端提供的时钟信号,以及大家的约定,接收数据。如:I2C、SPI等有时钟信号的协议,都属于这种通信方式。
IIC:
在这里插入图片描述
SPI:
在这里插入图片描述
同步通信中双方使用频率一致的时钟,它的数据分组比异步则大得多,称为一个数据帧。通过独特的 bit 串作为启停标识。发送方要以固定的节奏去发送数据,而接收方要时刻做好接收数据的准备,识别到前导码(同步字节:1-2个字节)后马上要开始接收数据了。同步这种方式中因为分组很大,很长一段数据才会有额外的辅助位负载,所以效率更高,更加适合对速度要求高的传输,当然这种通信对时序的要求也更高。

1.2 异步通信原理

异步通信: 接收方并不知道数据什么时候会到达,收发双方可以有各自自己的时钟。发送方发送的时间间隔可以不均,接收方是在数据的起始位和停止位的帮助下实现信息同步的。这种传输通常是很小的分组,比如:一个字符为一组,数据组配备起始位和结束位。所以这种传输方式的效率是比较低的,因为额外加入了很多的辅助位作为负载,常用在低速的传输中。

串口通信:
在这里插入图片描述在异步通信方式中,发送方只发送数据帧,不传输时钟,发送和接收双方必须约定相同的传输率。当然双方实际工作速率不可能绝对相等,但是只要误差不超过一定的限度,就不会造成传输出错。

1.3 同步通信与异步通信区别:

(1)同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。

(2)同步通信效率高;异步通信效率较低。

(3)同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。

(4)同步通信可用于点对多点;异步通信只适用于点对点。

1.4 异步通信的差错类型

异步通信过程中,可能发生的通信错误一般有3种:

(1)帧格式错:在应该接收到停止位的时候,接收到逻辑的 “0”,便产生帧格式错误;

(2)奇偶错:接收到的奇偶校验位错;

(3)覆盖错:通信接口接收到数据并存放到数据输入寄存器中,但是CPU没有及时来取,后面新接收的数据覆盖了前面收到的数据,叫做覆盖错。

发生帧格式错和奇偶错的原因可能为下面几种:

(1)发送和接收双方采用了不同的传输率,或虽然双方约定了相同的传输率,但传输率不可能绝对相等。在通信的速率比较高的情况下,如果双方的传输率误差达到一定的程度,也会造成通信出错。比如:主 MCU 与外设进行通信时,如果两边的频率偏差比较大,就可能造成误差的积累,最终导致传输过程中数据的错误。

(2)通信双方采用了不相同的帧格式;

(3) 干扰。

1.5 异步串行方式的数据格式

异步串行通信的数据一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以“起始位”开始,以“停止位”结束,字符之间没有固定的时间间隔要求。每一个字符的前面都有一位起始位(低电平),字符本身由7位数据位组成,接着字符后面是一位校验位(检验位可以是奇校验、偶校验或无校验位),最后是一位或一位半或二位停止位,停止位后面是不定长的空闲位,停止位和空闲位都规定为高电平。实际传输时每一位的信号宽度与波特率有关,波特率越高,宽度越小,在进行传输之前,双方一定要使用同一个波特率设置。

异步串行通信的数据每个字符(每帧信息)由 4 个部分组成:

(1)1 位起始位,规定为低电0;

(2)5~8 位数据位,即要传送的有效信息;

(3)1 位奇偶校验位;

(4)1~2 位停止位,规定为高电平 1。

在这里插入图片描述

1.6 通信传输速率=

波特率:

电子通信领域,波特率即调制速率,指的是信号被调制以后在单位时间内的波特数,即单位时间内载波参数变化的次数。它是对信号传输速率的一种度量,通常以“波特每秒”(Bps)为单位。 波特率有时候会同比特率混淆,实际上后者是对信息传输速率(传信率)的度量。波特率可以被理解为单位时间内传输码元符号的个数(传符号率),通过不同的调制方法可以在一个码元上负载多个比特信息。

波特率与比特率:

比特率: 在数字信道中,比特率是数字信号的传输速率,它用单位时间内传输的二进制代码的有效位 (bit) 数来表示,其单位为每秒比特数 bit/s(bps)、每秒千比特数 (Kbps) 或每秒兆比特数 (Mbps) 来表示。

波特率: 指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,其单位为波特(Baud)。 波特率与比特率的关系为:比特率 = 波特率 X 单个调制状态对应的二进制位数。

显然,两相调制(单个调制状态对应 1 个二进制位)的比特率等于波特率;四相调制(单个调制状态对应 2 个二进制位)的比特率为波特率的两倍;八相调制(单个调制状态对应 3 个二进制位)的比特率为波特率的三倍;依次类推。


参考:

1.同步串行与异步串行通信

2.串口通信技术浅析

3.同步通信与异步通信区别

4.通俗理解同步通信与异步通信

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐