基于FPGA+ARM的HDLC协议控制器的设计与实现

2014-03-16 09:23赵立立侯翔昊
电子设计工程 2014年10期
关键词:校验码校验个数

杨 尧,赵立立,侯翔昊

(西北工业大学 航天学院,陕西 西安 710072)

高级数据链路控制 (HDLC,High-Level Data Control)是一种同步数据传输、面向比特的数据链路层协议,具有差错检测功能强大、高效和同步传输的特点,目前HDLC协议已成为是通信领域中应用最广泛的协议之一,在飞行器设计领域经常用作飞控与舵机,助推器等之间通信的通信协议。

飞行控制模拟装置是在飞行器研制的方案阶段,用于飞行控制系统软件开发及仿真评估,飞行控制软件往往是A级软件,它的任何问题都将造成飞行失效,进而引起整个系统的瘫痪。采取飞行器控制系统模拟装置进行软件算法验证,对各个分系统软件调试和系统验证,能够加快飞行器设计进度,减少设计风险和成本。

本文研究的HDLC协议控制器用于某型飞行器的飞控模拟装置与舵机控制器之间的通信。一般而言HDLC协议主要是通过使用专用芯片和软件编程的方式来实现[1]。目前在市场上有很多专用的HDLC协议处理芯片如MT8952B、MK5025,这些芯片性能可靠但功能针对性太强,适合应用于特定用途的大批量产品中[2]。软件编程方式是通过针对微控制器或信号处理器进行编程,但是由于微控制器或信号处理器是基于字节(8位、16位等)的处理,而HDLC协议帧的解析和生成是面向比特的处理,因而这种方法会大大增加微处理器或信号处理器的负荷[3]。考虑到本设计中针对的飞控模拟装置中存在大量不同总线接口需要处理,其处理器为FPGA+ARM,FPGA能对任意数据宽度的信号进行处理,ARM具备编程简单,修改灵活的优点,为此本文在此基础上采用FPGA+ARM的方式利用FPGA完成符合HDLC协议的数据传输控制,ARM完成CRC校验和信息帧解包,最终实现HDLC协议控制器的设计。

1 HDLC协议及CRC原理介绍

HDLC是高级链路层控制协议,面向位的数据链路层协议。HDLC通常为点—点或点一多点结构,可用于半双工或全双工通信,采用同步传输方式,常用于中高速数据传输场合。HDLC采用滑动窗口协议,可以同时确认几个帧;另外,每个帧都含有地址地段,这样在多点结构中,主站可以同时和多个从站建立连接,而每个从站只接收含有本站地址的帧,因此HDLC的传输效率比较高,具有较高的吞吐率。在HDLC协议控制器中,其实现的关键在于两个方面,一方面为保证帧间隔标志的唯一性,在后续的字段中采用“0”比特插入/删除技术。发送时,帧间隔标志之外的所有信息,只要出现连续的5个“1”,则自动插入一个“0”;同样,接收方在接收数据时,只要遇到连续的 5个“1”,则自动将其后的“0”删除掉;另一方面是CRC码的产生及校验,即在发送端,利用生成多项式自动生成一帧数据的CRC校验码并附在信息段后发送出去;在接收端,对接受到的一帧数据作CRC码的校验[4]。

CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验[5-6]。它是一类重要的线性分组码。编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。其基本原理是:对于一个给定的(N,K)码(在K位信息码后再拼接R位的校验码,N=R+K),可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将 C(x)左移 R 位(可表示成 C(x)*2R),这样 C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*2R除以生成多项式G(x)得到的余数就是校验码。根据R的不同,形成多种不同的 CRC标准,如CRC-4:x4+x+1、CRC-8:x8+x6+x4+x3+x2+x1、CRC16-CCITT:x16+x12+x5+1等。本文采用的即是CRC16-CCITT标准。

2 HDLC控制器设计

2.1 HDLC协议处理电路设计

