串行通信概述及相关基础概念

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37385181/article/details/83210610

目录

 

串行通信概述

数据在计算机中的存放格式

双向通信

握手

同步和异步通信

串口通信设置中的基础概念

串口通信设置中的故障排除


串行通信概述

为使两个设备能够进行通信,必须先将它们连接起来,然后由一方发送电信号,另一方接收电信号。既可以直接将两个设备连接起来实现直接通信,也可以借助介质实现间接通信。此类介质通常为公共电话系统,这种情况下要用调制解调器在一端将原始信号转换为适合在长距离电话线上传输的调制信号,而在另一端又将它们转换回原始信号。其他介质,如光纤和无线电传输也常使用。使计算机能够利用这些介质进行通信的设备可以像传统的串行设备一样被连接。

差不多所有的计算机都采用并行方式存储和操作数据。这就意味着当一个字节从计算机的一个地方送到计算机的另一个地方时,不是一次一个位一个位地传送,而是用并行方式沿多线同时传递多个位。从机器到机器传送并行的位数可能是不同的,但一般是8位或8位的倍数。因此,一个计算机能工作在至少一个字节,通常两个字节,甚至多个字节的情况下。
            因此一个计算机与很多其他设备通信时串行进行的,即一位一位地传送,一个通信接口必须能够分别将所有位一次一个一个地发送,也应该能够将字节按并行方式接收下来。
            正如我们看到的那样,数据链路用串行方式通信时,只能是MARK或者是SPACE,在直接连接时分别对应一个负电压和一个正电压。任何一个传输数据必须转换成一个MARK核SPACE序列。为这个传输目的,一个MARK代表一个1,一个SPACE代表一个0.

数据在计算机中的存放格式

  • 位和字节

            在十进制计数器中有10个数字,在二进制中只有两个数字。 差不多所有的计算机都工作在二进制方式下,因为二进制的代码1和0容易用帧电压或负电压来表示。在多数计算机中,存储器的最小单位是字节,它是由存储器地址字节表示的。

  • 编码文本

            当文本(字母字符,标点符号等)在计算机中存储时,每个不同的字符都用不同的数值来表示。有两种不同的编码方法:EBCDIC,主要用于除IBM PC系列以外的IBM计算机上; ASCII,主要用在其他计算机上。
           正式的ASCII码表给出数值从32~126个代表数、字母、标点符号和其他通用符号。数值从0~31以及127都有特殊含义。

  • 非文本编码

            当然,并不是所有信息都用文本形式在计算机中存储,例如指令文件、数字数据和图形图像就不是用ASCII形式存储的。 这些类型数据通常使用一个字节所具有256种可能组合方法来编码。数值用二进制形式存储,可占用几个字节。程序指令通常由一个或两个字节组成。在通信领域里,我们常常把这种类型资料叫做二进制数据。
          由于非文本数据可以使用一个字节的任何位组合值,所以它们与ASCII编码表中有专门意义的值是一致的。如果你正在传送数据,你的接收设备正好接收到一个非文本字节解释为信息结束的字节,那就可能引起混乱,在这种情况下,这种数据就不能以它们原型传送,因为在信息中间的一个字节可能偶然地和传输块结束字母一致,那你的接收设备就会停止接收。
 


双向通信


            通常,数据是在两个方向上传输的。当两台计算机互相进行通信,或者使用软件握手信号时都会发生上述两个方向相互传输,构成这种双向通信所需的最少接口线数为三条:两个方向上数据传输线,信号地线。另外还要在每个方向上附加一个握手线,这样总共需五条线。
 

握手

在很多情况下,传送设备一方需要知道接收设备一方是否做好接收准备。举例说,你可能向打印机送数据,其传递速度可能比打印机的打印速度快,这时打印机需要使计算机的输出字符停下来,知道打印机做好接收数据的准备。同样地,你可能从一台计算机向另一台计算机传送数据,接收数据的计算机不可能像输入速度一样快的处理它们,因而也需要通知对方有关接收情况。
            在上述这两种情况下,用来表示接收设备是否准备好的信息必须从接收设备送回来。这个信息被称为流量控制(flow control)或握手(handshaking)。 有两种握手类型:硬件握手和软件握手。两种握手都要用到从接收设备回到传输设备的信号。

  • 硬件握手

