吕良庆,安军社
(1. 中国科学院 国家空间科学中心 复杂航天系统电子信息技术重点实验室, 北京 100190;2. 中国科学院大学, 北京 100049)
MIL-STD-1553B总线在国内外航天工程领域已经得到了广泛的应用,适用于低速、高可靠的数据传输,通常用于系统管理和控制。为此各航天组织也依之制定了各自的1553B通信协议,例如欧洲空间局(European Space Agency, ESA)的ECSS-E-ST-50-13C[1]和我国的GJB 289A-97[2],以及为不同通信形式而改造的1553B总线协议[3-5]。这些通信协议及其应用情况普遍有一个特点,就是参与通信的远程终端(Remote Terminal,RT)和传输的消息是事先经过协商确定好的,采用固定消息时序分配的方式通信。这种做法能够满足不同项目任务广泛的用户应用需求,但是对于开发方和系统构建过程而言,其协调、设计、验证工作是比较烦琐的。
空间数据系统咨询委员会(Consultative Committee for Space Data System,CCSDS)的航天器接口业务(Spacecraft Onboard Interface Services,SOIS)[6-9]采用了即插即用的思想,系统架构底层可以接入多个异构子网,1553B总线只是其中之一。架构上层的应用和业务过程对这些子网的访问是透明的,因此设备级的即插即用过程首先要在子网内部来解决。
1553B总线通信涉及总线控制器(Bus Controller, BC)的应用部分BCA和服务部分BCS、RT的服务部分RTS和应用部分RTA共4个角色,它们之间的通信关系见图1。
在ECSS-E-ST-50-13C中归结了5项1553B总线服务,即时间服务、通信同步服务、分发和获取-置数和取数服务、数据块传输服务和终端管理服务,以原语方式说明了各项服务的交换信息和时序安排。同时给出了子地址编排、方式码消息使用建议等。
BCS和RTS的实体中包括1553B总线协议芯片作为高级通信引擎(Advanced Communication Engine,ACE),典型的如DDC61580系列[10]。ACE实现了链路层协议,并且配有相应的配置寄存器和消息数据缓存区。
1553B总线通信通过编排和运行总线表实现。为适应不同消息的传输需求和消息时间间隔(TITV)要求,总线表编排采用消息服务请求方式,划分为多个消息小帧,每个小帧以查询服务请求的矢量字消息开头,以同步消息(表示为Syn)结尾,中间为需传输的消息。每个小帧周期(TFRM)相等。如果某个消息不需要传输,则该消息不上线,但是时间仍然占用,以保证TFRM的稳定。这样组织的总线表称为主总线表,其中TFRM表现为总线周期(TBUS),即二者在稳定运行期间是相等的,只在总线表重构过程中有所区别。
在主总线表运行期间,BC可通过切换总线表的方式,改变消息序列的运行。这种运行控制方式称为插入消息方式,可作如下约定:
1)每次插入的消息只能运行一次。
2)插入消息运行完毕后,如果有新的插入消息请求,可继续插入消息运行,如果没有则返回主总线表断点处继续运行。
3)插入消息采用帧结束(End Of Frame,EOF)处理方式,先停止总线消息运行,对消息帧中的所有消息进行一次性处理,切换总线表,再重新启动运行。因此插入消息序列中的消息时间(TMSG)可按照最小时间设置,不必留有余量。
上述各种时间概念和关系示意见图2。
图1 1553B总线通信顺序Fig.1 1553B bus communication sequence diagram
图2 TMSG、TITV、TFRM、TBUS概念示意Fig.2 Concepts of TMSG、TITV、TFRM、TBUS
主总线表加插入消息方式的总线运行控制示意见图3。
图3 主总线表和插入消息运行的转换关系Fig.3 Switch relationship between main bus list and insert message list
工程项目中的一般做法是BC方还需要与各RT方协调,进行RT地址和子地址(消息类型)的分配,定义消息长度和数据格式,确定消息传输时间和时序,形成项目级的1553B总线通信协议和接口控制文件。
RT方的设计是固定而简单的,不能因为增加了即插即用的概念而造成RT方的设计复杂,而BC方应对RT方设计的多样性和针对性具有自适应能力,这是即插即用系统应该具有的特征。但是还是需要RT方至少将其传输需求告知BC方,BC才能进行通信管控。为此需要增加RT接入时的握手过程,以传递RT的电子数据单(Electronic Data Sheets,EDS),供BC动态构建总线表。
为了建立初步的握手关系,需要对子地址的分配进行一些固定的约定。RT的子地址在ECSS-E-ST-50-13C基础上约定见表1。
表1中RT可自行配置的子地址允许继承使用已有的配置,并事先与BC方约定。如果不约定,则BC根据RT的EDS动态编排总线表,以主动适应不同RT的不同传输需求实现即插即用的特征。
表1 RT子地址使用约定
矢量字消息用于标识RT方的消息传输服务请求,消息中数据字16 bit中的某1位置1表示有某种消息需要传输,BCS将据此安排相应消息传输。该数据字定义如下:
1)D0~D14:RT可个性化定义对应所需消息。
2)D15:固定用于请求发送EDS消息。
RT的EDS内容分为2层:1553B总线通信层EDS(简称RT EDS)和应用EDS。
RT EDS目的是描述RT方所需的传输消息、子地址定义以及矢量字服务请求关系[11],见表2。
表2 1553B通信层EDS格式[12]
1)矢量字定义通过矢量字mask和数据域建立16 bit请求位与子地址的对应关系。
2)T/R子地址mask定义了哪些子地址被使用或未使用。
3)T/R子地址定义规定了被使用的子地址的消息类型、数据字个数和消息间隔TITV要求。
4)消息间隔TITV要求:16 bit,单位ms。
• 全1表示65.535 s,全0表示没有周期要求,属于根据条件、请求、需要而传输的消息。
• 划分时间(TDIV)的取值用于判定消息是直接安排在主总线表中(TITV 应用EDS用于描述系统上层应用,是RT对本设备的功能、性能、接口、工作方式的EDS描述,传递给BCA以供构建系统上层的服务关系。这部分是遵从可扩展标识语言(eXtensive Markup Language, XML)语法语义规定[13-14]描述的对象,经过翻译后的解释数据。 EDS传输格式采用CCSDS空间包格式[15]。包中的应用过程标识符(Application Process IDentifier,APID)指明了内容对应到BC或RT端内部的不同层次的应用过程,内容的区分通过包副导头定义。 RT接入步骤如下: Step1:以30个RT矢量字消息组成查询帧,周期轮询RT的服务请求,直到发现有RT接入(消息不超时)。 Step2:BCS对查询帧只进行矢量字中EDS请求位的判读。 Step3:当1个RT接入后,首先向BC提出发送EDS的服务请求。 Step4:BCS响应RT EDS服务请求,以插入消息的方式将RT EDS安排传输并接收。 Step5:BC根据RT EDS构建总线表。 Step6:总线表建立并启动运行后,调整插入查询帧运行的时间间隔(TLOP),并按照TLOP插入查询帧查询剩余RT。 Step7:重复Step 3~6步,实现RT逐个加入的过程。 Step8:当所有(30个)RT加入总线表运行后,不再插入查询帧。 Step9:每当有1个新的RT接入时,BC还需要解决新RT通信数据的收发控制,通过BCA和BCS之间的标准数据结构和统一服务机制来解决。 Step10:在某个RT总线通信建立后,如果RT有应用EDS需要传递,可继续通过EDS请求向BC传输。 RT撤出步骤如下: Step1:当某个RT连续1 min出现超时响应,且通过切换总线不能恢复通信(再加1 min),则可判定此RT下线。 Step2:判定RT下线后,BC对总线表进行重构,删除下线RT的所有消息,在查询帧中增加对下线RT的矢量字消息,并调整TLOP。 Step3:该RT退出引发的应用功能上的影响和反应由BCA进行处理和系统重构。 总线管理设计需要的标准数据结构是为了在BCA、BCS、ACE之间建立起统一的控制服务和数据传递服务。 标准数据结构按照位置分为ACE内存和CPU内存两部分。ACE内存部分主要包括总线表(BUS LIST)和相关的配置寄存器[3],是ACE定义好的数据结构,只能按照芯片使用手册的要求进行配置和设计。 CPU部分又分为两部分: 一部分处于BCS与ACE之间,主要包括消息表(MSGTAB)、消息号表(MSGNUMTAB)、消息块表(MSGBLKTAB)。 MSGTAB通过消息号对主总线表和插入消息表中所有消息建立索引,目的是把消息内容的分析过程提前到初始化时进行,在运行过程中只对该表进行查询,就能获得诸如消息类型、数据区地址等信息,避免对总线运行产生干扰。消息类型还可以起到与应用建立联系的作用。 MSGNUMTAB是针对主总线表中的每个小帧建立的消息号索引,目的是供BCS查询该表,以确定某个小帧中是否有需要的消息存在,实现主总线表中消息的上线和下线操作。 MSGBLKTAB建立了消息块的地址索引,目的是供切换冗余总线使用,而不干扰总线运行。 另一部分处于BCS与BCA之间,主要包括插入消息请求表(INSMSGFLAG)、数据区及其控制标志。为适应即插即用的随机性,数据区及其标志可采用请求队列加缓存的统一方式组织。 总线管理设计分为总线初始化、总线控制和总线应用。 总线初始化包括总线表构建和对ACE总线表、寄存器的设置,以及根据总线表分析生成上述数据结构。在即插即用背景下,随着RT的增减,总线表会动态构建,每次都要重复上述过程。 总线运行控制方式包括对主总线表和插入消息表操作两种方式。主总线表的运行控制采用消息结束(End Of Message,EOM)处理(包括中断和查询),安排消息上线和消息下线。插入消息表运行控制采用EOF处理,并进行总线表切换。 总线应用是指BCA与BCS之间在取数和置数以及控制方面的交互问题。 BC管理的基础功能模块共有13个,见表3。 表3 1553B基础功能模块 3.3.1 总线表构建的前提约定 总线表的构建算法就是根据RT EDS生成新的总线表。即插即用的总线通信使用的主总线表可以只有固定的30个RT矢量字消息加1条同步消息,而所有其他有效消息均采用插入消息的方式。这种方式能保证所有RT的所有消息得到传输,但消息的周期性难以保证。因此有必要采用主总线表加插入消息的方式来平衡这一问题,而主总线表的构建算法就成为主要内容。为保证构建的总线表时间特性,需要对各种消息TMSG进行约定,约定的原则如下: 1)1553B总线码速率为1 Mbit/s,1个数据字在总线传输时为20 bit(3 bit同步+16 bit数据+1 bit校验),1 bit传输需1 μs,加上状态字响应时间4~12 μs[16],因此最大32字的消息可以计算为:指令字20 μs +数据字(32×20 μs)+响应时间(4~12 μs)+状态字20 μs +间隙(>4 μs)。为方便使用,32字消息的最小TMSG取值800 μs。 2)同样的消息在主总线表中和插入消息表中的TMSG是不同的,主要是因为主总线表中的消息采用EOM方式处理,需要为BCS的响应和处理留出时间余量,而插入消息表采用EOF方式处理,处理时总线表处于停止状态,因此消息TMSG可以不留余量。 根据这2条原则,对各种消息TMSG作如下约定: 1)RT矢量字消息在主总线表中每条3 ms,在查询帧中100 μs。 2)同步消息100 μs。 3)主总线表中的TMSG:带1个数据字的消息为1380 μs,每增加1个数据字,时间增加20 μs,32个数据字的消息为2 ms。 4)插入消息表中的TMSG:带1个数据字的消息为180 μs,每增加1个数据字,时间增加20 μs,32个数据字的消息为800 μs。 3.3.2 初始主总线表的建立 收到第1个RT EDS后,主总线表的构建步骤如下: Step1:找出RT EDS中期望的非0、小于TDIV的最大TITV,作为初始TBUS。 Step2:主总线表先安排1条RT矢量字消息+1条同步消息。 Step3:将RT EDS中的消息按顺序排列在主总线表RT矢量字和同步消息之间。 Step4:RT EDS中TITV为0或超长(≥TDIV)的消息按照插入消息安排,不编入主总线表中。 Step5:全部安排完毕后,累加主总线表所有消息时间TMSG作为TFRM,若TFRM≥初始TBUS,则设置完成,并以TFRM为TBUS;若TFRM<初始TBUS,则将同步消息前的最后1条消息的TMSG加长,使TFRM=初始TBUS。 Step6:将生成的总线表作为1个小帧,复制为8个。 3.3.3 第n个RT加入主总线表 收到第n个RT的RT EDS后操作步骤: Step1:记录当前TFRM,将8个小帧中同步消息前最后1条消息的TMSG恢复缺省值。 Step2:在当前8个小帧中加入该RT矢量字消息,TFRM加上3 ms。 Step3:根据该RT EDS将其RT消息加入8个小帧。加入消息时需要考虑TITV和位置问题。 1)加入的消息TITV是当前TFRM的n倍。 •n<2:将其加入8个小帧,每个小帧1个。 • 2≤n<3:将其加入4个小帧,从TFRM最短的小帧开始,每间隔1个小帧1个。 • 3≤n<5:将其加入2个小帧,从TFRM最短的小帧开始,每间隔3个小帧1个。 • 5≤n≤8:将其加入1个TFRM最短的小帧。 •n>8,但TITV • 消息TITV≥TDIV:将其作为插入消息,不编入主总线表。 2)加入时的位置按照同类消息放在一起,同类消息按RT加入顺序排列。如果是新类型消息,则加在所有已有消息之后、同步消息之前。 3)1条消息加入完毕后,将该消息的TMSG加入TFRM,作为新的TFRM。 Step4:继续加入该RT的下一条消息,重复Step 3,直到RT EDS要求的所有消息加入完毕。 Step5:该RT的所有消息加入完毕后,检查在Step 3中暂时作为插入消息的TITV与刚生成的TFRM的倍数关系n,如果n≤8,则将该消息从插入消息表中删除,按照Step 3将其加入主总线表小帧中。 Step6:求出所有小帧的新TFRM,取其中最大的TFRM。若RT EDS中的消息最大TITV>最大TFRM,加长该小帧中同步消息前的最后1条消息的TMSG,使TFRM=该RT消息的最大TITV。 Step7:若该RT EDS中的消息最大TITV≤最大TFRM,将其余小帧的TFRM均调整为与最大TFRM相同(即所有TFRM相等),方法同上。 Step8:若新TFRM<调整前的TFRM,则将每个小帧的TFRM继续加长到调整前TFRM。 3.3.4 有RT撤出 在运行过程中,有RT撤出时操作步骤: Step1:将撤出RT的消息从总线表中删除。 Step2:删除后,重新计算各TFRM,取其大者作为TBUS。 Step3:在剩余所有的RT EDS中找到消息最大TITV,若消息最大TITV≤新TBUS,则调整完成,否则所有TFRM均延长(方法同上),作为新的TBUS。 Step4:查询帧增加RT矢量字消息。 Step5:调整TLOP,并按照TLOP插入查询帧。 Step6:RT的撤出次序与RT号的大小无关。 总线表构建效果评估包括时间效果和适用场景两方面。 3.4.1 时间效果的评估 查询握手协议过程的时间主要是指TFRM对TLOP的影响,以及查询帧的消息时间。影响这一关系的主要有2个值,即TDIV和TLOP。TDIV的取值由主总线表中8个小帧周期之和最大值确定。TLOP需要考察主总线表和插入消息之间的时间关系。为分析确定这2个取值,作如下约定: 1)主总线表最大512条消息; 2)主总线表平均分为8个小帧,每个小帧中最多64条消息; 3)单消息按照32字来计算。 以小帧为单位,根据上述前提进行时间效果分析,计算公式如下: TBUS=TFRM=矢量字消息数×3+消息数×2+0.1 在稳定运行期间,没有插入消息,小帧满64条消息(矢量字消息数最多30个,消息数为33个)时,TFRM最大,达到30×3+33×2+0.1=156.1 ms,8个小帧时间为156.1×8=1248.8 ms。因此TDIV取值1.25 s比较合适。 由于TFRM的计算公式是线性的,因此其最大值随着RT个数的增加而线性增加。实际运行情况比这复杂,但都包络在最大值范围内,因此TFRM效果是可以接受的。 TLOP与插入查询帧有关,还需要考虑插入消息时间的影响。此时至少有1条是插入矢量字消息,因此时间最长的插入消息时间是其余511条消息的总和。按每条消息800 μs计算,511条消息时间总和为408.8 ms。在主总线表和插入消息全部运行的情况下,TFRM最大为29×3+34×2+0.1=155.1 ms,最大总线周期TBUS=155.1+408.8=563.9 ms。在主总线表只有1个RT矢量字且没有查询到消息请求时,TBUS最小为3.1 ms。因此插入消息的运行方式加上BCS干预和处理的时间开销会导致TBUS产生波动。 综上,在具体程序设计时,有两种方法确定TLOP取值:一是TLOP=TFRM×n。n太小会因为主总线频繁插入查询帧和插入消息对TBUS的稳定不利,太大又会影响对RT接入的时间延迟效果。二是为简化设计而取固定值。两种方法可以结合使用,即根据不同条件(如总线流量的平均统计情况对TFRM的影响)在每次总线表重构时动态调整n值,而以5 s作为最大值保底。 BC总线表重构过程是在CPU内存中进行的,不影响ACE中总线表的运行。由于RT个数不同,消息需求不同,重构过程所需要的时间是不确定的,与BC方CPU处理能力有关。 总线表重构后加载到ACE中的过程时间一般为毫秒级。 由此可知,即插即用的RT识别周期和加载时间在条件确定时不会有大的差别,而总线表重构时间是影响RT识别时间长度的主要因素,在CPU处理能力确定的情况下,主要看重构算法的优化。 3.4.2 适用场景评估 主总线表重构面临的适用场景有两种: 1)BC第一个加电运行,然后从无到有,所有RT一一接入的过程。这种情况与地面测试、在轨飞行过程中的设备正常加电的过程一致,也是本协议的出发点。 2)有RT先加电运行,当BC加电运行时,一次可以查询到多个RT同时接入。这种情况与系统复位(掉电)后,所有设备又同时上电工作的情况一致。 第2种情况下,BC处理与第1种情况在本质上相同,只是在构造完1个RT的总线表后,不是直接运行,而是看是否还有第2个RT接入,即多RT接入过程一次性完成。为此总线表构建过程将重复多次,看似冗余,但可以适应任意RT数量和顺序的接入。 SOIS架构中,通过设备发现服务(Device Discovery Service,DDS[17])、设备枚举服务(Device Enumeration Service,DES[18])、设备虚拟服务(Device Virtualization Service,DVS[19])和设备访问服务(Device Access Service,DAS[20])可以构建上层系统的设备即插即用,本文设计的1553B总线管理基础功能模块对它们的支持和衔接关系见图4[21]。 图4中上3层属于SOIS的相关业务架构。在收到RT EDS后,从CONSTRUCTBUS开始进行总线表构建,向下初始化总线INITBC,向上将RT EDS内容(设备虚拟访问信息和应用EDS)报告给DDS。DDS依之建立上层逻辑地址与下层物理地址之间的映射关系,将应用EDS上传给DES,纳入系统的管理信息数据库(Management Information Base,MIB)中,提供给应用层使用。 在系统运行过程中,DVS根据应用层的使用要求和虚拟设备地址,与DES提供的物理地址进行匹配,然后交由DAS执行对设备的访问。 DAS访问设备时可以使用存储访问服务(Memory Access Service,MAS[22])和包服务(Package Service,PS[23])两种方式。这两种服务都需要DDS提供下层1553B总线的具体访问方式(地址和数据),使用取数(READDATA和READBC)和置数(WRITEDATA和WRITEBC)服务实现与BCS之间的数据传递。 DAS通过SETINSFLAG和ARRANGEMSG向BCS提出消息请求。BCS使用ARRANGEMSG服务和SKIPMSG服务安排主总线表消息上线和下线,使用插入消息INSMSG服务切换总线表,使用STOPBC和RUNBC服务来停止和启动总线的运行。 图4的系统架构只有1553B总线一个子网。如果还有其他子网,则系统需增加汇聚层协议,而图4中BCS的数据发送和接收缓冲区,READDATA、WRITEDATA和SETINSFLAG服务都将划归汇聚层协议。 本文的1553B总线即插即用解决方案试图从由传统的接入设备通过标准化接口适应系统的设计思路,转变为由系统对异构和未知设备进行自动识别和配置,并构建形成新的能力的思路。因此本方案在兼容已有的1553B总线通信协议(主要是ECSS-E-ST-50-13C)基础上,只增加了初始握手部分的协议内容,后续的正常通信过程和内容交由通信双方通过EDS交流的方式,建立起适应性的通信关系。从效果评估看,时间特性可接受,能够适应实际使用场景,而且即插即用对RT方编程的改变仅在于要求其能够一次性编辑形成自身的EDS,并按照握手协议将EDS传递给BC,其余可保持原有设计不变。 图4 1553B总线BC与SOIS的服务衔接层次关系[21]Fig.4 Services of 1553B bus controller in SOIS architecture[21]2.3 即插即用的建立过程协议
3 即插即用1553B总线通信设计
3.1 标准数据结构设计
3.2 BC总线管理设计
3.3 总线表的构建算法
3.4 总线表构建适应性评估
4 即插即用1553B的系统层次架构
5 结论