基于NiosII软核的HDLC通信协议的实现
M、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、 应用领域的创新:实现了对基站各种信息(如工作电压、环境温度、湿度、烟感度等)的实时监控与可靠管理。
- 用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)