使用硬件握手时,只要接收设备准备好,他就沿着专用的握手电路传达一个正电压给传递设备。当发送计算机接收到一个负电压时,它就将停止数据的发送。为了构成硬件握手,至少还要增加一条传送握手信号的电路,这样,为了完成单向通信需要有三条电路:传送数据线,信号地线,握手线。
           硬件握手是使用专门的握手电路去控制数据的传输。DCE设备常使用DSR(Date Set Ready)作为一个主握手线去通知DTE它已具备接收数据的能力并且已准备好。它们可以使用CTS(Clear To Send)作为辅助握手线。另一方面,DTE设备使DTR(Data Terminal Ready)作为主握手线去通知DCE它已经做好接收数据的准备,也可以将RTS(Request To Send)作为一个辅助握手线。
           根据惯例,当传输线被使能时,这些握手线上具有正电压,当需要发送挂起时这些握手线变为负电压。

 

  • 软件握手

用软件握手时,由于握手信号是由特殊字符组成,所以传送这些字符使用数据电路,而不使用握手电路。
            软件握手信号是在数据线(TXD和RXD,线2和线3)上传送的,用来代替硬件握手中在专门握手线上传送的握手信号。这种方法用在直接连接或通过调制解调器连接的两台计算机相互进行双向通信的场合。
            对于软件握手,人们已经建立了一些标准协议,最通用的是XON/XOFF协议。


        协议一:XON/XOFF
            在XON/XOFF协议下,要想发送设备停止数据发送,接收设备只需要发送一个ASCII字符DC3(十进制的19,十六进制的13)给发送设备。
            如果要想恢复发送设备继续发送数据,则接收设备需发送一个DCI(十进制17,十六进制11)。
            
        协议二:ETX/ACK
            在EXT/QCK(End-of-Transmission/Acknowledge)方法中,数据被分批发送,每批长度固定不变。每批发送完了之后,发送设备接着发送一个ETX字符ASCII3,接收端要对发送端做响应的表示,如果正确地接受了这字符就回答一个ACK,ASCII6;如果接收端检测出错误,则回答一个NAK(Negative Acknowledge), ASCII21。
            
            

  •       硬件和软件结合的握手方法

            假设你使用个人计算机或终端通过调制解调器和主计算机进行通信。你的调制解调器可能使用硬件握手方法和你的计算机练习,同样主计算机和它的调制解调器之间也使用硬件握手方法。但主计算机和你的计算机之间将使用软件握手方法进行联系。

 

同步和异步通信


          将数据转换成串行通信有两种方式:同步方式或异步方式。
          当通过种种类型的键盘进行数据传送时,差不多总是使用串行方式发送和接收数据。一个人在键盘上操作时,不可能既保持均匀速度又保持连续;因此,计算机收到一封信时,在各字符之间会出现不同的间隔。如果单独的一封信被串行方式传输,正如在键盘上那样输入时,字符之间无规律的间隔,使接收设备不可能正确接收,因为每接收一个字符之后都不能确切地告诉下一个被接受的字符从何时开始。这就需要在每个字符的头,加上一个比特用来指示一个字符的开始和结束。这些额外的比特被称为开始比特和停止比特,有时也经常加上一个称为奇校验的错误校验比特,这样的方法被称为异步通信。
    
         当被发送字符以块为单位时,则他们能被有规则的分割开来。它不再需要在每个字符的首尾附加开始和停止比特,因为一旦收到首字符时,接收设备能确切地预计接收后续字符的首尾附加开始和停止比特,因为一旦收到首字符时,接收设备能确切地预计接收后续字符的位置。也就是说,接收设备能自动同发送计算机同步。这种通信方式叫做同步通信。
         因为异步通信需要在每个字符的首尾附加开始和停止比特,和同步通信相比,异步通信每传送一个文件需要多花费20%的时间。这种区别在人工键盘输入为信源通信时并不明显,因为人工键盘的输入速度并没有传输字符的速度快。
         除了IBM主机终端使用同步终端外,大多数使用异步终端。这种异步通信应用在计算机、终端及UNIX系统之间。

 

