type
status
date
slug
summary
tags
category
icon
password
一、什么是通信
通信是指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递。从广义上来说,通信是指需要信息的双方或多方在不违背各自意愿的情况下采用任意方法、任意媒质,将信息从某方准确安全地传送到另方。
如果你对通信具体感兴趣的话,欢迎你加入通信工程专业。
二、 通信的分类
通信方式根据数据传输的方向可以大致分为两大类:同步通信(Synchronous Communication)和异步通信(Asynchronous Communication,在此基础上又可以分成三小类:单工(Simplex)、半双工(Half-Duplex)和全双工(Full-Duplex)。下面我将解释每一类通信的特点:(不要觉得下面这些是废话,稍微了解一下,人类的科技不是突然爆发的,都是由原本很简单的东西一点点发展到复杂的。)
同步通信(Synchronous Communication)
同步通信依赖于共享的时钟信号来协调数据的发送和接收。在同步通信中,发送方和接收方都遵循相同的时钟频率,确保数据位在正确的时间点被采样和处理。这通常涉及到以下特点:
- 时钟信号:存在一个共同的时钟信号,它控制着数据的发送和接收时间。这个时钟信号可以是外加的,也可以是数据本身携带的(如曼彻斯特编码)。
- 固定的数据速率:由于时钟信号的存在,数据传输速率是固定的,不需要额外的信号来标识数据的开始和结束。
- 效率高:由于不需要额外的起始和停止位,同步通信在高速数据传输中更为高效。
- 应用:同步通信常见于高速数据总线、网络通信(如以太网、光纤通道)和内部处理器通信中。
异步通信(Asynchronous Communication)
异步通信不需要共享的时钟信号。数据的发送和接收基于数据包或字符的开始和结束标志。异步通信的典型特征包括:
- 起始位和停止位:数据传输前会先发送一个起始位(通常是一个低电平),表示数据帧的开始;数据传输结束后发送一个或多个停止位(通常是高电平),表示数据帧的结束。
- 可变的数据速率:异步通信允许数据速率在一定范围内变化,因为每个数据帧都有自己的开始和结束标记。
- 简单性:异步通信简化了硬件设计,因为不需要精确的时钟同步。
- 应用:异步通信广泛应用于低速串行通信中,如UART接口、Modem通信和RS-232串行端口。
单工、半双工、全双工通信
- 单工通信适合于只需要单向数据传输的应用场景。(我只能给你发信息,你不能给我发。)
小学上课传纸条玩过吧?你想把“放学憋走”这个消息传给另一端的朋友,写个纸条拜托中间的同学转过去,中间的同学们就是你们的“信道”
- 半双工通信适合于需要双向通信但不需同时进行发送和接收的情况,可以节省资源和成本。(我在给你发信息的时候,你不能给我发,等我发完了你才可以发。)
小时候拿两个杯子,中间串一根线,这不就成了一个简易传话筒嘛,我说你听,你说我听,而不能两个人同时说。
- 全双工通信适用于需要高效、双向实时通信的场景,如语音通话和高速数据传输(我们可以同时互发消息)
这个没啥好说的,现在手机打电话就是这样的。
串行通信
串行通信我的理解就是它利用一条传输线将资料一位位地顺序传送。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。也就是说串行通信它就是只有一个传输线,上面的数据是一个一个通过这个线来传输的。
并行通信:利用多条传输线将一个数据的各位同时传送。
不同协议标准区分图:
来吧宝宝,让我们先从简单的串口通信讲起
UART
UART(Universal Asynchronous Receiver/Transmitte)——通用异步收发传输器UART 作为异步、串行通信协议的一种全双工通信,工作原理是将传输数据的每个字符一位接一位地传输,仅用两根信号线(RX 和TX)就可以完成通信过程,在应用程序开发过程中使用频率较高的数据总线。
基于UART的数据传输是异步形式的串行数据传输。基于UART的串行数据传输不需要使用时钟信号来同步传输的发送端和接收端,而是依赖于发送设备和接收设备之间预定义的配置。对于发送设备和接收设备来说,两者的串行通信配置(波特率、单位字的位数、奇偶校验、起始位数与结束位、流量控制)应该设置为完全相同。通过在数据流中插入特定的比特序列,可以指示通信的开始与结束。当发送一个字节数据的时候,需要在比特流的开头加上起始位,并在比特流的末尾加上结束位。数据字节的最低位紧接在起始位之后。
UART 串口传输的数据格式如下图所示:
- 起始位:表示数据传输的开始,电平逻辑为“0” 。
• 数据位:可能值有5、6、7、8、9,表示传输这几个bit 位数据。一般取值为8,因为一个ASCII 字符值为8 位。
• 奇偶校验位:用于接收方对接收到的数据进行校验,校验“1” 的位数为偶数(偶校验) 或奇数(奇校验),以此来校验数据传送的正确性,使用时不需要此位也可以。
• 停止位:表示一帧数据的结束。电平逻辑为“1”。
• 波特率:串口通信时的速率,它用单位时间内传输的二进制代码的有效位(bit) 数来表示,其单位为每秒比特数bit/s(bps)。常见的波特率值有4800、9600、14400、38400、115200 等,数值越大数据传 输的越快,波特率为115200 表示每秒钟传输115200 位数据。
UART工作原理
发送数据过程:空闲状态,线路处于高电平;当收到发送指令后,拉低线路的一个数据位的时间T,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇偶校验位和停止位,一帧数据发送完成。
数据接收过程:空闲状态,线路处于高电平;当检测到线路的下降沿(高电平变为低电平)时说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备接收数据或存入缓冲。
由于UART是异步传输,没有传输同步时钟,为了保证数据的正确性,UART采用16倍数据波特率的时钟进行采样。每个数据有16个时钟采样,取中间的采样值,以保证采样不会滑码或误吗。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。
UART的接收数据时序为:当检测到数据的下降沿时,表明线路上有数据进行传输,这是计数器CNT开始计数,当计数器为24=16+8时,采样的值为第0位数据;当计数器的值为40时,采样的值为第一位数据,依次类推,进行后面6个数据的采样。如果需要进行奇偶校验,则当计数器的值为152时,采样的值即为奇偶位;当计数器的值为168时,采样的值为“1”表示停止位,数据接收完成。
一个标准的10位异步串行通信协议(1个起始位、1个停止位和8个数据位)收发时序,如下图所示:
UART的优缺点
优点:1、通信只需要两条数据线。2、无需时钟信号。3、有奇偶校验位,方便通信的差错检查。4、只需要接收端和发送端设置好数据包结构,即可稳定通信。缺点:1、传输速率较低。2、接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。3、传输距离有限,数据帧最大支持9位数据。
UART(通用异步收发器)是一种常见的设备间通信协议,它的工作原理是将传输数据的每个二进制位一位接一位地传输。然而,UART的效率可能会相对较低,主要原因如下:
- 串行传输:UART使用串行通信,即数据通过单条线路或导线逐位传输。这意味着数据必须一个接一个地发送,而不是像并行通信那样同时发送。这可能会降低数据传输的速度。
- 起始位和停止位:UART协议规定,每个字符的开始和结束都需要一个起始位和一个或多个停止位。这些额外的位会占用传输时间,从而降低了有效数据的传输速率。
- 奇偶校验:为了检测数据传输过程中可能出现的错误,UART通常会使用奇偶校验。这需要额外的校验位,进一步减少了有效数据的传输速率。
- 异步通信:UART是异步通信协议,这意味着发送器和接收器之间没有共享的时钟信号来同步数据。因此,两个设备必须事先约定好相同的波特率(即每秒钟传送的二进制位数)。如果两台设备的波特率有所不同,可能会导致接收错误。
- 长距离通信:在长距离通信中,电磁干扰和线路阻抗可能会导致数据错误,从而需要重发数据包,这也会降低UART的效率。
尽管UART在某些方面效率较低,但其优点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信。此外,由于其设计简单和易于实现,UART在嵌入式系统中仍然广泛使用。
UART电平标准
UART使用标准的TTL/CMOS逻辑电平(0-5v,0-3.3v,0-2.5v或0-1.8v)来表示数据,1表示高电平,0表示低电平。为了提高抗干扰能力、提高传输的距离,通常也会TTL/CMOS逻辑电平转换为RS-232逻辑电平,3-15表示0,-3~-15V表示1。
举个例子,对于传输数据0x55,即二进制的01010101,RS232和TTL的区别如下:
UART的问题
1.电气接口不统一
UART只是对信号的时序进行了定义,而未定义接口的电气特性;UART通信时一般直接使用处理器使用的电平,即TTL电平,但不同的处理器使用的电平存在差异, 高电平和低电平的具体定义不一样,所以不同的处理器使用UART通信时一般不能直接相连。
2.抗干扰能力差,通信距离短
TTL信号表示0和1,数据传输的时候很容易出错,最多1、2m。
只能用于一个电路板上两个不同芯片之间的通信。
那么好了宝宝,既然我们已经知道UART上存在什么问题,我们就开始着手改进吧!
RS232
用于串行通讯的标准。依赖UART串口协议,在电气层面做处理,统一了标准,能传得更远和更快。编程的话没有任何区别,就是串口通信。
采用一个标准的连接器:
且对9个引脚的作用和电平都做了规定。主要是用RX、TX和GND这三个引脚。
高电平:-3到-15v
低电平:+3到+15v
抗干扰能力增加,通信距离大致15m。
MCU通过TTL发出来的信号要接一个电平转换芯片去转成RS232的信号,比如MAX232芯片。类似usb-ttl芯片(ch340,cp2302)。
RS232的问题:
接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容,所以需要使用电平转换芯片才能与TTL电路连接。
传输速率较低,在异步传输时,比特率为20Kbps
接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在15米左右
RS485
与RS232类似,也是个基于串口的标准,但是是半双工。
与RS232相比最大特点:远距离(1500m),抗干扰强,速度更快(几百kbps到10 Mbps),允许接收多个收发器(可以组建设备网络)
使用差分信号进行数据传输,有效减少共模干扰,因为外部电磁干扰会同时影响到这两条线,而差分信号的接收方只关心两条线之间的电压差,从而有效抵消了干扰。(通信用双绞线,抗干扰强)
高电平(逻辑1):两线之间电压差为+2v到+6v
低电平(逻辑0):两线之间电压差为-2v到-6v
采用两线制,因为用的差分信号,所以两根线表示一个信号,只能半双工。是不是感觉和I2C很像?只是I2C规定好了主机怎么管理从机,在编程RS485时完全可以仿照I2C的主从逻辑,避免冲突。
一般也还是要在MCU后接一个TTL转485的芯片(单端传差分),比如MAX485
RS422
EIA-422(过去称为RS-422)是一系列的规定采用4线,全双工,差分传输,多点通信的数据传输协议,它定义了接口电路的特性。它采用平衡传输采用单向/非可逆,有使能端或没有使能端的传输线。和RS-485不同的是EIA-422不允许出现多个发送端而只能有多个接受端。硬件构成上EIA-422 (RS-422)相当于两组EIA-485(RS-485),即两个半双工的EIA-485(RS-485)构成一个全双工的EIA-422(RS-422)。一个主设备(Master),其余为从设备(Slave),从设备之间不能通信,所以RS-422支持点对多的双向通信。接收器输入阻抗为4k,故发端最大负载能力是10x4k+100Ω(终接电阻)。
RS-422和RS-485电路原理基本相同,都是以差动方式发送和接受,不需要数字地线。差动工作是同速率条件下传输距离远的根本原因,这正是二者与RS232的根本区别,因为RS232是单端输入输出,双工工作时至少需要数字地线。发送线和接受线三条线(异步传输),还可以加其它控制线完成同步等功能。
RS-422通过两对双绞线可以全双工工作收发互不影响,而RS485只能半双工工作,发收不能同时进行,但它只需要一对双绞线。RS422和RS485在19kpbs下能传输1200米。用新型收发器线路上可连接台设备。
RS-422的电气性能与RS-485完全一样。主要的区别在于:RS-422有4根信号线:两根发送(Y、Z)、两根接收(A、B)。由于RS-422的收与发是分开的所以可以同时收和发(全双工);RS-485有2根信号线:发送和接收。
- Author:黄光灿
- URL:guangcan.icu/article/10a698a0-fad5-803e-aac3-fd591e8c2596
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!