为满足飞行器设计验证需求,可以实现基于HDLC协议传输的灵活配置,其功能和技术指标要求如下:422全双工;传输速率可调,最大达到2 Mbps;通信距离不超过5 m;通讯误码率小于10-7;帧头7E与帧尾个数可调,CRC校验方式采用CCITT-CRC16。根据功能和技术指标要求以及飞控模拟装置总体配置状况,控制器总体框图如图1所示。

图1 HDLC控制器总体框图Fig.1 The general frame of HDLC controller

其中数据处理单元采用ARM实现,完成数据帧的CRC校验和信息提取,并根据设定初始化传输控制单元的参数,包括波特率,7E有效个数;传输控制单元采用FPGA实现,主要功能是实现HDLC传输控制逻辑和数据缓存;接口总线采用全双工RS422数据总线,由于RS422传输线为差分电压,因此需要进行电平转化,为此根据设计要求本文设计的控制器选用MAX3491作为电平转换芯片,其转换速度达到10Mbps以满足需要。文中将针对HDLC控制器设计重点介绍数据处理单元、输出控制逻辑两部分。

2.2 HDLC传输控制单元

HDLC传输是按位操作,因此采用FPGA完成,FPGA采用altera公司的CYCLONE II系列的FPGA,开发平台基于QuartusII 6.0开发环境,利用有限状态机设计实现HDLC协议的传输控制部分,并最终以IP核的方式给出设计实现,便于开发人员进行维护和升级。

由于HDLC协议控制器是全双工通信,即包含了HDLC同步比特数据的接收电路设计和HDLC同步比特数据帧的发送电路设计。在FPGA的设计中,接收端和发送端都是基于比特的处理,其功能框图如图2所示。

图2 HDLC协议控制器传输控制单元功能框图Fig.2 Function block diagram of HDLC controller transmission control unit

在接收端,一直根据接收时钟RCLK信号的上升沿接收数据,在信息帧发出以前,判断帧头“7E”,并记录“7E”个数,当“7E”个数满足设定要求,开始启动信息帧的接收,并开启数 1计数器,当遇到连续 5个“1”时删除其后的“0”,同时进行串并转换,将数据按8BIT组成一字节,存入FIFO中,整字节接收完毕后,如接收到“7E”表明该信息帧结束,并开始记录“7E”个数,当“7E”个数满足帧尾设定要求,表明该帧接收完毕,否则表示接收出错,抛弃该帧。图3即为接收帧状态转移图。

图3 接收帧状态转移图Fig.3 The statemachine of receive frame

在发送端,接收到ARM启动发送指令后,发送相应个数帧头0x7E,然后将数据从发送FIFO中取出,进行并串转换,在根据设置的时钟TCLK的下降沿,逐位发送数据到Tx线路上,并且在连续发送了5个比特“1”后,自动插入比特“0”,发送结束后发送相应个数帧尾0x7E,结束该次发送。发送帧状态转移图如图4所示。

2.3 HDLC数据处理单元

HDLC数据处理单元主要完成信息的帧的CRC校验和打包解包任务,其处理芯片采用意法半导体的STM32F103系列ARM芯片,该芯片具有开发简单灵活,成本较低的优势。数据处理单元对数据的处理同样包括接收和发送两部分,以接收为例,具体工作流程图如图5所示。

图4 发送帧状态转移图Fig.4 The statemachine of send frame

图5 HDLC数据处理单元数据接收流程图Fig.5 The receives data flow diagram of the data processing unit

当进入接收中断进程时,首先读空接收FIFO,其中最后两次读出的数据为该帧信息的CRC校验码,利用该校验码进行CRC校验,校验采用CRC-16-CCITT标准,生成r取值为 16,其生成多项式为:G(X)=x16+x12+x2+1

传统CRC校验是对消息逐位处理,对于ARM来说,这样效率是很低的。为了提高时间效率,通常的思想是以空间换时间。考虑到内循环只与当前的消息字节和crc_reg的低字节有关,针对crc_reg低字节建立数表进行查询相应的CRC校验码,最终循环完毕如果没有差错发生则结果应为0。

