首页 理论教育串行通信基本概念及应用技术

串行通信基本概念及应用技术

【摘要】:通过自动检测端口事件发现中断并转入中断处理。冗余数据校验、奇偶校验、校验和、循环冗余校验等都是串行通信中常用的差错检验方法。奇偶校验串行通信中经常采用奇偶校验来进行错误检查。校验和通常只有一个字节,因而不会对通信量有明显的影响。CRC循环冗余校验也是串行通信中常用的检错方法,它采用比校验和更为复杂的数学计算,其校验结果也更加可靠。

1.连接握手

通信帧的起始位可以引起接收方的注意,但发送方并不知道,也不能确认接收方是否已经作好了接收数据的准备。利用连接握手可以使收发双方确认已经建立了连接关系,接收方已经作好准备,可以进入数据收发状态。

连接握手过程是指发送者在发送一个数据块之前使用一个特定的握手信号来引起接收者的注意,表明要发送数据,接收者则通过握手信号回应发送者,说明它已经作好了接收数据的准备。

连接握手可以通过软件,也可以通过硬件来实现。在软件连接握手中,发送者通过发送一个字节表明它想要发送数据;接收者看到这个字节时,也发送一个编码来声明自己可以接收数据;当发送者看到这个信息时,便知道它可以发送数据了。接收者还可以通过另一个编码来告诉发送者停止发送。

在普通的硬件握手方式中,接收者在准备好接收数据的时候将相应的握手信号线变为高电平,然后开始全神贯注地监视它的串行输入端口的允许发送端。这个允许发送端与接收者的已准备好接收数据的信号端相连,发送者在发送数据之前一直在等待这个信号的变化。一旦得到信号,说明接收者已处于准备好接收数据的状态,便开始发送数据。接收者可以在任何时候将握手信号线变为低电平,即便是在接收一个数据块的过程中间也可以把这根导线带入到低电平。当发送者检测到这个低电平信号时,就停止发送。而在完成本次传输之前,发送者还会继续等待握手信号线再次变为高电平,以继续被中止的数据传输。

2.确认

接收者为表明数据已经收到而向发送者回复信息的过程称为确认。有的传输过程可能会收到报文而不需要向相关节点回复确认信息。但是在许多情况下,需要通过确认告知发送者数据已经收到。有的发送者需要根据是否收到确认信息来采取相应的措施,因而确认对某些通信过程是必需的和有用的。即便接收者没有其他信息要告诉发送者,也要为此单独发一个数据确认已经收到信息。

确认报文可以是一个特别定义过的字节,如一个标识接收者的数值。发送者收到确认报文就可以认为数据传输过程正常结束。如果发送者没有收到所希望回复的确认报文,它就认为通信出现了问题,然后将采取重发或者其他行动。

3.中断

中断是一个信号,它通知CPU有需要立即响应的任务。每个中断请求对应一个连接到中断源和中断控制器的信号。通过自动检测端口事件发现中断并转入中断处理。

许多串行端口采用硬件中断。在串口发生硬件中断,或者一个软件缓存的计数器到达一个触发值时,表明某个事件已经发生,需要执行相应的中断响应程序,并对该事件作出及时的反应。这种过程也称为事件驱动。

采用硬件中断就应该提供中断服务程序,以便在中断发生时让它执行所期望的操作。很多微控制器为满足这种应用需求而设置了硬件中断。在一个事件发生的时候,应用程序会自动对端口的变化作出响应,跳转到中断服务程序。例如,发送数据、接收数据、握手信号变化、接收到错误报文等,都可能成为串行端口的不同工作状态,或称为通信中发生了不同事件,需要根据状态变化停止执行现行程序而转向与状态变化相适应的应用程序。

外部事件驱动可以在任何时间插入并且使程序转向执行一个专门的应用程序。

4.轮询

通过周期性地获取特征或信号来读取数据或发现是否有事件发生的工作过程称为轮询。它需要足够频繁地轮询端口,以便不遗失任何数据或者事件。轮询的频率取决于对事件快速反应的需求以及缓存区的大小。

轮询通常用于计算机与I/O端口之间较短数据或字符组的传输。由于轮询端口不需要硬件中断,因此,可以在一个没有分配中断的端口运行此类程序。很多轮询使用系统计时器来确定周期性读取端口的操作时间。(www.chuimin.cn)

5.差错检验

数据通信中的接收者可以通过差错检验来判断所接收的数据是否正确。冗余数据校验、奇偶校验、校验和、循环冗余校验等都是串行通信中常用的差错检验方法。

(1)冗余数据校验

发送冗余数据是实行差错检验的一种简单办法。发送者对每条报文都发送两次,由接收者根据这两次收到的数据是否一致来判断本次通信的有效性。当然,采用这种方法意味着每条报文都要花两倍的时间进行传输。在传送短报文时经常会用到它。许多红外线控制器就使用这种方法进行差错检验。

(2)奇偶校验

串行通信中经常采用奇偶校验来进行错误检查。校验位可以按奇数位校验,也可以按偶数位校验。许多串口支持5~8个数据位再加上奇偶校验位的工作方式。按数据位加上校验位共有偶数个0的规则填写校验位的方式称为偶校验;而按数据位加上校验位共有奇数个0的规则填写校验位的方式称为奇校验。

接收方检验接收到的数据,如果接收到的数据违背了事先约定的奇偶校验的规则,不是所期望的数值,说明出现了传输错误,则向发送方发送出错通知。

(3)校验和

此种差错检验方法是在通信数据中加入一个差错检验字节。对一条报文中的所有字节进行数学或者逻辑运算,计算出校验和。将校验和形成的差错检验字节作为该报文的组成部分。接收端对收到的数据重复这样的计算,如果得到了一个不同的结果,就判定通信过程发生了差错,说明它接收到的数据与发送的数据不一致。

一个典型的计算校验和的方法是将这条报文中所有字节的值相加,然后用结果的最低字节的补码作为校验和。校验和通常只有一个字节,因而不会对通信量有明显的影响。适合在长报文的情况下使用。但这种方法并不是绝对安全的,会存在很小概率的判断失误。那就是即便在数据并不完全吻合的情况下有可能出现得到的校验和一致,将有差错的通信过程判断为没有发生差错。

CRC循环冗余校验也是串行通信中常用的检错方法,它采用比校验和更为复杂的数学计算,其校验结果也更加可靠。

(4)出错的简单处理

当一个节点检测到通信中出现的差错或者接收到一条无法理解的报文时,应该尽量通知发送报文的节点,要求它重新发送或者采取别的措施来纠正。

经过多次重发,如果发送者仍不能纠正这个差错,发送者应该跳过对这个节点的发送,发布一条出错消息,通过报警或者其他操作来通知操作人员发生了通信差错,并尽可能继续执行其他任务。

接收者如果发现一条报文比期望的报文要短,应该能最终停止连接,并让主计算机知道出现了问题,而不能无休止地等待一个报文结束。主计算机可以决定让该报文继续发送、重发或者停发,不应因发现问题而让网络处于无休止的等待状态。