基于STR71X的高级数据链路控制规程设计
扫描二维码
随时随地手机看文章
高级数据链路控制(HDLC,High-level Data LinkControl)规程是由同际标准化组织开发,面向比特同步的数据链路层协议。
随着ARM处理器市场的成熟,ARM处理器上的高级数据链路控制器外设,几乎涵盖了HDLC规程常用的大部分子集。随着处理能力的提高,在ARM的底层对HDLC通信过程进行控制,具有成本低、灵活性好、便于扩展为操作系统上的应用程序等优点。
1 STR71X系列的数据链路控制器
1.1 STR71X的芯片介绍
STR71X系列足基于16/32位ARM7TDMI内核的微控制器。该系列中的所有器件都包含片上高速单电压Flash存储器和高速RAM存储器。除了HDLC同步通信接口外,还提供了I2C、UART、BSPI、USB2.0、CAN接口等,极大地丰富了该系列在通信、网络等方面的控制能力。
1.2 STR71X的HDLC模块介绍
STR71X系列上的高级数据链路控制器支持全双工操作,能够自动完成标志的设置、零位的检测、校验序列(FCS,Frame Check Sequence)的产生和校验;32位可屏蔽地址区域识别,3种可供选择的时钟,支持NRZ、NRZI、FM0或MANCHESTER数据编码模式,支持时钟恢复的数字锁相环(DPLL);内部含1个8位波特率生成器,2个128字节RAM缓冲器。实际应用中,fm0数据编码模式下,可以实现250 kb/s的数据收发。
1.3 STR71X系列采用的HDLC帧的格式
STR71X的HDLC模块中数据是以帧为单位发送的。STR71X系列采用的HDLC的帧格式如下:
前(后)同步码:在发送器使能,且HDLC_TCTL中的前同步码发送使能开启的情况下,当把要传送的数据的字节数写入寄存器时,HDLC模块就开始发送0~16位的前同步码。
标志序列:采用“0111 1110”为标忐序列,所有的帧必须以“0111 1110”标志开始和结束。标志的检测和插入由HDLC模块自动完成。在传送的数据中,“0”后面跟随连续的6个“1”再跟一个“0”,就会被模块识别为标志。一个标志可以同时作为一个帧的开始标志和下一个帧的结束标志。
地址序列:STR71X有8组地址寄存器,通过设置可以实现32位可屏蔽私有地址域的识别,或者4字节的可屏蔽组地址域的识别(后者用于广播传送模式)。
信息序列:需要传送的数据或者字符。
校验序列:FCS域对标志位和插入的“0”以外的数据,进行循环冗余校验,采用CCITT(g(x)=16+X12+X5+1)对地址域,字节数据和FCS域数据生成CRC编码。接收方根据该编码进行检错,但不纠错。如果报错,将丢弃该帧。
零插入:为了保证标志码“0111 1110”不在帧的内部出现,STR71X采用硬件自动实现“零插入”。该法在发送端监视除标志码以外的所有字段,当发现有连续5个“1”出现时,便在其后添加一个“0”;在接收端,连续的5个“1”后面的“0”自动被删除。
帧间时间填充:可以选择为发送标志,或者发送空闲状态。
2 STR71X系列中HDLC模块配置
HDLC模块发送和接收可以有3种时钟配置:PLL2输出,PCLK1和DPLL。时钟配置框图如图1所示。
HDLC控制器可以处理NRZ、NRZI、FM0、MAN-CHESTER编码。编解码方式可以独立选择,分别由HDLC_TCTL和HDLC_RCTL控制。使用PLL2为时钟源时,HDLC模块只能运行在NRZ和NRZI模式。
3 STR71X系列中HDLC模块编程
3.1 开启外设寄存器的访问及配置编译环境
根据使用到的外设,编辑71x_conf.h文件,设定为:#define_HDLC,#define_GPIO,#define_TIM。去掉DEBUG注释屏蔽标记,允许在监视窗口查看外设寄存器。
将STR71X系列的集成软件函数库添加到编译环境下,并且按照STR71X的使用说明配置编译环境。
3.2 发送接收环境的设置
①配置不同的分频系数,产生适当的操作频率,配置HDLC的时钟为PLL2的输出。
3.3 发送过程和接收过程
利用库函数将数据写入缓冲区,当TEN置位时,写入需要传送的数据字节数。按如下方法配置好中断函数,就可以实现中断模式的传送。
3.4 测试过程
编写串口程序,将接收到的数据用超级终端显示出来。利用串口将实验板数据传送到PC机,在Windows界面下,用系统自带的超级终端检验数据传输的正确性。
结 语
HDLC规程透明传输、可靠性高,对于不同的使用需求有很好的灵活性。在没有操作系统的模式下,利用ST公司的硬件模块实现HDLC协议的传输,不仅可以减少不必要的开销,而且增强了对硬件直接应用的灵活性。