Look at the top two rows: Data and Strobe. In every bit period exactly one of them steps — that is the DS invariant drawn out. The bottom row is what the receiver builds: XOR the two, and you get one clean edge per bit (bn is then read off the Data line at that edge).
The left sketch buffers the whole packet at each switch (store-and-forward) — the body waits. The right sketch forwards the header immediately and lets the body stream through the reserved path (wormhole). The horizontal bars show why wormhole finishes sooner.
Credit is spent going out and only refilled when an FCT returns after one round-trip time (RTT). The shaded window is the "bytes in flight" you must have buffer for — its width is set by rate × RTT.
The Data-Strobe pair sends the clock on the Strobe wire
False. Neither wire is the clock. The clock is recovered by XOR-ing the transition activity of Data and Strobe; because exactly one of the two lines toggles every bit period, that XOR produces one edge per bit. See LVDS Signaling for how each of those two signals is physically a differential pair.
You could drop the Strobe line and still recover timing from Data alone
False. On a run of identical bits the Data line stays flat, so there would be no transition to recover a clock from. Strobe exists precisely to toggle when Data does not, guaranteeing one edge per bit.
SpaceWire needs a dedicated clock wire alongside data, like older parallel buses
False. That is the whole point of Data-Strobe: no shared clock wire means no clock-versus-data skew across long space cables that expand thermally and suffer radiation damage. Contrast this with Serial vs Parallel Communication.
Wormhole routing must receive the entire packet at a switch before forwarding it
False. That describes store-and-forward. Wormhole forwards the header byte the instant it arrives and lets the body stream straight through the reserved path — see Wormhole Routing vs Store-and-Forward.
An FCT (Flow Control Token) is a data character carrying 8 bytes of payload
False. An FCT is a single tiny control character (a few bit-times on the wire). It carries no payload; it merely grants credit for 8 data characters of receiver buffer space.
Odd parity on a byte can detect any number of bit errors
False. A single parity bit reliably catches an odd number of flipped bits (1, 3, 5...). Two simultaneous flips leave parity unchanged and slip through undetected. It is a cheap single-error detector, not a corrector.
Increasing cable length has no effect on how much buffer you need
False. Longer cable means longer round-trip time (RTT) for credit to return, so more bytes are "in flight" before an FCT comes back. To keep the pipe full you must hold more outstanding credit — buffer requirement scales with RTT (the R×RTT/W rule above).
SpaceWire is a broadcast bus where every node hears every message, like MIL-STD-1553
False. SpaceWire links are point-to-point and switched; packets are routed only along the path their destination address selects. 1553 and CAN Bus are shared-medium buses where all nodes see traffic.
If parity fails at the receiver, that single character is silently discarded and transmission continues
False. A parity failure triggers a link error state; the receiver signals it (via EEP) and the link is re-established. SpaceWire does not silently swallow corrupted characters.
Wormhole routing gives lower latency for long packets but also risks head-of-line blocking
True. Because a switch reserves an output port for the whole packet duration, a stalled packet holds that port and blocks others wanting it — the price paid for low buffering and low latency.
"SpaceWire XORs Data and Strobe to get the bit value bn."
Wrong target. XOR of Data and Strobe reconstructs the clock edge, not the data. The bit value bn (the n-th bit in the stream) is simply the Data line, sampled on that recovered clock edge.
"Each FCT grants 10 bytes of credit because a character is 10 bits wide."
Two mistakes. An FCT grants 8 characters of credit, and character width (roughly 9–10 bits including parity/control) has nothing to do with the credit count of 8.
"One-way delay on a 10 m cable is about 500 ns, so RTT is about 1 μs."
The propagation delay in a typical cable is roughly 5 ns per metre, so 10 m gives ≈ 50 ns one-way and RTT ≈ 100 ns — not 500 ns / 1 μs. Overstating the delay by 10× would make you buffer ten times more than needed.
"Store-and-forward latency for a 3-hop path is header-time plus one packet-time, because the body streams."
That describes wormhole. Store-and-forward pays a full packet-time at every hop (3× packet-time), since each switch must fully receive before it forwards.
"Parity for byte 0xA7 is computed by XOR-ing six of its bits."
You must XOR all eight data bits. 0xA7=10100111 has five ones, so the XOR is 1; skipping bits gives the wrong parity value.
"SpaceWire runs at exactly 400 Mbps, a fixed rate."
The rate is a range, roughly 2 Mbps up to ~400 Mbps, chosen per link. It is not a single fixed frequency.
"EOP and EEP are the same marker; EEP is just EOP's abbreviation."
They are distinct. EOP marks a normal end of packet; EEP (Error End of Packet) signals the packet was terminated because of a transmission error, so the receiver can flag it upward — e.g. to an RMAP Protocol transaction.
Why does SpaceWire toggle Strobe only when Data stays the same?
To guarantee exactly one transition per bit period across the two wires combined (the DS invariant). If both could change (or neither), the receiver could not derive a clean single clock edge from their XOR.
Why is a separate clock wire a bad idea over long space cables?
A separate clock drifts against data due to thermal expansion and radiation-induced delay changes, causing skew that corrupts sampling. Self-clocked Data-Strobe removes the wire whose skew you cannot control.
Why does address-first packet ordering enable wormhole routing?
Because the switch sees the destination first, it can look up the output port and start forwarding immediately, before the body arrives — no need to buffer the whole packet to know where it goes.
Why does credit-based flow control need round-trip time, not one-way delay, to size buffers?
The sender spends credit going out, but fresh credit (an FCT) must travel back before the sender can send more. The pipe stays full only if outstanding credit covers the full there-and-back gap — that is why the buffer rule uses RTT, not one-way delay.
Why is SpaceWire favoured over parallel buses for high-rate instruments?
Serial differential signaling (LVDS Signaling) means fewer wires (less mass), no inter-lane skew, low power (~10 mW/link), and no single-point parallel failure — matching the mass/power/reliability constraints of spacecraft.
Why does wormhole routing help real-time control loops specifically?
It keeps per-hop latency low and deterministic, so imaging and control data arrive within tight deadlines. Predictable latency is what Real-Time Determinism demands; store-and-forward's per-hop packet delay is far larger.
Why does a single parity bit still earn its place despite catching only odd-count errors?
In a low-error-rate radiation environment, single-bit upsets from Cosmic Ray Effects on Electronics are the dominant failure mode, and parity catches those cheaply with one bit and near-zero latency.
What happens to timing recovery during a long run of identical bits, say sixteen 1s?
Data stays flat the whole run, but Strobe toggles every bit, so there is still exactly one transition per bit period — the recovered clock keeps ticking. This is the exact case Strobe was invented for.
What if a switch's target output port is already reserved by another wormhole packet?
The incoming packet stalls (blocks) until that port is freed, holding the input side and potentially blocking further packets — the head-of-line blocking cost of reserving a whole path.
What happens if the sender's credit reaches exactly zero?
The sender stops transmitting data and waits for the next FCT to replenish credit. It is a clean stall, not an error; no characters are lost because none were sent without credit.
For a zero-length-cargo packet (address then immediate EOP), does wormhole routing still work?
Yes. The header byte still sets up the path and the EOP immediately releases it; the "body" is simply empty. Wormhole logic never assumed a minimum cargo size.
What if both Data and Strobe toggle in the same bit period?
That violates the DS invariant (which allows only one line to change per bit) and indicates a glitch or fault; the receiver's clock recovery breaks and the link should drop into an error/reset state rather than sample garbage.
At the maximum link rate, does the credit-based scheme still bound buffer needs?
Yes, but the buffer requirement grows with rate × RTT: higher rate means more bytes in flight per unit time, so you need proportionally more outstanding credit — exactly the R×RTT/W relationship.
Recall Quick self-test before you leave
The recovered clock comes from which operation on which two signals? ::: XOR of the transition activity of the Data and Strobe lines.
An FCT grants credit for how many characters? ::: Eight characters of receiver buffer.
Which marker signals a faulty end of packet? ::: EEP (Error End of Packet), as opposed to a normal EOP.
Buffer needed to keep the link full is proportional to which two quantities? ::: Link rate and round-trip time (divided by character width): R×RTT/W.