第2章:SpaceWire标准体系:ECSS-E-ST-50-12C标准解读与协议栈分层架构
好,咱们接着聊。上一章我大概说了SpaceWire是什么,这一章咱们得把标准本身掰开揉碎了看看。ECSS-E-ST-50-12C,这个编号你得多看几眼,以后做项目、写文档、跟甲方扯皮,都得靠它。
说实话,我刚接触这个标准的时候,第一反应是——好家伙,这么厚一本。但啃下来之后发现,它其实把事儿说得挺清楚的。咱们今天不逐页念经,我挑几个关键点,结合我踩过的坑,给你讲讲。
2.1 标准到底管了啥?
ECSS-E-ST-50-12C,全称是“SpaceWire - Links, nodes, routers and networks”。它定义了SpaceWire的物理层、数据链路层、网络层,以及一些网络管理的东西。说白了,它告诉你:
- 线怎么接(物理层)—— 用啥电缆、啥连接器、信号电平多少
- 数据怎么传(数据链路层)—— 字符格式、流控制、错误检测
- 包怎么走(网络层)—— 寻址、路由、分包组包
嗯,这里要注意,它没有定义应用层。应用层的东西,比如你要传一个温度遥测数据,那是上层协议的事儿,比如CCSDS或者RMAP。标准只管到“把数据可靠地从A点搬到B点”。
核心要点:ECSS-E-ST-50-12C是SpaceWire的“宪法”。所有SpaceWire设备,不管是谁家的,都得遵守这个标准才能互联互通。我在项目中见过有人自己改了信号时序,结果跟别人的设备死活对不上,最后查了三天标准才发现问题。
2.2 协议栈分层架构——我习惯这么理解
分层这事儿,搞嵌入式的都不陌生。SpaceWire的协议栈分四层,从下往上分别是:
| 层次 | 名称 | 主要职责 |
|---|---|---|
| 第4层 | 应用层 | 用户数据定义、协议封装(如RMAP) |
| 第3层 | 网络层 | 包路由、寻址、分包/重组 |
| 第2层 | 数据链路层 | 字符传输、流控制、错误检测(FCT、N-Char) |
| 第1层 | 物理层 | 电气特性、连接器、电缆、信号编码(DS编码) |
你想想看,这跟OSI七层模型有点像,但简化了很多。航天上讲究可靠、简单、实时,层数多了反而容易出问题。
2.3 物理层——别小看那根线
物理层是基础。SpaceWire用的是低电压差分信号(LVDS),说白了就是两根线传一个信号,抗干扰能力强。标准规定了:
- 连接器:9针D-sub,或者微型MIL-C-38999。我个人习惯用9针D-sub,好买、好焊、好测试。
- 电缆:屏蔽双绞线,特性阻抗100欧姆。别用普通网线代替,我试过,信号反射得一塌糊涂。
- 信号速率:从2 Mbps到400 Mbps,标准里都支持。但实际项目中,我建议先跑100 Mbps,稳定了再往上调。
我的小技巧:做PCB布线时,SpaceWire的差分对要等长、紧耦合,间距控制在2倍线宽以内。我曾经因为没注意等长,导致10米线缆上误码率飙升,后来重新画了一版板子才解决。
2.4 数据链路层——流控制是门艺术
数据链路层负责把数据打成“字符”来传。SpaceWire的字符分两种:
- 数据字符(Data Character):10位,包含8位数据 + 1位奇偶校验 + 1位控制标志
- 控制字符(Control Character):用于流控制、时间码、错误恢复等
流控制用的是“信用机制”(Flow Control Token,FCT)。简单说就是:
- 接收方告诉发送方:“我还有N个缓冲空位,你可以发N个字符过来。”
- 发送方收到FCT后,最多发N个字符。
- 发完了,等下一个FCT。
这个机制的好处是——不会丢数据。坏处是——如果接收方处理慢了,发送方就得等着。我在做星载相机数据回传时,就遇到过接收端DMA没及时清空缓冲区,导致整条链路卡死的情况。后来加了超时重传才搞定。
注意:SpaceWire的流控制是“停等”式的,不是“窗口滑动”。这意味着长距离、高延迟的链路(比如星间链路)效率会下降。设计系统时,要考虑好缓冲深度。
2.5 网络层——包怎么找到路?
网络层定义了“包”的格式。一个SpaceWire包包含:
- 目标地址:可以是逻辑地址(一个字节),也可以是路径地址(多个字节,每个字节代表一个路由跳转)
- 数据负载:你想传的任何数据
- 包结束标志:EOP(正常结束)或EEP(错误结束)
路由器的转发逻辑很简单:收到一个包,看第一个地址字节,如果是自己的地址,就收下;如果不是,就按路由表转发出去。嗯,这里要注意,路由表是静态配置的,不像互联网那样动态学习。航天系统讲究确定性,路由表在发射前就定死了。
我参与过一个项目,需要把12个节点的数据汇总到一个中央节点。当时设计路由表时,我建议用“路径地址”方式,因为每个节点的位置是固定的,路径地址更直观。后来测试时,果然排查问题方便很多。
2.6 标准里没说的那些事儿
ECSS-E-ST-50-12C虽然很全面,但有些东西它没细说,你得自己琢磨:
- 时钟恢复:标准只说用PLL,但具体怎么设计,看你的本事。
- 热插拔:标准没禁止,但也没推荐。我建议别在星上设备通电时插拔SpaceWire线缆,容易烧接口芯片。
- 冗余设计:标准支持多链路冗余,但怎么切换、怎么仲裁,那是系统设计的事儿。
一句话总结:ECSS-E-ST-50-12C是SpaceWire的“骨架”,协议栈分层是“血肉”。把这两样搞明白,你就能看懂SpaceWire设备的数据手册,也能自己动手写驱动了。下一章,咱们聊聊怎么用FPGA实现一个SpaceWire接口——那才是真正动手的时候。