一 引言
HDLC(High-level Data Link Control)协议是通信领域中应用最广泛的协议之一,是面向比特的高级数据链路控制规程,具有强大的差错检测功能和同步传输特点,保证数据的可靠传输[3]。市场上很多专用的HDLC芯片因追求功能的完备,而使芯片的控制变得复杂。实际上对某些特殊的场合,可选择HDLC协议中最符合系统要求的部分功能,设计一种功能相对简单、使用灵活的控制器。
NiosII系统是Altera公司的SoPC解决方案,它是一个运行在FPGA上的32位RSIC处理器。Altera公司对于NiosII的开发提供了强大的设计开发平台QuartusII、SOPC Builder以及NiosII IDE[2] [4]。这样,硬件电路与外设的连接,NiosII软核的配置,C语言编写与调试可有机地结合起来,大大提高了系统设计的效率,便于系统的更新与升级。
本设计即是采用Altera公司的CYCLONEII芯片EP2C35-672 FPGA实现基于NiosII的HDLC协议控制系统。在完成通信协议、保证可靠通信的前提下,最终实现主控机与基站终端之间实时、可靠的信息交互与监控管理功能[1]。
二 HDLC协议说明[3]
HDLC协议具有以下特点:数据报文可透明传输;全双工通讯;采用窗口机制和捎带应答;采用帧校验序列,并对信息帧进行顺序编号,防止漏收或重收,传输可靠性高;传输控制功能和处理功能分离,应用非常灵活。HDLC执行数据传输控制功能,一般分为3个阶段:数据链路建立阶段、信息帧传送阶段、数据链路释放阶段。
HDLC协议以帧为基本信息单位传输数据,无论是传输数据信息或是控制信息,每个帧都采用统一的帧格式,如图1所示:
图1 HDLC帧格式
1. 标志字段(F)
HDLC协议规定,所有信息的传输必须以一个标志字开始,且以同一个标志字结束,这个标志字就是01111110。接收方可以通过搜索01111110来判断帧的开始和结束,以此建立帧同步。
2. 地址字段(A)
地址字段表示链路上站的地址。地址字段为8位,也可用8的倍数进行扩展,用于标识接收该帧的站地址。
3. 控制字段(C)
控制字段为8位,用来表示帧类型、帧编号以及命令、响应等。由图1知,由于C字段的构成不同,可以把HDLC帧分为三种类型:信息(I)帧、监控(S)帧、无编号(U)帧。在控制字段中,第1位是“0”的为I帧,第1、2位是“10”的为S帧,第1、2位是“11”的为U帧。
4. 信息字段(I)
信息字段内包含了用户的数据信息和来自上层的各种控制信息。在I帧和某些U帧中,具有该字段。HDLC帧的信息长度是可变的,其长度由收发站缓冲器的大小和线路的差错情况决定,但必须是8bit的整数倍。它可传送标志字以外的任意二进制信息。
5.帧校验序列字段(FCS)
帧校验序列用于对帧进行CRC循环冗余校验。在HDLC协议中采用16位循环冗余校验码进行差错控制,其校验范围从地址字段的第1比特到信息字段的最后1比特的序列,并且规定为了透明传输而插入的“0”不在校验范围内。它的生成多项式为g(x)=X16+X12+X5+1。
三 系统简介
基站系统往往被安置在比较分散、环境比较恶劣且无人值守的地方,因此它运行的可靠性就显得尤为重要。SOPC的诸多特点满足了此类系统的要求。基于此定位,该系统选用pc机作为监控中心,SOPC片上系统作基站端,它们之间采用HDLC协议来实现可靠通信。监控中心完成建立和断开链路的功能,SOPC基站系统除了接收、执行监控中心发来的命令外,还要完成现场数据的采集控制,并将数据上传至监控中心。
对于通信双方,数据都有发送与接收两个传输方向,即上行数据流和下行数据流。发送数据时,按照HDLC协议,先将数据封装成帧,即加上帧头、地址字段、控制字段、信息字段、CRC校验段、帧尾,当缓冲区有空间时,将成帧数据送交缓冲区待发送,数据帧再经UART送到对方的RS-232接口,数据进入收方的缓冲区,收方则执行与发送相反的操作,即从缓冲区读出数据、对其解帧、CRC校验判断、解码,并按照所提取的信息执行相应操作。完整的系统总框图如图2所示:
图2 系统框图
四 基于NiosII的SOPC功能设计
分为硬件设计与软件设计,分别在QuartusII、SOPC Builder和NiosII IDE中完成。
1 硬件设计
(1) 硬件设计结构
硬件设计结构包括RS-232接口、PIO接口、显示模块和自定义CRC校验指令,这些部分都是用NiosII软核来配置的。NiosII作为系统的流程控制中心,其作用是不言而喻的,通过采用SOPC Builder对NiosII进行定制,极大的减少了系统的使用资源。整个系统硬件设计框图如图3所示:
图3 NiosII硬件原理图
(2)NiosII软核配置
利用QuartusII软件中的SOPC Builder,添加处理器、总线、片内ROM、PIO、UART、NiosII其它外设及接口。系统的顶层模块由NiosII软核处理器标准版和系统时钟组成,系统时钟通过锁相环PLL再分配给各外设及SDRAM。
(3)自定义CRC校验指令
可编程软核处理器最大的特点是灵活到可以方便的增加指令,这样可以把系统中用软件处理耗时多的关键算法用硬件逻辑电路来实现。自定义指令其实就是用户让NiosII软核完成的一个功能,这个功能由采用HDL语言描述的电路模块来实现,该模块被连接到NiosII软核的算术逻辑部件上。
CRC校验的一般算法需要大量的逻辑与循环运算,如果用软件来实现则要占用很多个时钟周期,使系统的效率降低,而用硬件完成则仅需要几个时钟周期。NiosII正好提供了用户自定义指令的功能,因此给NiosII添加自定义CRC校验指令来完成该部分功能,大大提高了系统的效率。
2 NiosII应用软件设计
NiosII应用软件用C语言实现,完成了HDLC协议和对基站系统的控制两个任务。首先完成HDLC协议中所要求的解帧校验处理、数据重新打包转发、错误处理等操作,确保通讯的畅通与可靠。基站端在接收到监控中心的命令后,在应用软件的控制下,驱动设备执行相应操作,主要是对温度、湿度、电压、烟感度等参数的读取及环境参数的调整,执行完毕后将结果反馈回监控中心。基于此思想,NiosII软件分为HDLC协议实现部分和命令执行部分。
(1) 协议实现部分
a、接收数据
首先,建立链路完成对帧序列、各种外设参量、标志位等变量的初始化。函数void DeFrame( )用于每收到一帧后的解帧处理,即包括帧长度的判断、CRC 校验、帧类型辨认、帧序号的对照。CRC校验码的运算由函数ALT_CI_CRC_CCITT( )完成,具体操作是调用配置的自定义CRC校验指令,赋数据值,然后通过硬件运算返回计算的CRC码,再和数据帧中的校验码对比,相同则是正确信息,不等则判为错误信息。
b、发送数据
定义变量volatile int edge_capture来进行基站环境参数信息的捕捉,如温度、湿度、电压等。NiosII应用软件根据对环境参量的读取和判断,还要对异常状况做特殊处理。比如,如果某参量出现超标则必需立刻发送信息帧进行告警,以使用户进行及时的调整。
具体发送时,数据先装帧再送入缓冲区等待。为了防止帧丢失造成通讯双方处于僵滞的等待状态,引入计时器,即每发一次信息帧都要启动计时器进行计时,若计时器溢出,重发上一帧并重新计时。以发送电压值为例,对其具体过程进行说明:
void InfoVoltageFrame( ); //装电压帧
void SendBuf(unsigned char Frame[],int SendDataLen); //帧送缓冲区
void TimeDelay( ); //启动计时器
若超时,置超时标志DelayFlag=1;
在此条件下,调用函数ReSendFrame( ); //重发上一帧
再次启动计时器TimeDelay( );
c、HDLC协议中滑动窗口的处理
只将滑动窗口协议中最关键的帧序号变化的具体代码呈现出来:
……
If ((RvByte(2) And &HF)/2)=VR Then 'NS与VR作比较,相等则接收并发送确认帧
VR = ((VR + 1) And & H7)
……
If (RvByte(2) And &HF) = 1 Then '收到确认S帧
SysTime.Enabled = False
VS = ((VS + 1) And & H7)
……
(2)命令执行软件部分
这部分软件主要是驱动设备执行相应命令。一方面,监控中心启动自动监控功能, NiosII每隔5秒会接收到监控中心发来的读取参量信息命令,NiosII执行命令并读取外设参量送至发送缓存;另一方面,若环境参量发生变化,NiosII会对其进行判断,如果超标则立即主动发告警信息帧给监控中心。
五 结束语
本文提出了一种基于FPGA的HDLC协议控制系统设计方案,并利用Altera公司的CYCLONEII芯片EP2C35-672来实现。实践表明,利用NiosII实现的HDLC协议控制系统操作简单、使用灵活,能够很好地应用于各种小型通信设备。通过不同阶段大量的测试,系统工作可靠、稳定,完成了实时可靠的通讯与准确的控制。
本文作者创新点:
1、 技术手段的创新:使用NiosII这种新型的SOPC技术实现了HDLC协议。
2、 应用领域的创新:实现了对基站各种信息(如工作电压、环境温度、湿度、烟感度等)的实时监控与可靠管理。
参考文献
1罗朝霞,张高记 基于TMS320F2407A DSP的MODBUS通信协议的实现 微计算机信息2005 No.20 P.138-139,
2任爱锋,初秀琴 等.基于FPGA的嵌入式系统设计.西安电子科技大学出版社.2004
3谢希仁.计算机网络教程.人民邮电出版社.2002
4 Altera.NiosII Processor Reference Handbook.2006