zhiweiqiang33 发表于 2014-8-5 09:33:26

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

针对飞控模拟装置中基于HDLC协议通信需求,完成了一种新的基于FPGA+ARM架构HDLC协议控制器的设计。文中首先介紹了HDLC协议的帧结构和循环冗余校验(CRC)原理,然后结合FPGA可进行任意数据宽度操作和ARM编程简单灵活的优点,有效实现了符合HDLC协议的帧结构和CRC校验的应用方法,满足HDLC协议要求。应用结果表明设计能够很好地满足各项功能指标的技术要求。

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

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

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

1 HDLC协议及CRC原理介绍

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

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

4798345 发表于 2017-10-4 09:09:03

感谢楼主辛勤分享

fpga_feixiang 发表于 2017-10-6 15:24:07

很好的解释,,,,,
页: [1]
查看完整版本: 基于FPGA+ARM的HDLC协议控制器的设计与实现