基于NiosII软核的HDLC通信协议的实现
一 引言
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,添加处理器、总线、片内RO
- 用NiosII搭建的固态盘设备系统(03-23)
- 基于μC/OS2II的LED显示屏控制器(08-14)
- 基于Nios II的RTEMS嵌入式开发模式的搭建(03-01)
- NIOS II常用函数整理(06-06)
- NIosII软处理器快速入门(06-06)
- 基于FPGA的片上可编程系统(SOPC)设计之:典型实例-基于NIOS II处理器的数字钟设计(06-05)