天天看点

串口通信基础(二)——传输方式(方向)、错误校验、传输速率与传输距离一、串口通信简介二、串行通信的传输方向三、串行通信的错误校验四、传输速率与传输距离

一、串口通信简介

串口通信,顾名思义也就是利用串行接口进行通信。串行接口指串口按位(bit)发送和接收字节。尽管比按字节(byte)传输的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。

串口通信中比较重要的参数包括波特率、数据位、停止位及校验位,通讯双方需要约定一致的数据格式才能正常收发数据。串行通讯根据通信双方的分工和信号传输方向可以进一步分为单工、半双工和全双工三种。在串口通信中,常用的协议包括RS-232、RS-422和RS-485。它们的主要区别在于其各自的电平范围不相同。

二、串行通信的传输方向

数据通信中,数据在线路上的传送方式(方向)可以分为:单工通信、半双工通信和全双工通信三种。

1 单工(Simplex Communication )

单工模式通信使用一根传输线,其数据传输是单向的,仅能沿一个方向,不能实现反向传输,即通信双方发送端和接收端的身份是固定的。通信双方中,一方固定为发送端,一方则固定为接收端。

  • 例子:早期的电视,广播,打印机

2 半双工(Half Duplex Communication)

半双工模式通信一般使用一根(或一对)传输线,数据可以沿两个方向传输,既可以发送数据又可以接收数据,但不能同时进行发送和接收,同一时刻只允许单方向传送。因此又被称为双向交替通信。数据传输允许数据在两个方向上传输,但是,在任何时刻只能由其中的一方发送数据,另一方接收数据。

半双工模式收发两端都有发送器和接收器,通过收/发开关转接到通信线上。半双工通信中每端需有一个收发切换电子开关,若要改变传输方向,需由开关进行切换,通过切换来决定数据向哪个方向传输。由于要频繁切换信道方向,会产生时间延迟,故传输效率低些,但可以节约传输线路。半双工方式适用于终端与终端之间的会话式通信。

  • 例子:对讲机,RS485

3 全双工(Full Duplex Transmission)

全双工模式通信指数据由两根不同的数据线(可能还需要控制线、状态线、地线)传送,可以同时进行双向传输。即数据的发送和接收分流,通信双方都能在同一时刻进行发送和接收操作。从功能角度方面讲,全双工通信相当于两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。因此,通信系统的每一端都设置了发送器和接收器,来控制数据同时在两个方向上传送。

与半双工模式相比,全双工可同时进行数据收发,且无需进行方向的切换,没有切换操作所产生的时间延迟。 显然,在其它参数都一样的情况下,全双工比半双工传输速度要快,信息传输效率要高。这对那些不能有时间延误的交互式应用(例如远程监测和控制系统)十分有利。

  • 例子:手机通话,RS422,RS232

三、串行通信的错误校验

在通信过程中往往要对数据传送的正确与否进行校验。校验是保证准确无误传输数据的关键。常用的校验方法有奇偶校验、代码和校验及循环冗余码校验。

(1)奇偶校验

在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。

(2)常用算法校验

代码和校验是发送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。

(3)循环冗余校验

这种校验是通过某种数学运算实现有效信息与校验位之间的循环校验,常用于对存储区的完整性、磁盘信息的传输校验等。

1 奇偶校验

奇偶校验指的是在发送数据时,利用数据中“1”的个数是奇数或偶数作为检测错误的标志。通常在数据位后面设置1位奇偶校验位(1或0),用它使这组代码中“1”的个数为奇数或偶数。奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。接收学符时,接收端对数据位“1”的个数进行校验,若发现发送端结果与不一致,则说明传输数据过程中出现了错误。此时接收端可以向发送端发送请求,要求重新发送一遍数据。

  • 奇校验:此时奇偶校验位的作用就是保证所有数据位加奇偶校验位的所有比特位中值为1的比特位的个数为奇数。

    若数据位中共有奇数个值为1的比特位,则此时奇偶校验位的值为0。

    若数据位中共有偶数个值为1的比特位,则此时奇偶校验位的值为1。

  • 偶校验:此时奇偶校验位的作用就是保证所有数据位加奇偶校验位的所有比特位中值为1的比特位的个数为偶数。

    若数据位中一共有奇数个值为1的比特位,则此时奇偶校验位的值为1。

    若数据位中一共有偶数个值为1的比特位,则此时奇偶校验位的值为0。

