APP下载

串口数据通信协议的问题分析

2013-08-20

科技视界 2013年23期
关键词:链路层通信协议接收端

田 赛

(宝鸡职业技术学院 电子信息工程系,陕西 宝鸡721000)

0 前言

串口通信协议用于完成双机互联程序的文件传输功能, 简称SPCP。 设计思想基于帧传输方式,即在向串口发送数据时是一帧一帧地发送。 为了保证可靠传输,通过握手建立连接,在每一帧的传输中,采用发送/应答/重连/失败方式。所谓通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。 它属于OSI 七层参考模型中的数据链路层。 由于RS-232 标准只是一个接门标准,它规定了连接电缆、机械、电气特性、信号功能及传送过程等,因此,在OSI 七层(包括 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)参考模型中只代表了物理层(Physical Layer)和数据链路层(Data Link Layer),如果想实现数据的双向访问,使通信双方能够按规定的格式从串口发送数据,同时也能从接收到的数据中将需要的信息提取出来,就需要设计用户通信协议,以进行数据处理。而用户层协议则是面向使用者的,这种用户层通信协议简单地讲就是对数据格式、同步方式、传送速度、传送步骤、数据校验、检纠错方式等问题做出统一规定,通信双方必须共同遵守。

1 数据成帧

在通信过程中的帧,按其功能的不同,分为数据帧、控制帧和短语帧三种。数据帧用于传递用户所需传递的信息(文件),数据帧中的数据最终会被程序解读并重组;而控制帧则用于实现在通信过程中的控制信息的交换,以顺利实现数据帧的传输;短语帧用于文本消息的发送。每一帧分为帧头和负载两个部分,其中帧头占6 个字节,前2 个字节用于区分三种帧,后4 个字节对于不同帧的意义各不相同,负载长度不定。

表1 三种帧结构

1.1 数据帧

数据帧包括帧头、 负载数据和校验和。 帧头长8 个字节, 其中,Source 表示发出本帧的机器的编号;Destination 表示本帧欲发送到的目的机的编号;Count 表示负载数据的长度(字节计数),Count 则是程序运行中根据输出缓冲区大小而定的, 最多不超过输出缓冲区的一半;Checksum 表示将前面从Byte0 到Byte5 所有的数据进行校验和计算后得到的结果。

1.2 控制帧

控制帧与控制信号合作完成通信同步与控制任务, 只有帧头,没有负载数据,帧头长8 个字节,其中nPack 表示本次传输共发送的帧数,以便让接收端控制进度。 当nPack=Checksum=0 时,表示本次传输结束,当接收端收到该帧时,不管是否已收到应接收的帧数,都将结束此次传输(记该帧为ABORT 帧)。 在没有发生传输错误的情况下,一次传输只会出现两次控制帧,第一次在传输开始时(记为控制首帧),第二次则在传输结束时出现。

1.3 短语帧

短语帧的组成与数据帧十分相似, 前两字节分别为0x01 和0x00,其后的字节则用于承载所要发送的文本数据,短语帧的最后两个字节仍然为对本帧前面所有字节的校验和计算后的值。

应用程序发送来的数据作为一个流按协议进行分帧,切割后为每帧加上帧头和校验和进行发送;在接收端,分帧的数据去掉帧头后存入文件缓冲区,接收完成后写入磁盘。

2 数据传输方式

在数据传输时,主要有三种方案可供选择,即有确认的面向连接的服务;有确认的无连接的服务;无确认的无连接服务。 有确认的面向连接服务在源机器与目的机器在传递任何数据之前,都先建立一条连接。 在这条连接上所发送的每一帧都被编上号,数据链路层保证所发送的每一帧都确实已收到。与此同时,它保证每帧只收到一次,且所有的帧都是按正确的顺序收到的,但是这种连接方式系统开销较大。 大多数广域网的通信子网的数据链路层采用面向连接确认服务。无确认的无连接服务是源机器向目的机器发送独立的帧,而目的机器对收到的帧不作确认。事先没有建立连接,事后也不存在释放。如果由于线路上的原因造成某一帧的数据丢失,则数据链路层并不会检测到这样的丢失帧,也不会恢复这些帧。 错误率较高。 当然在错误率很低,或者对数据的完整性要求不高的情况下(如话音数据),这样的服务还是非常有用的,因为这样简单的错误可以交给OSI 上面的各层来恢复。 如大多数局域网在数据链路层所采用的服务也是无确认的无连接服务。有确认的无连接服务是对无确认的无连接服务的一种改进。当提供这种服务时,仍然不建立连接,但是所发送的每一帧都进行单独确认。以这种方式,发送方就会知道帧是否安全地到达,如果在某个确定的时间间隔内,帧没有到达,就必须重新发送此帧。这类服务主要用于不可靠信道,如无线通信系统。

在发送数据前,发送方将数据进行分帧包装,然后按发送请求、数据传输、发送完成的步骤进行通信。接收端收到请求信号后,向用户询问是否接收。用户确认接收后,接收端发出“请求发送文件”信号。发送端收到“请求发送文件”信号后,开始发送数据。 首先由发送端发出第一帧数据,然后等待反馈。接收端收到一帧数据后,若帧长度校验和错误则发出“请求重新发送帧数据”信号,如果正确,则发出“请求发送下一帧数据”信号。若发送端收到“请求重新发送帧数据”信号,则重新发送先前发送的帧数据。 若发送端收到“请求发送下一帧数据”信号,则首先检查已经发出的一帧数据是否是最后一帧,如果是则发出“发送完毕”信号,否则,发送下一帧数据。 重复整个过程。 当发送方发出“发送完毕”信号后,关闭文件,并提示用户“发送完毕”。接收端受到“发送完毕”信号后,则把文件缓冲区中存储的数据写入磁盘,然后关闭文件,并向用户提示“接收完毕”。

3 结束语

从上面的分析可以看出,基于有确认的无连接服务的串口通信帧同步方法是本文中提出的三种帧方法中最优的,结构清晰且系统资源利用率高。串口数据传输时在每一帧都采用了发送/应答/重连/失败的方式进行。 克服了数据帧传输在RS-232 接口中低速率、无线信道不可靠性以及整个通信系统的开销等制约因素。 需要指出的是本协议仍有一些不完善的地方,比如安全性没有考虑等,这些不足都有待于以后进一步的优化。

[1]陈启美,李嘉.现代数据通信教程[M].南京:南京大学出版社,2000,3.

[2]王达.网络工程师必读:网络工程基础[M].北京:电子工业出版社,2006,7.

猜你喜欢

链路层通信协议接收端
基于扰动观察法的光通信接收端优化策略
基于多空间内存共享的数据链路层网络包捕获方法
顶管接收端脱壳及混凝土浇筑关键技术
一种设置在密闭结构中的无线电能传输系统
基于多接收线圈的无线电能传输系统优化研究
基于Z-Stack通信协议栈的红外地温采集电路设计
基于DMX512通信协议的多路转发器设计与研究
基于FPGA全功能MVB网络从设备链路层IP核设计
基于NS-3的PLC多频通信协议仿真平台设计与实现
数据链路层的选择重传协议的优化改进