桂江华,邵 健,潘 邈
(中国电子科技集团公司第58研究所,江苏 无锡 214035)
一种高可靠串行通信协议
桂江华,邵 健,潘 邈
(中国电子科技集团公司第58研究所,江苏 无锡 214035)
摘 要:随着工作环境的日益复杂,现代通信对于可靠性的要求越来越高。现在存在的一些串行通信协议比如RS-232和RS-485等内容简单,方便实现,但是在传输规范方面没有做很详细的规定,因此传输的可靠性不能得到很好的保证。为了提高串行通信的可靠性,在RS-232协议的基础上提出了一种全新的串行通信协议,定义了完备的帧格式,引入CRC校验、超时重发等一系列查错容错机制,通过仿真验证,证明了该通信协议的可靠性。
关键词:循环校验码;串行通信;帧格式;通信协议
串行通信作为自动化系统中智能设备之间数据交换的主要方式,在工业和自动化控制领域有极其广泛的应用。为了方便工程中的实现,现在存在的一些串行通信协议比如RS-232和RS-485等内容简单,方便实现,但是在可靠性和传输规范方面没有做很详细的规定,因此设计中的缺陷可能引起传输错误,这样将给需要高可靠性传输的系统带来不必要的麻烦。
本文在RS-232等简单的串行通信协议基础上,提出了一种全新的高可靠性串行通信协议,利用CRC校验进行检错,并拥有完备的超时重传机制。使得应用这个通信协议的串行通信在实际工程中的传输准确率大大提高,增强了系统的可靠性。
RS-232全名是“数据终端设备(DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”,标准的RS-232-C协议具有25根信号线,其中有4根数据线、11根控制线、3根定时线和7根备用线。通常情况下,使用其中的9根线就可以实现RS-232串口通信。
RS-232-C的串行总线在空闲的时候保持为逻辑“1”状态,即串行连接线上的电平为-3~15 V。当需要传送一个字符时,首先会发送一个逻辑为“0”的起始位,表示开始发送数据;之后就逐个发送数据位、奇偶校验位和停止位(逻辑“1”),每一次传输1个字符(可以设为5~8 bit)。由于任意两个字符对应瞬间的时间间隔是可变的,因此也被称为异步格式。典型的传输时序如图1所示。
图1 RS-232协议的传输时序
在RS-232协议中,可以设置数据的传输速率。除此之外,字符的位宽、奇偶校验位、停止位都可以被设置。字符可以被设置成5~8 bit,奇偶校验位可以被除去;停止位可以设置成1位、2位甚至1.5位。每秒传输的比特数也被称为二进制波特率,即位周期的倒数,简称为比特率,用于衡量RS-232的传输速率。RS-232-C有一系列波特率标准:110 b/s、300 b/s、600 b/s、1200 b/s、1800 b/s、2400 b/s、4800 b/s、9600 b/s、14.4 kb/s、19.2 kb/s、28.8 kb/s、33.6 kb/s和56 kb/s等。
循环校验码(CRC)的检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码,从而构成一个总长为n=p+r位的二进制序列,附加在数据之后的校验码与数据内容之间存在着某种特定的关系。
假设p位的二进制数据序列如式(1)所示:数据序列D是原始序列,为了r位生成校验码,需要引入生成多项式的概念,生成多项式也就是发送方和接受方在通信之前约定的一个除数,一般记为G(x),它对应一个r+1位的二进制序列,最高位和最低位必须为1,常用的生成多项式有CRC8、CRC12、CRC16和CRC32等。
将原始数据D左移r位并在较低的r位补0形成n位序列Dr(x),CRC校验码的生成过程如式(2)所示:
其中,Re[]表示对括号内的除法进行取余运算。R(x)就是根据数据D计算出来的CRC校验码,与数据序列D组合在一起可以得到带有校验码的序列M,M的形式如式(3)所示:
CRC校验码的编码过程如上所述,而校验过程则是对序列M进行除法取余运算,即:
如果计算得到R(x)为0则表示接收到的数据正确无误。
在数据序列之后加上CRC校验码使得传输的可靠性大大增强,任何数据位的改变都将使得最后接收到的校验码发生改变,从而知道收到的数据发生了错误,然后根据不同情况进行后续处理。
根据开放系统互联(OSI)参考模型的思想,可以将串行通信的协议简化为应用层、数据链路层和物理层3层,本文主要介绍数据链路层,它是串行通信协议中的核心,主要完成帧格式的确定,传输中差错的处理以及通信超时控制等。
4.1帧格式
一帧数据包括几个组成部分,由帧头、数据类型、数据长度、数据、CRC校验和帧尾几个部分组成,如图2所示。
图2 帧格式示意图
(1)帧头
帧头表示这个帧是串行通信的数据,并以此作为是否通过串口接收此帧的标志位,帧头占一个字节。
(2)数据类型
通信中需要传输不同的帧类型,有控制命令帧、应答帧、数据帧等,此帧传输的是什么内容由数据类型给出,它在帧中占一个字节。
(3)数据长度
数据长度用来描述数据包含的字节数,在发送方和接收方传输信息的时候这个标志可以对发送或者接收到的数据个数进行校对,以保证数据的准确传输。数据长度占一个字节。
(4)数据
传输的数据内容,长度为1~6个字节。
(5)CRC校验码
这里采用的是CRC16校验码,占一帧中的两个字节,可以对传输的数据进行高质量的检错,保证数据传输的准确率。
(6)帧尾
帧尾占一个字节,表示一帧的结束标志。
4.2检错容错机制
由于外界复杂电磁环境以及噪声干扰信号的存在,串行通信的可靠性受到极大威胁。为了向应用层提供可靠的通信服务,数据链路层必须能够检查出传输过程中数据帧存在的错误,并在监测出错误之后进行相应的处理。
如果帧头、数据类型、数据长度和帧尾这些数据帧格式发生错误,接收方将不给出应答帧,直接放弃此帧等待下一帧;如果CRC检测错误,说明数据段发生了传输错误,接收方发出错误应答,发送方接收到错误应答之后将立即重新发送一帧数据帧;如果接收到的数据不合法,等待1 ms的时间,不对该帧做任何处理,直接丢弃此帧。
图3 发送方通信流程
图4 接收方通信流程
对于发送方来说,发送一个数据帧之后将等待接收方给出的应答,如果是错误应答,发送方立即重发此帧数据;如果是正确应答,发送方不再发送数据,此帧通信结束;如果发送方在限定时间内没有收到任何回应,发送方也将重发此帧,最多重发三次。
图3和图4分别是发送方和接收方的通信流程,从流程中可以看出本文协议的检错容错机制。
协议的仿真验证分为发送端和接收端两个部分,对发送方和接收方的不同行为分别进行了验证。
5.1发送端仿真验证
发送端发送正确数据帧之后收到正确的应答帧,如图5所示。发送的数据帧为7e500534fb9af5,接收到的正确应答帧为7e0b040350f5,应答帧的形式有别于数据帧,在数据帧中,7e为帧头,50是数据类型,05表示后面的数据占一个字节,34是要传输的数据,fb9a是CRC校验码,f5是帧尾,这是在第四节中提出的标准数据帧格式,下面仿真中的数据帧也符合这样的帧格式,不再一一赘述。
图5 发送方接收到正确应答
发送端发送一帧数据之后在一定时间之内没有收到接收方的应答信号,发送端继续发送此帧,重发次数最多不超过3次,如图6所示。
发送端发送一帧数据之后收到接收端发来的错误应答,这里错误应答帧的形式为7e0b040050f5。发送方立即重发一帧相同的数据,如图7所示,之后在一定时间内没有收到接收端发来的应答信号,所以发送方又继续发送了两次相同的数据帧。
图6 发送方没有收到应答信息
图7 发送方收到错误应答
5.2接收端仿真验证
接收端接收到正确的数据帧之后给出正确应答返回给发送方,如图8所示,这里接收端接收了3个不同的数据帧,每次接收正确的数据帧之后都会返回1个正确应答帧。
接收方接收到的数据帧帧格式发生错误,将不返回任何应答,如图9所示,接收的第一个数据帧数据最大长度发生错误,最大长度为a,而此时数据长度为b,不符合要求;第二个数据帧头不符合要求;第三个数据帧数据长度为6,数据本应该为2个字节,但是在这里只有1个字节的数据,不符合要求;第四个数据帧帧尾不符合要求;最后一个数据帧为非法数据帧,如4.2节所述接受方在1 ms之内没有对其做任何处理,直接丢弃此帧等待下一帧的到来。
接收方接收到的数据帧检测到CRC错误,立即返回错误应答帧给发送方,发送方收到错误应答之后重新发送数据帧,接收方接收到正确数据帧,返回正确应答帧,通信结束,整个过程如图10所示。
图8 接收方接收到正确数据帧
图9 接收到的数据帧格式发生错误
图10 接收到的数据帧CRC检测错误
本文提出了一种全新的串行通信协议,通过仿真验证证明了这一协议的高可靠性,此协议已经在一款专用串口通信芯片中得到应用,并且在各种工作环境下都取得了良好的通信效果。
参考文献:
[1] 张海林,杨勇. 自动化系统中的串行通信协议的设计[J].计算机工程与应用,2003,31:159-160,218.
[2] 刘进海,刘志博,马力. 基于RS-232异步串行通信接口通用通信协议的设计与实现[J]. 现代电子技术,1998,07: 9-11.
[3] 王忠,李延社,游智胜. CRC算法设计与程序实现[J]. 电子测量技术,2007,12: 26-28,36.
[4] 张平安. 16位循环冗余校验码(CRC)的原理和性能分析[J]. 山西科技,2005,05: 123-125.
桂江华(1981—),男,安徽安庆人,工程师,主要研究方向为大规模数字集成电路设计。
A Kind of Highly Reliable Serial Communication Protocol
GUI Jianghua, SHAO Jian, PAN Miao
(China Electronic Technology Group Corporation No.58 Research Institute, Wuxi 214035, China)
Abstract:With the increasing complexity of the working environment, the reliability of modern communication needs higher and higher requirements.Some serial communication protocol such as RS-232 and RS-485 which have simple content are easy to realize,but transmission reliability can not get a good guarantee due to the simple transmission specification. In order to improve the reliability of serial communication, a new protocol with complete frame format, CRC, retransmission and a series of error tolerant mechanism,which is based on RS-232 protocol is proposed in this paper. The reliability of the protocol is verified by the simulation in this paper.
Keywords:CRC; serial communication; frame format; communication protocol
作者简介:
收稿日期:2015-12-4
中图分类号:TN918
文献标识码:A
文章编号:1681-1070(2016)02-0040-04