木易

1996年武岳山 HDLC/SDLC串行通信规程的帧校验序列

0
阅读(6056)

期 号:第1期(总第211期)
日 期:1996年
页 码:第35页
栏 目:通讯与电视
标 题:HDLC/SDLC串行通信规程的帧校验序列(FCS)
作 者:武岳山
关键词:数据通信规程 纠错码 HDLC/SDLC规程 帧结构 帧校验序列
摘 要:HDLC/SDLC数据通信链路规程是目前广泛采用的串行通信规程,但当前大多数文献资料就HDLC/SDLC规程帧校验序列的生成都未给出准确的定义,因而常常给用户造成一些概念上的模糊或误解。本文依据HDLC规程的原始定义给出了HDLC帧校验序列FCS的计算方法及硬件实现系统码字编码的方案。根据文中给出的方法所做的计算与RUP1-44系列单片机串行接口单元SIU实际发送与接收的数据流进行了比较,经检验,实验结果与计算结果相一致。

HDLC为国际标准化组织ISO在IBM公司的“同步数据链路控制”规程SDLC基础上制定的数据链路级通信规程,简称高级数据链路通信规程。HDLC和SDLC均为面向位的同步数据通信协议,且SDLC为HDLC的一个子集。 HDLC/SDLC规程规定信息的传送以帧为单位,帧的基本格式如图1所示:
标志 地址 控制 信息(可选的) 帧校验 标志
SDLC较HDLC附加了如下一些限制:
(1)帧格式中的地址字段限定为8bits;
(2)帧格式中的控制字段限定为8bits;
(3)帧格式中信息字段所包含的数据位数为8的整数倍;
(4)帧格式中的校验字段限定为16bits。
面向位的数据传送协议允许一次传送信息的位数没有限制,因而它适合于传送大量的数据。随着人们对数据量需求的日益增高,基于位传送的数据通信将越来越重要,因而HDLC及SDLC标准的应用也将越来越广泛。在HDLC标准中数据信息是按帧来传送的,为了保证数据传送的可靠性,在一帧的格式中加入了帧校验 FCS(frame checking sequence)序列,用于对所传送的数据进行校错与纠错。在HDLC规程中,采用的帧校验基于循环冗余校验(CRC),但并不等于循环冗余校验。关于这一点在众多的资料中都没有明确指出。
本文基于原始的HDLC规程定义,给出了一种计算PCS的方法。并指明若采用循环冗余校验位计算方法计算FCS时对算法需做的简单修改。同时,本文还给出了一种便于硬件实现或低级语言编程计算的FCS实现方法。依据本文所给出的方法亦不难再加入HDLC帧内除去首尾标识的插“0”处理,即实现帧内数据的透明性。
1 HDLC/SDLC通信规程简介
HDLC/SDLC规程主要包括三个组成部份:
(1)帧结构,(2)规程要素,(3)规程分类。
基本情况如下:
帧结构给出了规程所确定的信息传送的基本格式。在HDLC规程中,帧中通常包括有首尾标志,信息传送的目的地址,控制字段,信息字段,校验字段等,如图2所示。其中帧首标志和帧尾标志均为01111110。地址字段和控制字段一般为8位,但可扩充至16位。信息字段的长度可任意,但SDLC要求其为8的整数倍。帧位验序列通常为16位,对于HDLC也可扩充至32位。在HDLC/SDLC中,帧校验序列通常与一码生成多项式相对应:

规程要素主要由控制字段规定了三种类型的帧,即:信息帧(I帧),监控帧(S帧)和无编号帧(U帧)。
规程分类规定一条链路的各种工作方式(主—主,主—次等),每一类都选用一处已在规程要素中规定的相应命令与响应。
关于规程要素与规程分类的详细介绍可参阅资料[4]等。


如图3所示,参与FCS计算的输入序列应包括地址字段、控制字段与信息字段三部分内容。首尾标志不参与帧校验序列FCS的计算。帧结构中的地址字段、控制字段以及信息段相当于编码理论中的输入序列,输入序列后跟帧校验序列构成系统码。
由码多项式表示的HDLC规程的FCS计算公式如下:


2 帧校验序列(FCS)的计算方法
2.1 用程序计算方法取得FCS

资料[7]中详细讨论了循环码的产生方法并给出了计算系统码的CRC校验位的计算程序,当欲传送的信息位数较长时,不难将原程序中的输入信息序列格式改为按十六进制方式输入。资料[7]中给出的计算程序相当于完成了公式(3)和公式(4)的计算:

2.2 硬件实现方案
基于码生成多项式的HDLC/SDLC系统码硬件实现框图如图4所示。
图4中包含3个二选一开关,分别为K1,K2,K3;两组16位移位寄存器;三个二输入异或门及一个反相器。HDLC/SDLC系统码编码硬件的核心是适时控制图4中的三个开关的置位。下面给出硬件框图的工作流程。根据下面给出的工作流程既可由硬件实现也可由低级汇编实现(如由单片机实现HDLC/SDLC发码或收码专用部件)。


图4电路的工作原理及工作流程:
①初始化阶段,
置上部16位移位寄存器初置为1;
开关K2,K3接下触点,开关K1悬空;
②移位寄存器加移位时钟;
第16个移位脉冲已过;
③开关K2,K3接上触点,开关K1接下触点;
第17个脉冲开始加入;
(此时,输出端开始输出系统码字)
④输入序列结束;
输入序列后续16个“0”,继续移位(即再加16个移位脉冲);
开关K1接上触点,开关K2,K3接下触点;
再加16个移位脉冲;
(此时,输出端开始输出帧校验序列)
⑤结束
注:开关K2,K3工作连动。
在图4中,当输入序列及其后续的16位“0”移位结束时,保留在移位寄存器中的16位二进制数取反后即得到帧内的FCS字段。
3 基于 RUPI-44(8044/8344/8744)STU同步串行数据传送的FCS计算举列
RUPI-44系列单片机指令兼容于MCS-51单片机。其串行口SIU满足SDLC通信规程。SIU的数据移位输入/输出是按字节先低位后高位的方式进行的。例如通过RUPI-44的串行口发送如下十六进制数据:01 02 03 04 05 HEX,其对应的FCS用二进制可表示为:0011 0111 0100 0100,若以十六进制表示则为:EC 22 HEX。相应的发送帧格式为:
数据移位送出方向为→
尾标志 22 EC 05 04 03 02 01 首标志
图4 HDLC/SDLC系统码编码方案
对应于上面的帧格式,串行口SIU依次送出的二进制格式数据位及帧校验位依次为:1000 0000 0100 0000 1100 0000 0010 0000 1010 0000 0011 0111 0100 0100其中略去了首尾标志,数据位间的空格是为了表述清楚而添加的。
下面给出按上述方法算得的,并经过RUPI-44(8344)发送及接收检验的几组数据的FCS计算结果,同时也给出相应的CRC校验位。表1与表2中的数据及校验位均取十六进制数表示。


表 1 基于上述法对FCS的计算结果

表2中的首标志和尾标志均为01111110。表1给出了发送数据与相应的校验位情况。表2给出了HDLC/SDLC发送的帧格式。表1与表2中的序号相对应。
参考文献
1 Data communication-High level data linkcontrol-procedures-framestructure ISO 3309 1976(E)
2 傅麒麟,徐勇,刘应杰.微型计算机接口与通信,电子工业出版社,1991年2月
3 潘新民,王燕芳.单片微型计算机实用系统设计,人民邮电出版社,1992年7月
4 [英]B.布里扎德著.海文学译.数据通信手册.人民邮电出版社,1987年3月
5 INTEL MICROCONTROLLER HANDBOOK 1984年
6 [美] WILLIAM STALLINGS著.杜锡吾译.数据通信和计算机网络,北京航空学院出版社, 1988年1月
7 武岳山.利用循环码生成多项式导出的CRC校验位计算程序.电子科技. 1995年
8 何立民.MCS-51系列单片机应用系统设计系统配置与接口技术,北京航空航天大学出版社
9 Wayne D. Brodd HDLC,ADCCP,and SDLC:What's the difference?Data Communications,August 1983 (西安电子科技大学电子工程学院(710071) 武岳山) (收稿日期:1995-07-24)