串口通信设置中的基础概念

             在串行异步通信情况下,构成一个字节的那些数据单元被称为数据位,在数据位的前后要加上起始位、停止位和奇偶校验位。这个过程被叫做帧。
             一个字符所使用的位数根据不同协议而不同。称这些位数为字符位数据或字长。通常不是8位就是7位。每发送一个字符,就发送一个组,这个组包含一个起始位字符(数据位),可选的奇偶校验比特,一个或更多个停止位。为了清除起见,我们将构成每个字符及伴随的位作为一帧。字符这个词可能引起混乱,有时指数据位为字节,有时称所有包括起始位、停止位、奇偶校验位全组为字符。

  • 起始位

             起始位总是加在帧开始,为的是提醒接收设备接收数据,起到同步作用并在接收数据位过程中将其分离出去。一个起始位是一个SPACE或二进制0.在直接连接情况下,一个SPACE或0被当做一个正电压传输,两帧之间页式负电压,因此,在每一帧开始,电压都是从负电压向正电压变化。

  • 数据位

             串行通信标准,也叫串行通信协议,允许传输字符或字长度不同,如果通信软件要求你选择字长度时,你要么选择7位字符,要么选择8位字符(有时也选择其他字长,但非常少见)。如果所有的数据都用ASCII方式传输,7位字符是最充分的。不要忘记ASCII码表只分配0-127个数,所有这些字符能够用7位的字节来表示。
             如果要传输非ASCII数据,需要用到一个字节的所有8位,除非你将该数据转换成7位形式,否则你不能使用7位协议。
             数据位被传输时从一个字符的最低数据位开始,最高数据位在最后。如果你正常的键入或写入数据时,那么最后键入的将是最先发送。例如字母C在ASCII表中是十进制的67,二进制的01000011,但是传输的是11000010.

  • 奇偶校验位

            奇偶校验是校验正在传输的数据是否正确被接收的一种方法。发送设备将根据数据位的内容附加一个位0或1.接收设备检查此奇偶位是否还保持与其他位的正确关系,但是不保持正确关系,那么在传输过程中可能产生了错误。奇偶校验可能有如下几种方法:
            偶校验,意指数据位中1的个数再加上奇偶校验位(1或 0)使1的总数为偶数。例如字母A的二进制是0100001,其中1的个数是偶数,则奇偶校验位应为0,使总的1的个数保持偶数。如果收到字母A的二进制序列中的个数不是偶数个,那就意味着在传输中产生了错误

           奇校验,意指数据位中1的个数再加上奇偶校验位(1或0),使其1的个数总和为奇数。例如字母A,为保持1的个数为奇数,则奇偶位应为1,即1的总数为3,奇数。
           无校验,是指没有奇偶校验位。一个奇偶校验位并不总是被使用的,这是接收设备并不去检测奇偶位,甚至即使你已经使用奇偶校验位,这完全依赖通信编程来控制。
          SPACE(或零)校验,(有时称为位平衡)是由一位奇偶校验位,但是它总是0.SPACE校验提供一些错误类型检验方法,因为严格筛选出的奇偶位在传输过程中会变成1,这就提示出了某种类的错误。
    
           SPACE校验能用在要求擦混熟8位字符的接收设备,而发送使用7位字符。接收设备将数据字的最后一个比特解释为奇偶校验位。如果所有的字符被按标准的ASCII发送,则第8位永远不使用,所以在那个位置上的一个0是无意义的。
    
            MARK校验(有时称为位扰动)的工作方法和SPACE校验的方式相同,只是校验位总是1,因为那个位置上的一个1可以被解释为一个附加校验位,设备或接收计算机必须依靠编程来忽视它。
    
    

  •  停止位

             在每个帧的末尾总要发送一个停止位,这个停止位可以是1位,1.5位或两位,最常见的是1位。这就保证了在每一帧之后都是负电位,而下一帧可以通过开始位的正电位来识别。超过一个停止位通常用于这样的场合:在处理下一个即将进来的字符之前接收设备要求附加时间。
             1个半位在时间上要比常规长许多,这样在两机之间停止位增加了间隔,它们被当做二进制的1来发送,在直接连接的情况下,等于一个负电位。
             2个停止位通常使用在110波特低速传输系统中,这是一个要求连续的老式的电报终端,它使用低波特率并且要求额外字符处理时间。
            

  • 中断

            正如以前对起始位说明的那样,两个字符之间数据线通常处在MARK状态(负电压,二进制1)。如果一个由全零组成的字符,它应当有8个数据位、一个校验位、一个SPACE总共是10个位,最大SPACE条件应当是在一个停止位到达时结束,并且是一负电位。这样在每秒150位时,一个典型SPACE条件最低应当超过1/150秒,或者66.67微秒。
            
            一个最长空格条件,通常是100到600微秒,被用来作为一个叫做中断的专门信号,这个中断信号有时被用在主机中,等效于PC机中的Ctrl-C. 它可以中断正在运行的程序并使用户回到操作系统,或者进入程序菜单的上一级中去。中断(BREAK)和Ctrl-C一样,常用来从正在运行的死循环程序中退出来。
    

  • 波特率

            波特率说明在一秒钟的离散信号数,它是用法国通信学科开创者波特的名字命名的。对于二进制通信来说,就是指每秒传输的二进制位数。波特和位由很大区别,但是常常被弄错。差不多有20万人会告诉你,它有一个1200波特的调制解调器,但是真的没有一个人知道他的调制解调器中只是1200bps。
            在两个RS-232直接连接时,一个信号在任何时间里只使用两种状态的一种,所以这时的波特率和位率是相同的概念。无论如何,当一个信号在两个调制解调器之间传送时,可能用多个状态信号中的一个。信号长度可以是1/600秒(600波特),但是由于一个状态可能携带超过2位信息被传送,则位率将比波特率高。要注意无论是波特率还是bps都涉及到在一个信号帧内传递信息的位速率。两帧之间的间隔可以变化,因为字符是使用不同速度输入的。因此,所提到的无论波特率还是bps都是指真正被传送的信息。
            
            一般典型使用的bps有110,150,300,600,1200,2400,4800,960和19200.在调制解调器中最普遍使用的是1200和2400,1200是计算机和打印机进行通信使用的一种速率,而9600是计算机和终端之间使用的速率。

 

