APP下载

电调天线设备嵌入式AISG协议栈的设计与实现

2011-03-21李文生罗仁泽邓春健

电讯技术 2011年8期
关键词:电调嵌入式指令

李文生,吕 ,罗仁泽,邓春健

(1.电子科技大学 中山学院,广东 中山 528402;西南石油大学 电气信息学院,成都 610500)

1 引 言

基站覆盖范围、网络维护效率是移动通信网络建设和维护中经常遇到的问题,而解决这一问题的有效方法就是引入电调天线系统(Remote Electrical Tilting,RET)[1]。电调天线系统主要包括电调天线控制系统(RET Control System,RCS),如基站系统等,以及相关的电调天线设备(Antenna Linear Device,ALD),如远程控制单元(Remote Control Unit,RCU)、塔顶放大器(Tower Mounted Amplifier,TMA)等[2]。

为了实现不同厂家的ALD设备和RCS的兼容和互操作,天线接口标准组织(Antenna Interface Standard Group,AISG)在3GPP相关规范[3-7]基础上推出了AISG协议[8-9]。该协议定义了ALD设备相关标准,并定义了相应的 Iuant接口。这样,只要RCS和ALD设备遵循AISG协议定义的标准和接口,它们就可以互相兼容和对接,可以无缝集成在一起构成一个完整的RET系统。同时,维护人员可以通过网络对整个RET系统中的ALD设备进行远程监控,极大地改善整个网络优化的操作流程,提高网络优化效率。

由于AISG只是一个协议文本,并没有提出具体的实现方法,而除了AISG协议和3GPP相关规范外,相关的文献并不多见,以致不同厂商对于AISG的理解存在一些细微的差异,常常造成不同厂商的设备和系统并不能够做到真正的兼容和互操作。近年来,我们和国内某知名天线设备厂商合作,综合运用嵌入式技术开发了RCU、TMA、ALD手持控制器等电调天线设备,并开发了相应的电调天线设备控制系统[2,10-11]。本文以实际项目为背景,讨论面向ALD设备的嵌入式AISG协议栈的设计与实现方法。

2 AISG协议栈与AISG通信

2.1 AISG协议栈

AISG协议栈采用层次体系结构,并定义了主机(RCS)与从机(ALDs)之间需要遵循Iuant接口,如图1所示。

图1 AISG协议栈层次结构Fig.1 Hierarchical structure of the AISG protocol stack

从图1可以看出,AISG协议栈包括物理层、数据链路层和应用层。物理层可以直接采用RS485通信方式,也可以采用OOK Modem方式,这时控制信号和射频信号共用射频馈线,发送方通过OOK电路将控制信号调制到射频信号上,接收方通过OOK电路解调得到控制信号。这两种通信方式对于上层协议是透明的。数据链路层是HDLC协议的一个子集,采用了HDLC协议中的非平衡通信方式,ALD设备作为从机只能接收主机的HDLC帧,然后进行应答,而不能主动向主机发起通信。应用层主要面向不同ALD设备的具体功能,定义了ALD设备相关功能的指令格式和应答消息格式,其中RETAP主要针对RCU,TMAAP主要针对TMA。

在AISG协议栈中,主机和从机之间的实际通信是在物理层完成的,但是通过下层为上层提供服务,主机和从机的数据链路层、应用层可以进行对等层之间的虚拟双向通信。

2.2 ALD设备状态模型

ALD设备的状态模型如图2所示。上电复位后ALD设备进入无地址状态,此时ALD设备仅可以对主机发送的扫描XID和赋地址XID做出回应,主机可以通过发送扫描XID帧扫描挂接在总线的ALD设备,并通过赋地址XID帧对扫描得到的ALD设备进行赋地址操作。已赋地址ALD设备收到主设备发送的SNRM帧后进入连接状态,并发送UA帧给主机作为应答。ALD设备进入连接状态后,才可以接收主机发送的EP控制指令并执行相应的功能。当ALD设备收到主机发送的DISC帧或在指定时间内没有收到主机发过来的帧,则又回到无地址状态。

图2 ALD设备状态模型Fig.2 State model of ALD

2.3 ALD设备和主机之间的AISG通信