例子:

假设传输的数据位为01001100,如果是奇校验,则奇校验位为0(确保总共有奇数个1);如果是偶校验,则偶校验位为1(要确保总共有偶数个1)。

优缺点:

奇偶校验的缺点很明显,首先,它对错误的检测概率大约只有50%。因为只有奇数个数据位发生变化能检测到,如果偶数个数据位发生变化则无能为力了。另外,每传输一个字节都要附加一位校验位,对传输效率有较大影响。因此,在高速数据通讯中很少采用奇偶校验。奇偶校验可以发现错误,但不能纠正错误,也就是说它只能告诉你出错了,但不能告诉你怎么出错了,一旦发现错误,只能重发。

奇偶校验优点也很明显,它很简单,因此可以用硬件来实现,这样可以减少软件的负担。因此,奇偶校验也被广泛的应用着。

2 常用算法校验

常用算法校验是指发送端将所发数据块进行累加和校验或异或校验,在数据块末尾附加一个字节的校验字符。接收端接收数据,同时对数据块(除校验字节外)进行不进位求和或字节异或,将所得的结果与发送端的“校验和”进行比较,相符则无差错,否则即认为传送过程中出现了差错。

例子-累加和校验:

累加和校验:

要传输的数据为:01H、55H、D3H

则进行不进位累加的校验和字节为:29H,即01H+55H=56H,56H+D3H=129H,舍去进位1,得29H。

这里 29H 就是前三个字节的累加校验和。接收端收到全部数据后对前三个数据进行同样的累加计算,如果累加和与最后一个字节相同的话就认为传输的数据没有错误。

异或就是对数据逐一异或计算(异或结果与下一个数据异或)。即接收端将所有字节(一般是两个16进制的字符)按位异或后,得到校验码后与发送端异或码的字符进行比较。相等即认为通信无错误,不相等则认为通信出错。

优缺点:

累加和校验由于实现起来非常简单,也被广泛的采用。虽然其检错率优于奇偶校验,但这种校验方式的检错能力也较为一般,例如累加的其中一个字节多1,另一个字节少1,累加和不变,将原本是错误的通讯数据误判为正确数据。异或校验同理。累加和校验、异或校验也不能纠正错误。

3 循环冗余校验

这种校验是通过某种数学运算实现有效信息与校验位之间的循环校验,常用于对磁盘信息的传输、存储区的完整性校验等。这种校验方法纠错能力强,广泛应用于同步通信中。

循环冗余码校验(Cyclical Redundancy Check, CRC)是利用除法和余数的原理来做错误侦测的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收端RX,RX对收到的数据重新计算CRC并与收到的CRC值相比较,若两个CRC值不同,则说明数据通信出现了错误,该数据包应该舍弃不用。

在远距离数据通讯中,为确保高效而无差错的传送数据,必须对数据进行校验控制,而CRC是对一个传送数据块进行校验,是一种非常高效的差错控制方法。目前,主流的CRC可以分为以下几个标准:CRC-12码;CRC-16码;CRC-CCITT码;CRC-32码。

CRC-12码通常用来传送6-bit字符串。CRC-16及CRC-CCITT码则用来传送8-bit字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。CRC-32码用途有限。

在数据存储和数据通信领域,CRC无处不在:著名的通信协议X.25的FCS(帧检错序列)采用的是CRC/CCITT,ARJ/LHA等压缩工具软件采用的是CRC32,磁盘驱动器读写采用的日式CRC16,通常用到的图像存储格式GIF/TIFF等也是采用CRC作为检错手段的。

四、传输速率与传输距离