串口通信设置中的故障排除

当两个设备要进行互相通信时,一定要对它们进行设置,即使用相同的速率、字长、停止位数和奇偶位类型等。如果你什么也没有收到,那可能是物理连接出了问题;数据线断了,或者是接错了,还是握手信息没有正确收到?错误可能由下面一些原因引起
        

  • 波特率失配

            如果两个设备的波特率设置不同,则接收设备还是企图解释数据,至少程序报告校验错和帧错。接收字符数和发送字符数不相符合这个事实是判断此类错误的最简单的方法。
        

  • 校验错误

            一个奇偶错误,严格地来说,是指数据在传输中被破坏。无论如何,它也能说明两个设备的奇偶位类型设置不同,或者字长不同。
            

  • 字长不匹配

            如果发送的是8位字长,接收采用7位字长,这个区别在文本传输时可能不会引起你的注意,因为前7位在任何情况下都是有效的。这主要是因为位0首先被发送,而位7在ASCII传输中本来就被忽略不用,所以就不显得那么重要,但是无论如何接收设备视图将附加位作为校验位来解释,并且要报告一个错误。所以,一个校验错不用说,一定是在传输中数据被破坏了;这也就可能指示着字长不匹配。
            
            如果发送的是7位字长,而接收还希望用8位字长,那么可能校验位被处理成缺少的第8个位。通常,一半字符的奇偶校验位是1,另一半为0,这时你将发现接收设备显示的是扩展编码字符,如图形字符,代替一半的接收字符。
            

  • 停止位出错

            如果接收端要求一个停止位,而发送端发送了两个停止位,这可能不会有什么问题,这个附加多余位,可能被简单的合并成允许的两个字符之间的分隔符号。但如果要求两个停止位,而你只发送一个停止位,这可能会出现问题,这是接收设备特性决定的。如果使用调制解调器,这可能不被认为是一个问题。
            

  • 帧错

            一个帧的错误,是指位数不匹配。这种类型错误,通常在要求的停止位没有收到时才出现。

猜你喜欢

转载自blog.csdn.net/qq_37385181/article/details/83210610