主机与ALD设备之间的所有通信消息是以HDLC帧形式进行透明传输的。HDLC帧首尾标记均为0x7E,标志一帧的开始和结束。地址字段存放ALD设备的HDLC地址,可取0~255之间任意值,其中0x00表示无地址,0xFF表示广播地址。当控制字段值为 0xBF、0x53、0x73、0x93时,分别指明 HDLC帧的具体类型为XID帧、DISC帧、UA帧、SNRM 帧。当帧的类型为I帧或RR帧时,控制字段记录轮询标志以及发送和接收帧的序号。CRC字段用于传输过程的检错,采用16位循环校验算法获得。

ALD设备启动时处于无地址状态,主机只能通过广播XID帧与无地址状态的ALD设备进行通信。XID帧包括格式标识(FI)、组标识(GI)、所有参数所占的长度(GL)、参数标识(PI)、参数长度(PL)、参数值(PV),PI、PL、PV 3个字段构成一组参数,一个XID帧可具有多组参数。XID需要封装成HDLC帧才能在ALD设备和主机之间传递,可以将XID帧内容填充至HDLC帧的INFO域来将其封装成HDLC帧。

XID帧是广播帧,它主要用于ALD设备扫描和赋地址。在设备扫描过程中主机要以某种扫描算法不断地向所有ALD设备广播包含从设备唯一标志码(Unique ID,UID)子串的XID帧,然后根据ALD设备的回应情况来确定ALD设备是否存在;通过扫描获得挂接在总线的ALD设备后,主机可以通过发送赋地址XID帧给指定UID的ALD设备附地址,使ALD设备进入已赋地址状态。

ALD设备只有建立了与主机的链路才能接收主机发送的EP指令并执行相关功能。当ALD设备接收上位机发送的SNRM帧(控制字段为0x93,INFO域为空)后,建立与主机的链接,并向主机回应一个UA帧(控制字段为0x73,INFO域为空),表示成功与主机建立链接。同样,当ALD设备接收主机发送的DISC帧(控制字段为0x53,INFO域为空)后,断开与主机的链接,并向主机回应一个UA帧,表示成功与主机断开链接。

主机对ALD设备的控制主要通过基本过程(Elementary Procedure,EP)实现。用于封装EP指令信息或EP应答信息的帧称为I帧,I帧主要包括EP指令代码(Procedure ID)、数据域长度、数据域字段。同样,I帧只有封装成HDLC帧才能在主机和ALD设备之间传递,可以将I帧填充至HDLC帧的INFO域来封装成HDLC帧。

I帧在封装成HDLC帧时必须指明ALD设备地址,且I帧要在ALD设备与主机建立连接之后才可在主从设备之间传输。

EP指令和EP应答具有相同的基本格式(即I帧格式),应答中的EP代码和其对应的EP指令中的EP指令代码相同。如果EP指令被成功执行,应答消息中包含返回代码和附加信息。如果执行失败,应答消息中会包含返回代码及一连串失败描述代码。

3 嵌入式AISG协议栈总体设计

3.1 ALD设备硬件结构

ALD总体结构框图如图3所示,包括嵌入式控制器MCU、电源模块、存储模块、通信模块、天线倾角控制模块、射频电路监控模块等。

图3 ALD设备总体结构框图Fig.3 Structure diagram of ALD

MCU采用意法半导体的ARM7内核微控制器STR755FR0。电源模块主要包括LDO和DCDC电路,DCDC负责将AISG协议规定的10~30 V的输入电压转换成天线倾角控制模块或射频电路监控模块所需要的电压,LDO电路主要负责输出3.5 V或5 V电压为MCU和其它IC供电。存储模块用于存储新下载的ALD固件和ALD设备的相关参数。通信模块负责AISG通信,对于RCU,主要由485通信单元构成,对于TMA,还包括OOK电路,在接收时从射频信号中提取OOK信号,并将其解调成485控制信号,在发送时将485控制信号调制成OOK信号,然后和射频信号耦合并通过射频馈线发送给基站系统。

3.2 AISG协议栈各层功能需求分析

ALD设备与主机之间采用主从通信方式,主机发送指令给ALD设备,ALD设备执行指令并将执行结果反馈给主机。根据AISG2.0协议和3GPP规范,面向ALD设备的嵌入式AISG协议栈的功能需求主要分为3个层次:物理层功能需求、数据链路层功能需求和应用层功能需求。

物理层主要实现如下功能:

(1)通过UART完成数据帧的接收和发送;