数据传输速率指通信线上传输信息的速度,有比特率和波特率两种表示方法。比特率也称为信号速率,是指单位时间内所传送的二进制位代码的有效位数,以每秒多少比特计算,即bit/s;波特率是指调制速率,是脉冲信号经过调制后的传输速率,以波特(Baud)为单位,通常用于表示调制器之间传输信号的速率。

1 传输速率

比特率:每秒传输的二进制位数,也称为信号速率,单位为比特每秒(bit/s,bps)。

波特率:每秒传输的码元符号的个数(码元传输速率),也称为调制速率,单位是波特(B)。它是对符号传输速率的一种度量,它用单位时间内载波调制状态改变的次数来表示,1波特即指每秒传输1个符号。通过不同的调制方法可以在一个符号上负载多个比特信息。

比特率与波特的关系

即比特率在数值上和波特率有这样的关系:

I = S ∗ l o g 2 N I=S*{log_2{N}} I=S∗log2​N

其中I为比特率,S为波特率,N为每个符号承载的信息量(一个脉冲信号所表示的有效状态),而 l o g 2 N {log_2{N}} log2​N以比特为单位。即波特率与比特率的关系:比特率=波特率*单个调制状态对应的二进制位数。

一个以X波特传送信号的线路,其传送二进制数据的速率不一定是X比特/秒,因为每个码元符号需要通过几个比特来表示,所以运送一个符号等于运送了几个比特。在二进制中脉冲(二电平)只有两种状态0或1,即 n=“2”,也就是说,信号速率与调制速率是一致的。如果使用多电平脉冲信号传输信息,信号速率与调制速率就不一致了。例如,若使用0、1、2、3、4、5、6、7共8个电平级,则需要,即3个比特来表示一个信号值,因而这种条件下比特率将是波特率的3倍。(当用二进制位表示一个码元时与比特率相等)

例如假设数据传送速率为120符号/秒(symbol/s)(也就是波特率为120Baud),又假设每一个符号为八相调制(单个调制状态对应3个二进制位),则其传送的比特率为(120symbol/s) * (3bit/symbol)=360bps。只有在每个符号只代表一个比特信息的情况、或一些简单的调制方式下,例如基带二进制信号调制方式等,波特率与比特率才在数值上相等。 具体而言, 两相调制(单个调制状态对应1个二进制位)的比特率等于波特率;四相调制(单个调制状态对应2个二进制位)的比特率为波特率的两倍;八相调制(单个调制状态对应3个二进制位)的比特率为波特率的三倍,依次类推。

在串行通信中,单个调制状态对应的1个二进制位,因此比特率和波特率往往相同。可以用”波特率”来描述数据的传输速率,即每秒钟传送的二进制位数。它是衡量串行数据速度快慢的重要指标。典型的“波特率”是1200,4800,9600,14400,19200,28800,38400,57600,115200,230400,460800,921600等。有时也用”位周期”来表示传输速率,位周期是波特率的倒数。

举例:RS485/RS232

假设目前“波特率”为9600,指每秒传送9600个码元符号,则此RS485/RS232的传信率计算为 :

I = S ∗ l o g 2 N = 9600 ∗ l o g 2 2 I=S*{log_2{N}}=9600*log_2{2} I=S∗log2​N=9600∗log2​2=9600bit/s

通信线上所传输的字符数据(代码)是逐位传送的,1个字符由若干位组成,每一位即是一个码元。因此每秒钟所传输的字符数(字符速率)和波特率是两种概念。常有人把RS232的N误以为是每个“符号”(symbol)所夹带的信息量,但实际上每个“位元”(bit)即为一个“符号”(symbol)。

在串行通信中,所说的传输速率是指波特率,而不是指字符速率。

如在异步串行通信中,传输速率是9600b,而每个字符格式包含10位(1个起始位、1个停止位、0个校验位、8个数据位),这时每秒钟传送的字符数:9600/(1+8+0+1)=960个。

2 传输距离与传输速率的关系

串行通信直接传送串行信息位流的最大距离与传输速率和传输线的电气特性有关。通信速率和通信距离这两个方面是相互制约的,降低通信速率,可以提高通信距离。

串行通信中,数据位信号流在信号线上传输时,要引起畸变,畸变的大小与以下因素有关:

波特率——信号线的特征(频带范围)

传输距离——信号的性质及大小(电平高低,电流大小)

当畸变较大时,接收方出现误码。

在规定的误码率下,当波特率、信号线、信号的性质及大小一定时,串行通信的传输距离就一定。为了加大传输距离,必须加调制解调器。

当传输线使用每0.3m(约1英尺)有50PF电容的非平衡屏蔽双绞线时,传输距离随传输速率的增加而减小。当比特率超过1000 bps时,最大传输距离迅速下降,如9600 bps时最大距离下降到只有76m(约250英尺)。

串口通讯的距离

经实测,液晶显示屏控制 系统的RS232串行口在通讯波特率为28800bit/s时能够稳定传输达300米以上(传输介质为1箱五类线);当通讯距离大于 300米时,选择RS485通讯接口的液晶显示屏控制系统,此时只须在计算机的RS232串口端加配一个RS232/485转换器即可。

115200bps最好的距离在30-50米之间(和线、232芯片有关),再远就有误码啦。15米还是很容易超的。232谁也不敢用300米的。

传输电缆长度

由RS-232C标准规定在码元畸变小于4%的情况下,传输电缆长度应为50英尺,其实这个 4%的码元畸变是很保守的,在实际应用中,约有99%的用户是按码元畸变10-20%的范围工作的,所以实际使用中最大距离会远超过50英尺。

传输距离

由设备可提供端口的不同,故数据传输距离也不同。普通的RS232是常见的设备端口,其连接距离只有15米左右,如果连线设备距离相当远,则无法在使用RS232。采用RS424的设备,它的连接距离可达1000米。但当多个设备都是远距离时,给每个设备拉一条线会相当不方便,于是RS485便成为首选。RS485接口支持多个设备同时挂在一根导线上,它的总连线距离也可达1000米,而且一路上所有的设备都可以连接其上,相当方便。但它有一个限制:必须是半双工通信方式,即在同一时刻只能有一个设备进行数据发送,而其他设备只能接收。要保证这个条件必须依靠软件。

3、发送/接收时钟

在串行传输过程中,二进制数据序列是以数字信号波形的形式出现的,如何对这些数字波形定时发送出去或接收进来,以及如何对发/收双方之间的数据传输进行同步控制的问题就引出了发送/接收时钟的应用。

在发送数据时,发送器在发送时钟(下降沿)作用下将发送移位寄存器的数据按串行移位输出;在接收数据时,接收器在接收时钟(上升沿)作用下对来自通信线上串行数据,按位串行移入移位寄存器。可见,发送/接收时钟是对数字波形的每一位进行移位操作,因此,从这个意义上来讲,发送/接收时钟又可叫做移位始终脉冲。另外,从数据传输过程中,收方进行同步检测的角度来看,接收时钟成为收方保证正确接收数据的重要工具。为此,接收器采用比波特率更高频率的时钟来提高定位采样的分辨能力和抗干扰能力。

  

发送/接收时钟频率与波特率的关系:发/收时钟频率 =n*(发/收波特率 )

4、波特率因子

在波特率指定后,输入移位寄存器 / 输出移位寄存器在接收时钟 / 发送时钟控制下,按指定的波特率速度进行移位。一般几个时钟脉冲移位一次。要求:接收时钟/ 发送时钟是波特率的 16 、 32 或 64 倍。波特率因子就是发送/接收 1 个数据( 1 个数据位)所需要的时钟脉冲个数,其单位是个/位。如波特率因子为 16 ,则16 个时钟脉冲移位 1 次。 例:波特率 =9600bps ,波特率因子 =32 ,则接收时钟和发送时钟频率 =9600 × 32=297200Hz 。

参考:

【1】https://baike.baidu.com/item/%E6%B3%A2%E7%89%B9%E7%8E%87/2153185?fr=aladdin#reference-[3]-119333-wrap

【2】https://baike.baidu.com/item/%E7%A0%81%E5%85%83/10525003

【3】http://mayer.spaces.eepw.com.cn/articles/article/item/59707

继续阅读