串行通信技术基础知识
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串行通信技术基础
在串行通信中,参与通信的两台或多台设备通常共享一条物理通路。发送者依次逐位发送一串数据信号,按一定的约定规则为接收者所接收。由于串行端口通常只是定义了物理层的接口规范,所以为确保每次传送的数据报文能准确到达目的地,使每一个接收者能够接收到所有发向它的数据,必须在通信连接上采取相应的措施。
由于借助串行通信端口所连接的设备在功能、型号上往往互不相同,其中大多数设备出了等待接收数据之外还会有其他的任务,例如,一个数据采集单元需要周期性地收集和存储数据;一个控制器需要负责控制计算机或向其他设备发送报文;一台设备可能会在接收方正在进行其他任务时向它发送信息。因此,必须有能应对多种不同工作状态的一系列规则来保证通信的有效性。这里所讲的保证串行通信的有效性的方法包括:使用轮询或者中断来检测、接收信息;设置通信帧的起始、停止位;建立连接握手;实行对接收数据的确认、数据缓存以及错误检查等。
一、串行通信基本概念
1、连接握手
通信帧的起始位可以引起接收方的注意,但发送方并不知道,也不能确定接收方是否已经做好了接收数据的准备。利用连接握手可以使收发双方确认已经建立了连接关系,接收方已经做好准备,可以进入数据收发状态。
连接握手过程是指发送者在发送一个数据块之前使用一个特定的握手信号来引起接收者的注意,表明要发送数据,接收者则通过握手信号回应发送者,说明它已经做好了接收数据的准备。
连接握手可以通过软件,也可以通过硬件来实现。在软件连接握手中,发送者通过发送一个字节表明它想要发送数据;接收者看到这个字节的时候,也发送一个编码来声明自己可以接收数据;当发送者看到这个信息时,便知道它可以发送数据了。接收者还可以通过另一个编码来告诉发送者停止发送。
在普通的硬件握手中,接收者在准备好了接收数据的时候将相应的握手信号线变为高电平,然后开始全神贯注地监视它的串行输入端口的允许发送端。这个允许发送端与接收者已准备好接收数据的信号端相连,发送者在发送数据之前一直在等待这个信号变化。一旦得到信号说明接收者已处于准备好接收数据的状态,便开始发送数据。接收者可以在任意时候将握手信号变为低电平,即便是在接收一个数据块的过程中间也可以把这根导线带入到低电平。当发送者检测到这个低电平信号时,就应该停止发送。而在完成本次传输之前,发送者还会继续等待握手信号线在此变为高电平,以继续被中止的数据传输。
2、确认
接收者为表明数据已经收到而向发送者回复信息的过程称为确认。有的传输过程可能会收到报文而不需要向相关节点回复确认信息。但是在许多情况下,需要通过确认告之发送者数据已经收到。有的发送者需要根据是否收到信息来采取相应的措施,因而确认对某些通信过程是必需的和有用的。即便接收者没有其他信息要告诉发送者,也要为此单独发一个数据确认已经收到的信息。
确认报文可以是一个特别定义过的字节,例如一个标识接收者的数值。发送者收到确认报文就可以认为数据传输过程正常结束。如果发送者没有收到所希望回复的确认报文,它就认为通信出现了问题,然后将采取重发或者其它行动。
3、中断
中断是一个信号,它通知CPU有需要立即响应的任务。每个中断请求对应一个连接到中断源和中断控制器的信号。通过自动检测端口事件发现中断并转入中断处理。
许多串行端口采用硬件中断。在串口发生硬件中断,或者一个软件缓存的计数器到达一个触发值时,表明某个事件已经发生,需要执行相应的中断响应程序,并对该事件做出及时的反应。这种过程也称为事件驱动。
采用硬件中断就应提供中断服务程序,以便在中断发生时让它执行所期望的操作。很多微控制器
为满足这种应用需求而设置了硬件中断。在一个事件发生的时候,应用程序会自动对端口的变化做出
响应,跳转到中断服务程序。例如发送数据,接收数据,握手信号变化,接收到错误报文等,都可能
成为串行端口的不同工作状态,或称为通信中发生了不同事件,需要根据状态变化停止执行现行程序
而转向与状态变化相适应的应用程序。
外部事件驱动可以在任何时间插入并且使得程序转向执行一个专门的应用程序。
4、轮询
通过周期性获取特征或信号来读取数据或发现是否有事件发生的工作过程称为轮询。它需要足够
频繁地轮询端口,以便不遗失任何数据或事件。轮询的频率取决于对事件快速反应的需求以及缓存区
的大小。
轮询通常用于计算机与I/O端口之间较短数据或字符组的传输。由于轮询端口不需要硬件中断,
因此可以在一个没有分配中断的端口运行此类程序。很多轮询使用系统计时器来确定周期性读取端口
的操作时间。
5、差错检验
数据通信中的接收者可以通过差错检验来判断所接收的数据是否正确。冗余数据校验、奇偶校验、校验和、循环冗余校验等都是串行通信中常用的差错检验方法。
(1)冗余数据校验
发送冗余数据是实行差错检验的一种简单办法。发送者对每条报文都发送两次,有接收者根据这
两次收到的数据是否一致来判断本次通信的有效性。当然,采用这种方法意味着每条报文都要花两倍
的时间进行传输。在传送短报文时经常会用到它。许多红外线控制器就使用这种方法进行差错检验。
(2)奇偶校验
串行通信中经常采用奇偶校验来进行错误检查。校验位可以按奇数位校验,也可以按偶数位校验。许多串口支持5~8个数据位再加上奇偶校验位的工作方式。按数据位加上奇偶校验位共有偶数个0的
规则填写校验位的方式称为偶校验;而按数据位加上奇偶校验位共有奇数个0的规则填写的校验位方
式称为奇校验。
接收方检验接收到的数据,如果接收到的数据违背了事先约定的奇偶校验的规则,不是所期望的
数值,说明出现了传输错误,则向发送方发送出错通知。
(3)校验和
另一种差错检验的方法是在通信数据中加入一个差错检验字节。对一条报文中的所有字节进行数
学或者逻辑运算,计算出校验和。将校验和形成的差错检验字节作为该报文的组成部分。接收端对收
到的数据重复这样的计算,如果得到了一个不同的结果,就判定通信过程发生了差错,说明它接收到
的数据与发送数据不一致。
一个典型的计算校验和的方法是将这条报文中所有的字节值相加,然后用结果的最低字节的补码
作为校验和。校验和通常只有一个字节,因而不会对通信量有明显的影响,适合在长报文的情况下使用。但这种方法并不是绝对的安全,会存在很小的概率的判断失误。那就是即便在数据并不完全吻合
的情况下有可能出现得到的校验和一致,将有差错的通信过程判断为没有发生差错。
循环冗余校验(CRC)也是串行通信中常用的检错方法,它采用比校验和更为复杂的数学计算,
器校验结果也更加可靠。
(4)出错的简单处理
当一个节点检测到通信中出现的差错或者接收到一条无法理解的报文时,应尽量通知发送报文的
节点,要求它重新发送或者采取别的措施来纠正。
经过多次重发,如果发送者仍不能纠正这个错误,发送者应该跳过对这个节点的发送,发布一条
出错信息,通过报警或者其他操作来通知操作人员发生了通信差错,并尽可能继续执行其他任务。
接收者如果发现一条报文比期望的报文要短,应该能最终停止连接,并让主机知道出现了问题,