(2)UART波特率的检测和自适应调整。ALD设备缺省的通信波特率9.6 kbit/s,按照AISG协议的要求,ALD设备应当能够检测主机发送数据的波特率,并进行自适应调整。

数据链路层主要实现如下功能:

(1)通过发送队列和接收队列实现HDLC帧的发送和接收;

(2)HDLC帧的封装和解析。发送数据之前,需要生成 CRC校验码,并将I帧、XID帧等封装成HDLC帧;接收数据之后,需要进行CRC校验,并将接收到的HDLC帧解析成I帧、XID帧、SNRM 帧和DISC帧等。对于I帧,由应用层进行处理,对于XID帧、SNRM帧和DISC帧,则由数据链路层数据链路维护相关功能进行处理;

(3)数据链路维护相关功能,主要包括设备扫描、赋地址、建立链接和断开链接。

应用层功能主要由AISG协议规定的EP实现。当ALD设备接收从主机发送的EP指令后,对其进行解析,并调用相应的EP处理过程,最后将执行结果信息返回给主机。EP分为四大类,第一类是通用EP,针对所有ALD设备,包括软件复位(Reset Software)、设备自检(Self Test)、设置用户数据(Write User Data)、读取用户数据(Read User Data)、获取设备基本信息(Get Information)、固件下载更新(Download Start、Download Application、Download End)等;第二类是针对RCU的EP,包括天线校准(Calibrate)、获取倾角(Get Tilt)、设置倾角(Set Tilt)等;第三类是针对TMA的EP,包括设置 TMA模式(TMA Set Mode)、获取TMA模式(TMA Get Mode)、设置TMA增益(Set TMA Gain)、获取TMA 增益(Get TMA Gain)等;第四类是供应商自定义EP,主要用于生产测试,如写入ALD设备序列号、RCU测试、TMA增益微调校准、设置其它出厂参数等。

3.3 嵌入式AISG协议栈的层次结构设计

为了提高协议栈的移植性,便于模块化实现,嵌入式AISG协议栈的设计参考TCP/IP协议栈的设计思想,采用分层设计方法,如图4所示。

图4 嵌入式AISG协议栈层次结构图Fig.4 Hierarchical structure of embeddedAISG protocol stack

数据传输模块与物理层对应,主要负责通过UART实现数据帧的物理收发。HDLC帧处理模块实现HDLC帧的封装和解析,并负责ALD设备和主机之间HDLC帧的透明发送和接收。HDLC链路维护模块主要根据HDLC帧处理模块传递过来的XID帧、SNRM帧、DISC帧进行设备扫描处理、赋地址处理以及与主机链路的建立和断开,HDLC帧处理模块和HDLC链路模块一起对应AISG协议的数据链路层。AISG协议栈的应用层功能通过I帧处理模块和EP功能实现模块完成,I帧处理模块接收HDLC帧处理模块传递过来的I帧(对应一个EP指令),并将其解析成相应的EP指令代码和EP指令参数,然后根据指令代码调用EP功能实现模块中相应的EP功能处理函数,并将指令参数传递给该功能处理函数。指定的EP功能处理函数执行完毕后,将执行结果信息返回给I帧处理模块并封装成I帧(EP应答消息),然后传递给HDLC帧处理模块并封装成HDLC帧,并通过数据传输模块发送给主机。

整个嵌入式AISG协议栈除了EP功能实现模块对于不同的ALD设备所包含的功能处理函数有所不同外,其它各个模块被设计成适应所有类型的ALD设备。另外,AISG协议栈的设计独立于具体的硬件平台,对于不同的ALD硬件平台,只要它们提供统一的硬件驱动接口,AISG协议栈就可以很方便地移植到这些不同的硬件平台上。

4 嵌入式AISG协议栈的实现

4.1 “零拷贝”技术

由于AISG协议栈的层次特性,每一层都有自己的数据格式。发送数据时,各个协议层从上一协议层接收数据,然后加上本层的控制信息再交给下一协议层,这个过程叫封装或打包;接收数据时,各个协议层从下一协议层接收数据,然后取出本层的控制信息再把剩下部分数据交给上一协议层,这个过程叫解析或拆包。

在ALD设备和主机的AISG通信过程中,需要不断地封装和解析。如果在封装和解析时,AISG协议栈的各层函数之间均采用数据拷贝进行数据传递,则将大大增加系统的存储和数据处理开销,从而降低系统实时性能。

