+ 胡行毅 中国科学院国家空间科学中心
立方星空间协议
+ 胡行毅 中国科学院国家空间科学中心
Cubesat Space Protocol
立方星概念提出多年了,国外已经有商业公司在做产品供选购。2014年3月国际空间站(ISS)释放并部署了33颗立方星的星群。立方星的研发需要有协议支撑,立方星空间协议(CSP)是为设计立方星和嵌入式系统的小规模的网络层传递协议规则。文章对此加以介绍,内容包括:协议描述、支持的OS、物理层驱动、协议报头、CSP初始化等,以资参考。
立方星;微小卫星;通信协议
2014年12月18日美国《科学》杂志发布的2014年十大科学突破的新闻中,被喻为一场外太空革命的立方星(CubeSat)入选。按微小卫星分类,立方星就是皮星,其概念最早于1999年由美国加州理工学院和斯坦福大学提出。仅2013年国外至少有超过75颗立方星成功被发射到太空中,它们基本上都是由来自世界各个学院和大学的学生所制造,立方星已成为超微小卫星的通用标准。这一标准最显著的特征是采用了单元结构的类似PC104工控机的长针排插连接。
最近几年立方星已成为航天领域的研究热点之一,这是因其体积小、重量轻、成本低、功能扩展性强等优点,因而发展迅速,应用前景广阔。立方星计划起初仅是一个教学实验计划,但是在商业机构和美国政府的运作下,已经建立起立方星的研究平台,开启了一个全新的空间时代。在商业上,采用货架产品,未来也许能打造出每个人都可负担得起的私人卫星,只需要几百美元就能拥有一颗属于自己“控制”的卫星,这些只有纸盒大小的卫星可以在地球轨道上完成特定的单一任务。2012年一家位于美国加州的NanoSatisfi公司启动了一项ArduSat开源卫星项目,研制出一个体积非常小,但是“五脏六腑”齐全的纳卫星,重量只有1公斤左右,ArduSat纳卫星将实现很多人的卫星梦想,这颗卫星在2013年8月份随日本的货运飞船升空,ArduSat-1、ArduSat-X通过国际空间站的机械臂弹射进入太空部署。当前的ArduSat卫星造价约20万美元,发射费用约10万美元左右,其研制成本和发射成本远远低于从数亿美元至数十亿美元不等的传统卫星。
NanoSatisfi研制的ArduSat纳卫星可以配置各种先进的仪器,比如光谱仪、盖革计数器以及天线等单元设备,科学家试图研发出更多的低成本卫星,由于价格低廉,一些企业家或者个人都有能力负担,未来五年内或将推出多达150颗的纳卫星,第一个商业市场将是教育领域,另外一个应用领域为气象监测,可以凭借低成本的
特点打造监测网络,比如监视滑雪场的温度,大气环境等。纳卫星涉及的产业链可能高达数十亿美元。Cornell大学的博士生Zac Manchester提出可以利用纳卫星组成空间环境监测星座。低成本使得纳卫星具有更加广阔的应用前景,这就如同苹果手机和电脑改变世界那样,纳卫星可以实现更多人拥有卫星的梦想。
实现这种想法需要设计开发的标准化与规范化,立方星空间协议(CSP)就是为设计立方星项目,加速实施立方星及其分系统研发的一个良好的协议规则。
CSP概念最初是丹麦奥尔堡大学(Aalborg Universitet)的学生于2008年搞出来的,是为设计立方星和嵌入式系统的小规模的网络层传递协议。其后,为开发AAUSAT3立方星任务而由分拆公司GOMspace ApS做了进一步研发并集成于其产品中。协议是基于一个包含网络层、传输层与MAC子层信息的32位的报头。其实现不仅是设计限于诸如8位AVR微处理器的嵌入式系统,也适用于Atmel公司的32位ARM和AVR微处理器。具体实施是用开源GNU C语言编写的,现在移植运行在FreeRTOS和POSIX上以及基于Pthreads的操作系统,例如Linux和BSD上运行。当然,版本1.1也支持Mac OS X和MS Windows。英语缩写CSP原本是CAN空间协议的缩写,这是因为第一MAC层驱动程序是为CAN总线编写的。后来由于物理层扩展到包括若干其它的技术,例如:空间链路、I2C、RS-232接口等。因而,名称缩写就原封不动地扩展到更一般化的立方星空间协议。2013年2月25日AAUSAT3发射入轨,首次证明了用CSP协议开发的AAU立方星任务执行得非常成功。
实际上,今天的协议和实施积极地维护了丹麦Aalbory大学的学生和分拆公司GOMSpace ApS之所为。源代码在GNU 宽通用公共许可证(LGPL)下可获得,并由开源代码软件平台GitHub托管服务。
CSP使得分布式嵌入系统具有面向服务的网络拓扑结构。CSP的层次对应于TCP/IP模型的相同层次。其实现由一个面向传输层协议(层次4)的连接,路由器核心(层次3)连接以及若干网络接口(层次1-2)的连接所组成。由于通信总线本身就是其他分系统的接口,所以一个面向服务的拓扑结构较便于设计卫星分系统。这就说明每个分系统的开发仅需要思考定义服务合约和一组与其系统相对应的端口数目。而且,分系统之间的依赖性减少了,而增加通信总线上多个相同的通信节点还容易提高系统的冗余度。
CSP的主要特性包括:
·路由网络协议,采用静态路由的路由核心,支持包的正向透明传输,亦即空间链路;
·面向连接的操作和无连接的操作(可编程模型),即不仅支持类似于UDP的连接操作,也支持基于RUDP的面向连接的操作;
·模块化的网络接口系统。模块化的操作系统接口:FreeRTOS,Posix;
·类似于Berkeley 套接字(BSD/Posix套接字)的简单的API;
·服务处理程序实现了类似于ping和缓冲区状态的Internet控制报文协议(ICMP)式的请求;
·支持网络回环接口流量,亦即能用于分系统任务间的内部进程通信;
·如果物理接口支持的话则支持广播流量选项;
·如果物理接口支持的话则支持混杂模式选项;
·实现了可靠的数据报协议(RDP)。用扩展的微型加密算法(XTEA)以计数(CTR)模式支持加密包选项;支持具有截断的安全哈希算法1-哈希消息认证码(SHA1-HMAC)的RFC2104身份认证包的HMAC选项;
·源代码包含了支持分段CAN 总线的MAC子层接口。Atmel AT90CAN128,Atmel AT91SAM7A1和全部支持Linux SocketCAN框架的主机驱动程序都是现成的,还包括ADI的Blackfin DSP。 CAN接口也易于扩展到新的CPU结构。
·在AVR-8,AVR-32,ARM和PC上编译;
·线程与中断的安全调用;
·全0复制的缓冲/队列系统;
·动态和/或全静态缓冲处理;
·规模小(包括注释才2700多行)
2.1 网络拓扑
CPS网络能配置成若干不同的拓扑结构。最常见的拓扑结构如下图示,分为两段式,一段为卫星段,一段为地面站段:
0-15 地址域分成两个等长段,以便于网络路由。地面段的全部地址以“1”开始,而空间段则以“0”开始。CSP v.1.0的地址空间已经增加到32,0-31,但为了继承性,旧的0-15仍用于大多数GomSpace的产品中。采取把静态路由表编程在不同分系统的源代码中进行网络配置,各个节点就有包含下一跳路由接口和包计数的一个全地址表。这就表明使用任意给定的网络接口安装程序能做任意给定的配置。再来观察网络拓扑,它表明节点8不同于其他的地面节点。各个卫星分系统用NanoCom射频模块连接节点9-15并用本身的RS232 端口连接节点8来进行配置。
这表明调试终端用CSP能直接连到任意分系统进行通信,使得测试和开发任何分系统的软件和协议都成为可能,而无需整星参与和运行射频链路。
图中不同颜色线表示:网络、RS232、FM射频和供电
2.2 协议栈
协议栈是不同的元素建立起来的。协议设计者选择栈核可在LGPL许可项目上开源公共得到。所以,对于使用它在其任务中的任何人都是免费的。经GomSpace公
司使用后,增加了若干更先进的扩展功能,它们仅在该公司能获得。下图表示栈是怎样建立的。
图中不同颜色表示:GS的用户、GS扩展和开源(GPL)
层1:驱动
当然,网络设备的驱动程序对于网络的稳定性和性能都很重要。GomSpace公司已经为其全部产品开发了驱动程序。如果你的任务使用其他的处理器或总线收发器,则必须为CSP工作于此系统写驱动程序。好的驱动程序都是采用DMA和中断驱动的。驱动程序和CSP队列系统一起就能给出很好的系统性能,低的延迟与低的CPU占用率。
层2:MAC-子层协议
层2协议软件定义了一个适合于介质的帧格式。接口容易用实现更多的连接链路来扩展。例如:GomSpace公司在空间链路上采用具有前向纠错、扰码和32位附加同步标记的CCSDS帧格式。MAC子层协议的目的是去除所有额外的信息,正确地解帧格式和将数据传递到路由核心。
层3:路由核心
路由核心是实现CSP的骨架。不仅是关系到基本的路由功能,而且也掌控所有驱动程序必须用到的一些缓冲处理实用代码。路由器是通过查看32位CSP的报头来工作的,该报头包含通常的传递地址以及和连接的端口数一起的源地址。由于没有自动路由发现的路由协议,全部路由表被预先编程在分系统中。这就表明整个拓扑结构必须在表放入分系统之前一起定下来。
静态分配主存储块或者一次性动态分配主存储块可以编译缓冲处理程序系统。之后,缓存系统就是完全独立的。分配的所有元素具有相同的大小,所以必须选择缓存的大小以便能处理最大可能的包长。正因所有的元素都有相同的大小,所以搜索算法很快,并在运行时无需硬锁定所用的处理器。它甚至能同时运行中断和任务内容二者。
用目的地址和下一跳接口的一个完整的1对1的映像来实现路由表。连接表管控某一时间预定义的连接句柄数并且所有的句柄使用后都必须释放,就像缓冲区那样。
路由的主要目的是接受输入包并将之传递到正确的
消息队列。因而为了在网络上侦听到端口数,任务就必须创建一个套接字并调用accept()调用程序。这就使任务阻塞并等待输入流量,就像web服务或其类似情况。当打开了一个输入连接,任务就唤醒了。取决于任务的优先权,任务甚至可以取代另一个任务并立即启动执行。
层4:传输扩展
根据TCP/IP知道,OSI模型第三层仅关心包的传递。在TCP/IP模型中,在TCP协议确保数据包正确排序而无数据丢失之后数据才被传到用户空间应用程序。这在采用像Internet这类通信流量可以采取不同的网络路由并可能丢包的网络时,就是很实用的。然而,对于微小卫星,内部数据总线是很可靠的,而且以正确的次序传递信息,空间链路用三次握手协议就太缓慢了。因此,数据包传到用户空间应用程序就像他们当时进入节点时一样。这类似于众所周知的UDP。对于要保证可靠性、数据顺序或者完整性,UDP使用了一个无握手对话的简单的传输模型。因而,UDP提供了不可靠的服务并且数据报可能不按次序抵达,出现重复或丢失。UDP假设了检错与纠错没有必要或是在应用中完成,以避免在网络接口层面处理开销过度。时间敏感的应用程序通常使用UDP,但由于与其掉包不如等待延时包,这也许不是一个实时系统的选择。
为了在使用不可靠的协议时控制数据的完整性,需要有额外的软件。GomSpace公司将传递层的简单的UDP功能扩展到称为可靠的数据报协议(RDP)。RDP是RFC908和RFC1151的直接实施,在UDP之上附加了自动重传和包序重排。实施重传的另一种方法是在应用层管控它,或采用如何在文件传输协议工作的应用层和传递层(RDP)的组合中来管控它。
CSP应在有最近版本的GNU编译器套件(GCC)的所有平台上编译。CSP要求C99语言特性的支持,例如:内联函数和指定的初始化。
·FreeRTOS-在AVR8、AVR32和ARM7上测试;
·Linux-在X86、X86-64和Blackfin 处理器上测试
·Mac OS X;
·MS Windows
CSP支持若干物理层的技术。有LGPL许可的源代码包含了实现分段的CAN总线接口以及SocketCAN和Atmel AT90CAN128、AT91SAM7A1与AT91SAM7A3处理器用的驱动程序。从版本1.1开始,CSP也包含只需要实现一个传送包功能的I2C接口和RS-232接口,并将接收到的数据包插入到有csp_new_ packet功能的协议栈内。CSP已经在下列物理层中进行了成功地测试。
·CAN
·I2C
·使用KISS协议的RS-232
·CCSDS131.0-B-1-S/131.0-B-2空间链路协议
·TCP/IP
目前存在两个版本的CSP报头。版本0.9在2010年11月以前使用,在用一个新的报头支持更多的主机和端口时,它就被取代了。保留的位必须置0。要注意的是CSP报头不含长度字段。如果需要,则它必须在物理层接口实施。
5.1 版本0.9
原始的CSP报头支持网络上多达16台主机,每台主机有32个端口可用。保留地址15为广播流量。端口范围分为三段,0-7口用作诸如ping和缓冲区状态的一般服务,以及用CSP服务处理程序实施。8-15口用于分系统的专门服务。保留16-31口是用于传出连接的临时端
口。位28、29用于HMAC和XTEA加密的标记包。
5.2 版本1+
2010年11月,重新定义了报头以支持更多的主机和端口。取消了协议域,而且RDP包用标记域中的一组唯一的位所取代。将优先域调整到2位,并且自由位用于双倍的主机和端口范围。目前,CSP支持多达32个网络主机,每个主机有64个端口。保留地址31为广播通信流量。
端口范围仍然分为可调整的3段。0-7口用于诸如ping和缓冲区状态的一般服务,并用CSP服务处理程序实施。8-47口用于分系统专门服务。48-63口全部保留,是用于传出连接的临时端口。28-31位用于HMAC、XTEA加密的标记包,RDP报头和CRC32校验和。
为了在微控制器或PC机上建立CSP,需要初始化内部数据池,建立路由表和附带的一些硬件接口。可参考NanoMind OBC用例。关于CSP的使用案例可以参考[1]。
目前,立方星正在教育、商业、科研和国防领域蓬勃地发展,相信也必将广泛服务于我国的空间科学研究、探测与空间科学实验,例如:太阳物理研究,电离层、热层、磁层、极光等空间环境探测和空间天气实验以及一些专门的有价值的空间科学问题研究之中。这是因为其费效比高,特别适合发射机会少、投资不多、开发周期较短、成效较快的空间科学项目。这一方面,丹麦Aalbory大学和GOMSpace ApS公司研发立方星的思路和方法值得我们参考和借鉴,而立方星空间协议的概念正是其中之一。
[1]CubeSat Space Protocol(CSP),GomSpace,GSCSP-1.1,Tuesday, June 28, 2011
胡行毅,男,中科院国家空间科学中心研究员,长期从事空间电子与信息系统研究。