发送单元与接收单元类似,为其逆过程,首先将信息按约定帧格式打包,然后进行CRC校验,将校验码放入信息帧的最后2个字节,并将该信息帧通过数据总线存入FPGA的发送FIFO中,最后写入发送标志字,启动FPGA发送传输控制逻辑。

3 验证及结果

为完成设计,首先采用ModelSim进行仿真验证,如图6所示通过激励文件生成ARM与FPGA的读写时序,给出符合HDLC帧格式的一组数据写入FPGA发送FIFO,并启动发送,在激励文件中将RX/RCLK与TX/TCLK短接,形成回环,FPGA根据协议控制器接收到数据,并将数据存入接收FIFO,完成验证。其逻辑时序满足HDLC协议帧格式和通信时序要求。

最后按照设计要求将设计好的HDLC通信协议控制器加载至FPGA与ARM上,并与串口通信卡 BST23109进行回环测试,该卡能够实现串口同步模式,通信满足HDLC协议要求。试验结果表明在5m通信距离内,波特率可达2Mb/s,误码率为10-8。

图6 HDLC协议控制器ModelSim仿真验证图Fig.6 The HDLC protocol controller ModelSim simulation diagram

4 结论

文中针对飞行模拟装置中HDLC协议的应用需求开展了HDLC协议控制器的设计,文中首先介绍了HDLC协议的相关内容,然后重点介绍了HDLC协议控制器软硬件实现,详细给出于HDLC协议控制器的设计实现过程。通过仿真和实测试验表明在5 m通信距离内,波特率可达2 Mb/s,误码率为10-8。在该飞行模拟装置交付使用过程中,该控制器功能完整,能够很好地满足各项指标的技术要求。

[1]陈金华.基于HDLC协议的RS485通信设备的研制[J],测控技术,2010,29(6):98-101.CHEN Jin-hua.Design of RS485 communication equipment based on HDLC protocol[J].Measurement& Control Technology,2010,29(6):98-101.

[2]应三丛,张行.基于FPGA的HDLC协议控制[J].四川大学学报,2008,40(3):116-120.YING San-cong,ZHANG Xing.New HDLC Protocol Controller Based on the FPGA[J].Journal of Sichuan University,2008,40(3):116-120.

[3]王鹏,吕志刚,杜卫东.基于FPGA与ARM的多路时序控制系统设计与实现[J].计算机测量与控制,2012(6):1540-1543.WANG Peng,LV Zhi-gang,DU Wei-dong.Design and implementation ofmulti-channel timing control system based on FPGA and ARM7[J].Computer Measurement&Control,2012(6):1540-1543.

[4]邓凤军,张龙,王益忠.基于PCI总线的HDLC通信卡的设计与实现[J].电子技术应用,2012,38(8):30-32.DENG Feng-jun,ZHANG Long,WANG Yi-zhong.Design and implement-tation of HDLC communication card based on PCI-bus[J].Application of Electronic Technique,2012,38(8):30-32.

[5]王新梅,肖国镇.纠错码—原理与方法(修订版)[M].西安:西安电子科技大学出版社,2001.

[6]代玉梅,张彬,张瑞玲.高级数据链路控制(HDLC)的操作行为研究[J].现代电子技术,2013,36(8):10-12.WANG Xin-mei,ZHANG Bin,ZHANG Rui-ling.Research on HDLC operantbehavior[J].Modern Electroincs Techniqus,2013,36(8):10-12.

猜你喜欢
校验码校验个数
Basic UDI校验码算法
怎样数出小正方体的个数
基于加密设备特征信息的配置数据自动校验方法
等腰三角形个数探索
怎样数出小木块的个数
怎样数出小正方体的个数
炉温均匀性校验在铸锻企业的应用
结合抓包实例分析校验和的计算
分析校验和的错误原因
基于Excel实现书号校验码的验证