为了解决这一矛盾,在AISG协议栈具体实现时引入“零拷贝”技术,即AISG协议栈只设置一个数据缓冲区用于存放需要在各层之间传递的数据,不再设置用于各层间数据传递的缓冲区,协议栈各层间传递的都是数据指针,只有当数据最终被最底层的数据传输模块发送出去时,或是被EP功能实现模块或数据链路维护模块真正使用这些数据时,才进行真正的数据搬移,并释放相应的数据缓冲区。通过使用“零拷贝”技术,降低了系统存储开销,去掉了不必要的数据拷贝,大大提高了系统速度。因此,“零拷贝”技术比较适合嵌入式AISG协议栈的实现。

4.2 嵌入式AISG协议栈工作处理流程

嵌入式AISG协议栈工作处理流程可以看成一个无穷循环:接收主机发送的HDLC帧,对之进行解析,然后针对不同的帧类型进行相应的处理,最后将处理的结果封装成HDLC帧发送给主机。AISG协议栈的具体处理流程如下:

步骤1:接收一帧数据,并将其放在一个pFrame指向的缓冲区;

步骤2:分析该数据帧,获取它的目的地址Address和帧类型FrameType;

步骤3:如果Address是广播地址(0xFF),则转步骤4进行广播XID帧处理;否则,转步骤5进行其它类型帧处理;

步骤4:如果ALD设备是已赋地址状态,则不做任何处理;如果ALD设是无地址状态,则解析XID帧得到它的相关参数,根据参数确定该XID帧是扫描XID帧还是赋地址XID帧,然后进行相应处理:

(1)对于扫描XID帧,将ALD自己的UID和扫描XID帧的掩码参数进行掩码运算(按位与),如果运算结果和扫描XID帧的UID参数匹配,则发送一个包括ALD设备完整UID和设备类型的XID帧给主机,通知主机成功扫描到一台ALD设备,否则不做任何回应;

(2)对于赋地址XID帧,如果ALD自己的UID和赋地址XID帧的UID参数值匹配,则将地址参数值赋给ALD设备,将ALD设备状态改为ADDRESS-ASSIGNED,然后发送一个XID帧给主机,通知主机已经成功为ALD设备赋地址,否则不做任何回应;

步骤5:如果ALD设备地址和Address不匹配,则不做任何处理;如果ALD设备地址和Address一致,则根据数据帧类型FrameType进行相应处理:

(1)对于SNRM帧,则建立与主机的连接,并将ALD设备的状态改为CONNECTED,然后发送一个UA帧给主机,通知主机已经成功与ALD设备建立链接;

(2)对于DISC帧,则断开与主机的连接,并将ALD设备的状态改为NOADDRESS,然后发送一个UA帧给主机,通知主机已经成功与ALD设备断开链接;

(3)对于I帧,则首先解析出EP指令代码和EP指令参数,并对EP指令代码和EP指令参数进行合法性检查,并根据检查结果进行不同处理:

如果不合法,则直接发送错误应答消息给主机,应答消息中会包含返回代码和错误描述代码(UnsupportedProcedure或FormatError);如果合法,返根据EP指令代码调用相应的功能处理函数,并将EP指令参数传递给相应的功能处理函数。功能处理函数执行完毕后,根据执行结果发送相应的应答消息给主机,即:如果执行成功,应答消息中包含返回代码和附加信息;如果执行失败,应答消息中会包含返回代码及一连串错误描述代码。

步骤6:释放pFrame指向的缓冲区,转步骤1。

4.3 嵌入式AISG协议栈的具体实现

嵌入式AISG协议栈利用C语言具体实现,采用层次化和模块实现方法,硬件驱动接口、数据传输模块、HDLC帧处理模块、HDLC链路维护模块、I帧处理模块和EP功能实现模块等都包括一组相关的函数实现各自的功能,并对其它模块提供统一的访问接口。

硬件驱动接口主要为上层程序提供设备之相关硬件访问控制接口,如UART驱动、PWM驱动、EEPROM读写驱动、电机驱动等相关驱动函数。

数据传输处理模块主要提供数据帧的发送和接收功能,主要通过数据接收状态机函数AISGL1-RcvFSM()实现数据的接收,通过数据发送状态机函数AISGL1-TransFSM()实现数据的发送,并通过AISG-Frame*AISGL1-GetFrame()获取一帧完整的HDLC帧放在指针pFrame指向的缓冲区。

I帧处理模块主要通过函数AISGL7-Process()实现I帧的解析,即将I帧对应EP指令解析成相应的指令代码和指令参数,然后交给EP功能实现模块进行处理,处理完成后通过函数AISGL7-SendSuccessResponse()、AISGL7-SendFailResponse()和 AISGL7-SendDefaultResponse()等向主机发送应答消息。

EP功能实现模块主要通过函数AISG-Process-Command()来根据EP指令代码和指令参数调用不同的功能处理函数,例如当指令代码是0x05时,调用函数AISG-Cmd-GetInfo()实现Get Imformation这个EP所要求的功能。

实现后的AISG协议栈可以对其进行适当裁剪,移植到图5所示的RCU、TMA等不同的ALD设备上。

图5 电调天线设备实物图Fig.5 Photos of ALDs

5 总 结

本文以具体项目为背景,讨论了ALD设备嵌入式AISG协议栈的设计和实现方法,在有限的硬件资源上完整准确地实现3GPP相关规范和AISG2.0协议,提升ALD产品设备智能,并确保开发的ALD设备能和第三方的基站系统、CCU等对接。通过采用“零拷贝”实现方法,大大提高了设备性能。另外,由于采用层次化、模块化的体系结构,项目开发的嵌入式AISG协议栈对于不同类型的ALD设备具有较好的适应性和扩展性,并可以方便地移植到不同的硬件平台上。

[1] 吴松,葛海平,缪金迪.遥控电调倾角天线及其在网络优化中的应用[J].电信科学,2007(4):91-94.WU Song,GE Hai-ping,MIU Jin-di.Reomote electrical tilting antenna and its application in network optimization[J].Telecommunication Science,2007(4):91-94.(in Chinese)

[2] 李文生,罗仁泽,吕炎炎,等.电调天线设备控制系统的设计与实现[J].电讯技术,2011,51(1):68-73.LI Wen-sheng,LUO Ren-ze,LV Yi,et al.Design and Implementation of ALD Control System[J].Telecommunication Engineering,2011,51(1):68-73.(in Chinese)

[3] 3GPP TS 25.460 V6.2.0,UTRAN Iuant interface:General aspects and principles[S].

[4] 3GPP TS 25.461V6.5.0,UTRAN Iuant Interface:Layer 1[S].

[5] 3GPP TS 25.462 V6.3.0,UTRAN Iuant interface:Signalling transport[S].

[6] 3GPP TS 25.463 V6.4.0,UTRAN Iuant Interface:Remote Electrical Tilting(RET)antennas Application Part(RETAP)signalling[S].

[7] 3GPP TS 25.466V7.1.0,UTR AN Iuant Interface:Application Part[S].

[8] Antenna Interface Standards Group Standard No.AISG1:Issue 1.1,Control Interface for Antenna Line Devices[S].

[9] Antenna Interface Standards Group Standard No.AISG V2.0,Control Interface for Antenna Line Devices[S].

[10] 吕炎炎,刘伟.基于AISG2.0协议的电调天线远程控制单元的设计实现[J].电子技术应用,2009(11):33-35.LV Yi,LIU Wei.The realization of RET control unit based onAISG2.0[J].Application of Electronic Technique,2009(11):33-35.(in Chinese)

[11] 李文生,罗仁泽,蔡铭昌,等.基于掩码推进的电调天线设备树形扫描算法研究[J].计算机应用,2011,35(5):1435-1442.LI Wen-sheng,LUO Ren-ze,CAI Ming-chang,et al.Query Tree ALD Scanning Algorithm Base on Mask Promotion[J].Journal of Computer Applications,2011,35(5):1435-1442.(in Chinese)

猜你喜欢

电调嵌入式指令
ARINC661显控指令快速验证方法
宽带接入网环境下区间电调分机接入方式研究
搭建基于Qt的嵌入式开发平台
菜鸟看模型
嵌入式软PLC在电镀生产流程控制系统中的应用
杀毒软件中指令虚拟机的脆弱性分析
PARTOR 3D“猛禽”穿越机专用电调
FAIRY SERIES 穿越机专用二合一电调
中断与跳转操作对指令串的影响
一种基于滑窗的余度指令判别算法