Перейти к основному содержимому

Руководство пользователя SpaceWire

примечание

Стив Паркс (Steve Parkes)

2012 СТАР-Данди Лимитед

Эта статья – перевод книги SpaceWire User's Guide

ISBN английской книги: 978-0-9573408-0-0

Глоссарий

Символ данныхCимвол, содержащий 8 бит данных
Адрес назначенияначальный байт или байты пакета, которые используются маршрутизаторами для определения маршрута пакета к месту назначения
ЕЕРсимвол ошибочного конца пакета (Error End of Packet), который используется для завершения пакета при возникновении ошибки
EOPсимвол конца пакета (End of Packet), маркер, указывающий на конец пакета
FCTметка управления потоком, который обменивается на восемь N‑символов
Входной портчасть интерфейса SpaceWire в маршрутизаторе, принимающая пакеты
Канал (установленное соединение, Link)соединение между двумя интерфейсами SpaceWire
N‑символ (N‑Char)информационный символ данных (EOP или EEP)
Узелисточник или назначение пакетов SpaceWire
Nullсимвол, который отправляется, когда нет другой информации для отправки, чтобы сохранить активный канал
Выходной портчасть интерфейса SpaceWire в маршрутизаторе, которая отправляет пакеты
Пакетпоследовательность информационных символов, за которой следует EOP или EEP, пакет состоит из адреса назначения, передаваемых данных и EOP/EEP
Портвходной или выходной порт маршрутизатора SpaceWire
Маршрутизаторкоммутатор пакетов, который пересылает пакеты к месту назначения, выбирая канал для пересылки пакета на основе адреса назначения пакета
Интерфейс SpaceWireинтерфейс, используемый для отправки пакетов SpaceWire и Time‑кодов
Time‑кодкод, состоящий из символа Escape, за которым следует символ данных, где символ данных содержит два зарезервированных бита и шесть битов информации о времени

1 Введение

Руководство пользователя SpaceWire предназначено для ознакомления читателя со SpaceWire.

Раздел 2 начинается с обзора SpaceWire, краткой истории SpaceWire, рассмотрения примера приложения SpaceWire, изучения того, как работает SpaceWire, рассмотрения различных архитектур SpaceWire и, наконец, рассматриваются реальные решения для иллюстрации использования SpaceWire на практике.

В разделе 3 более подробно рассматриваются каналы SpaceWire. В нём подробно описывается каждый уровень стандарта SpaceWire, объясняется принцип работы каждого уровня и причины, по которым SpaceWire разработан именно таким образом.

Раздел 4 описывает маршрутизаторы и сети SpaceWire. Представлены узлы и маршрутизаторы SpaceWire, объяснён механизм работы внутри маршрутизатора, а также способ его настройки. Детально описывается работа микросхемы маршрутизатора SpaceWire Atmel AT7910E SpW-10X.

Раздел 5 объясняет, как работают Time ‑ коды SpaceWire, и знакомит с некоторыми приложениями, для которых они используются.

В разделе 6 представлены некоторые протоколы SpaceWire более высокого уровня. Этот раздел ещё не завершён. Пожалуйста, проверьте последнюю версию на сайте www.star-dundee.com.

Руководство пользователя SpaceWire составлено из нескольких документов, написанных Стивом Парксом (Steve Parkes), генеральным директором STAR-Dundee и автором этого руководства.

2 Сеть обработки данных SpaceWire

SpaceWire — это сеть обработки данных для бортовых применений, которая соединяет вместе инструменты, запоминающие устройства, процессоры, телеметрию нисходящей линии связи и другие бортовые подсистемы123. SpaceWire прост в реализации и обладает некоторыми специфическими характеристиками, которые помогают ему поддерживать приложения для обработки данных в космосе: высокая скорость, малое энергопотребление, простота, относительно низкая стоимость реализации и архитектурная гибкость, что делает его идеальным для многих космических применений. SpaceWire обеспечивает высокоскоростные (от 2 Мбит/с до 200 Мбит/с) двунаправленные полнодуплексные каналы передачи данных, которые соединяют вместе оборудование с поддержкой SpaceWire. Сети обработки данных строятся приложениями с использованием двухточечных каналов передачи данных и коммутаторов маршрутизации.

С тех пор как стандарт SpaceWire был опубликован в январе 2003 года, он был принят Европейским Космическим Агентством, НАСА, Японским Агентством Аэрокосмических Исследований и корпорацией «Роскосмос» для многих применений и широко используется в научных исследованиях, наблюдениях за Землёй, коммерческих и других космических аппаратах. Известные применения с использованием SpaceWire включают: Gaia, марсоход ExoMars, BepiColombo, космический телескоп Джеймса Уэбба, GOES-R, лунный разведывательный орбитальный аппарат и Astro-H.

2.1 Обоснование и краткая история SpaceWire

До того, как SpaceWire стал стандартом, у многих производителей космических аппаратов и оборудования уже был собственный интерфейс связи для межблочной связи, например, подключение инструментов с высокой скоростью передачи данных к запоминающим устройствам. Это привело к тому, что на космическом аппарате использовалось несколько различных каналов связи, что увеличило стоимость и время, необходимое для интеграции и испытаний космического аппарата. Существовала явная потребность в стандартной бортовой линии связи, которая упростила бы разработку космического аппарата.

Ещё в 1992 году, когда началась работа над тем, что позже стало называться SpaceWire, также существовал значительный интерес к высокопроизводительным системам цифровой обработки сигналов, возможности которых были выше возможностей однокристальных устройств, доступных в то время. Было исследовано использование параллельной обработки, и это потребовало некоторой формы сети для соединения отдельных элементов обработки4. Транспьютер Inmos5, микропроцессор, предназначенный для параллельной обработки, был изучен, и последовательные каналы связи, разрабатываемые для транспьютера T90006, были определены как привлекательное решение для бортовой сети космического аппарата. Эта технология последовательной связи была впоследствии опубликована как IEEE 1355-19957.

Несколько радиационно-стойких устройств были разработаны с использованием стандарта IEEE 1355-1995 и использовались в некоторых космических проектах. Однако с этим стандартом было много проблем, которые необходимо было решить, если эта технология должна была продолжать использоваться для космических аппаратов Европейского Космического Агентства. Университет Данди получил контракт от Европейского Космического Агентства8 на изучение и решение этих проблем, что в конечном итоге привело к стандарту SpaceWire.

SpaceWire стремится:

  • способствовать созданию высокопроизводительных бортовых систем обработки данных;
  • помогают снизить затраты на системную интеграцию;
  • продвигать совместимость между оборудованием для обработки данных и подсистемами;
  • поощрять повторное использование оборудования для обработки данных в нескольких различных применений.

Использование стандарта SpaceWire гарантирует совместимость оборудования как на уровне компонентов, так и на уровне подсистем. Инструменты, блоки обработки данных, запоминающие устройства и телеметрические системы нисходящей линии связи, использующие интерфейсы SpaceWire, разработанные для одного применения, могут быть легко использованы в другом. Этот стандарт:

  • уменьшает стоимость разработки (дешевле);
  • сокращает сроки разработки (быстрее);
  • повышает надёжность (лучше);
  • увеличивает объём научной работы, которую можно выполнить в рамках ограниченного бюджета (больше).

2.2 Пример применения SpaceWire

Интерфейс может поддерживать множество различных архитектур обработки полезной нагрузки с использованием двухточечных каналов связи и коммутаторов маршрутизации. Архитектура обработки данных может быть построена в соответствии с требованиями конкретного проекта для того, чтобы не навязывать определённое решение на ограниченную шину или сеть с ограниченной топологией. Пример решения архитектуры SpaceWire показан на рисунке 1. В нём используются два маршрутизатора SpaceWire для обеспечения взаимосвязи между устройствами, памятью и модулями обработки.

Figure1-Example-SpaceWire-Architecture.svg
Пример архитектуры SpaceWire

Устройство 1 в верхнем левом углу работает с высокой скоростью передачи данных. Канал связи «точка-точка» SpaceWire используется для потоковой передачи данных из этого устройства непосредственно в модуль памяти. Если одного канала SpaceWire недостаточно для обеспечения скорости передачи данных от этого прибора, можно использовать два или более каналов параллельно.

Устройство 2 имеет более низкую скорость передачи данных, чем устройство 1. Его данные передаются через маршрутизатор SpaceWire 1 в модуль памяти.

Устройство 3 не имеет интерфейса SpaceWire, поэтому для его подключения к маршрутизатору SpaceWire используется модуль ввода-вывода (I/O). Затем его данные могут быть отправлены по сети SpaceWire в модуль запоминающих устройств.

Устройство 4 содержит подмодули, которые связаны между собой с помощью шины CAN. Контроллер удалённого терминала (Remote Terminal Controller, RTC) используется для соединения шины CAN и SpaceWire. Другие сигналы устройства также подключаются к RTC, который содержит процессор для выполнения функций моста и локального управления прибором.

Устройства 5, 6 и 7 расположены в удалённой части космического аппарата. Чтобы избежать прокладки трёх кабелей SpaceWire к этому удалённому местоположению, используется второй маршрутизатор (маршрутизатор SpaceWire 2), который собирает информацию от этих трёх приборов и передаёт её по одному каналу SpaceWire на маршрутизатор 1, а затем на запоминающее устройство.

Модуль памяти может получать данные от любого из устройств либо напрямую, как в случае с устройством 1, либо опосредованно через маршрутизатор 1. Данные, хранящиеся в модуле памяти, могут быть отправлены в модуль форматирования/шифрования телеметрии для отправки на Землю, либо он может быть сначала отправлен в блок обработки данных или блок сжатия данных. Это устройство может возвращать обработанные/сжатые данные в модуль запоминающих устройств или отправлять их прямо в модуль телеметрии через маршрутизатор 1.

Центральный процессор отвечает за управление всеми устройствами, модулем памяти и блоком телеметрии. Через сеть SpaceWire он имеет доступ ко всем этим модулям: он может настраивать, контролировать и считывать с них служебную информацию и информацию о состоянии. Процессор также подключён к шине управления космическим аппаратом, по которой он может получать телекоманды и пересылать служебную информацию.

С несколькими приборами и процессором данных/компрессором, отправляющим данные в модуль устройств через маршрутизатор 1, одного канала от этого маршрутизатора к модулю памяти может быть недостаточно для обработки всех данных, поэтому был добавлен второй канал, чтобы повысить пропускную способность. В сети SpaceWire могут быть добавлены каналы для обеспечения дополнительной пропускной способности или повышения отказоустойчивости системы. На рисунке 1 для ясности резервирование не отмечено. В применении для космоса будет включена дополнительная пара маршрутизаторов с дублирующими каналами на модули для обеспечения резервирования. С помощью SpaceWire легко поддерживать традиционные резервные модули с перекрёстными соединениями.

2.3 Как работает SpaceWire

Рассмотрев способ использования интерфейс для обеспечения системы обработки данных космического аппарата, рассмотрим интерфейс подробнее.

2.3.1 Каналы SpaceWire

Каналы SpaceWire — это каналы передачи данных «точка-точка», которые соединяют вместе узлы (например, прибор, процессор, запоминающее устройство) с другим узлом или маршрутизатором. Информация может передаваться по обоим направлениям связи одновременно. Каждый канал представляет собой полнодуплексный двунаправленный последовательный канал передачи данных, который может работать со скоростью передачи данных от 2 Мбит/с до 200 Мбит/с. Он отправляет информацию в виде последовательного потока битов, используя два сигнала в каждом направлении (данные и строб). Эти сигналы передаются по каналу посредством низковольтной дифференциальной сигнализации (LVDS)910, которая требует двух проводов для каждого сигнала, в результате чего кабель SpaceWire содержит четыре экранированные витые пары.

Битовая синхронизация в SpaceWire достигается путём отправки тактового сигнала вместе с последовательными данными. Чтобы уменьшить требования к максимальному рассогласованию тактовых импульсов и данных, тактовый сигнал кодируется в стробирующий сигнал таким образом, что операция XOR данных и стробирующего сигнала восстанавливает тактовый сигнал.

Синхронизация символов выполняется только один раз, при запуске канала. Если синхронизация символов когда-либо будет потеряна, это будет определено как ошибка чётности, и связь будет перезапущена для восстановления синхронизации символов.

SpaceWire предоставляет простой механизм для запуска канала, поддержания канала в рабочем состоянии, отправки данных по каналу, гарантии того, что данные не будут отправлены, если получатель на другом конце канала не готов к этому, а также для восстановления после любых ошибок связи. Всё это обрабатывается машиной состояний в интерфейсе SpaceWire и прозрачно для пользовательского приложения.

2.3.2 Пакеты SpaceWire

Информация передаётся по каналу SpaceWire отдельными пакетами. Пакеты могут отправляться в обоих направлениях канала при условии, что в получателе есть место для дополнительных данных. Пакет форматируется, как показано на рисунке 2.

Figure2-SpaceWire-Packet-Format.svg
Формат пакета SpaceWire

«Адрес назначения» — это первая часть отправляемого пакета, представляющая собой список символов данных, который представляет либо идентификатор узла назначения, либо путь, который пакет должен пройти через сеть SpaceWire, чтобы достичь точку назначения. В случае соединения точка-точка непосредственно между двумя точками (без маршрутизаторов между ними) адрес назначения не требуется.

«Передаваемые данные» — это данные, которые должны быть переданы от источника к месту назначения. Любое количество байтов данных может быть передано в пакете SpaceWire.

«Конец пакета» (EOP) используется для обозначения конца пакета. Символ данных, следующий за EOP, является началом следующего пакета. Размер пакета SpaceWire не ограничен.

Как видно, формат пакета для SpaceWire очень прост. Однако он также очень мощный, позволяя использовать SpaceWire для переноса ряда пользовательских протоколов с минимальными издержками.

Сети SpaceWire

Сети SpaceWire строятся с использованием двухточечных каналов SpaceWire и коммутаторов маршрутизации.

Маршрутизирующие коммутаторы SpaceWire

Маршрутизатор SpaceWire11 соединяет множество узлов с помощью каналов SpaceWire, предоставляя средства маршрутизации пакетов от одного узла к любому другому узлу или маршрутизатору, подключённому к маршрутизатору. Узел — это просто источник или пункт назначения пакета SpaceWire. Маршрутизатор SpaceWire включает в себя несколько интерфейсов связи SpaceWire и матрицу коммутации. Матрица коммутации позволяет пакетам, прибывающим на один канальный интерфейс, передаваться и отправляться из другого интерфейсного канала на маршрутизаторе.

Каждый интерфейс канала может рассматриваться как содержащий входной порт (приёмник интерфейса канала) и порт вывода (передатчик интерфейса канала). Маршрутизатор SpaceWire передаёт пакеты от входного порта коммутатора, куда поступает пакет, на конкретный выходной порт, определяемый адресом назначения пакета. Маршрутизатор использует начальный символ данных пакета (один из символов адреса назначения) для определения выходного порта маршрутизатора, на который должен быть направлен пакет. Если есть два входных порта, ожидающих использования определённого выходного порта после завершения отправки предыдущего пакета, механизм арбитража решает, какой входной порт обслуживать.

Адресация пакетов

Адрес назначения в начале пакета SpaceWire используется для маршрутизации пакета по сети от исходного узла к месту назначения. В сетях SpaceWire используются две формы адресации: адресация пути и логическая адресация.

Путь адресации лучше всего можно понять, используя простую аналогию с указанием направления для кого-то, кто ведёт машину. Чтобы добраться до пункта назначения, вы можете предложить водителю выбрать съезд 2 на первой кольцевой развязке, съезд 1 на следующей кольцевой развязке и, наконец, съезд 3 на третьей кольцевой развязке. После этого водитель достигнет нужного пункта назначения (смотрите рисунок 3). На каждой кольцевой развязке есть направление, которому нужно следовать (используйте определённый съезд). Вместе эти направления описывают путь от начального положения до требуемого пункта назначения. Существует список направлений, которым нужно следовать, по одному на каждую кольцевую развязку. После того, как развязка была пройдена, она вычёркивается из списка, и следующее направление следует на следующей кольцевой развязке.

В сети SpaceWire кольцевые развязки — это маршрутизаторы, а дороги, соединяющие кольцевые развязки, — это звенья, соединяющие маршрутизаторы (смотрите рисунок 3). Список направлений прикрепляется к передней части пакета SpaceWire, образуя адрес назначения. Первое направление выполняется при обнаружении первого маршрутизатора. Это направление представляет собой просто символ данных, указывающий, через какой порт маршрутизатора следует пересылать пакет. Маршрутизатор может иметь максимум 31 внешний порт (номера портов от 1 до 31) и один внутренний порт конфигурации (номер порта 0). Начальный символ данных в начале пакета используется для указания порта, через который должен быть перенаправлен пакет: если начальный символ данных равен 3, пакет будет перенаправлен через порт 3 маршрутизатора. После того, как начальный символ данных был использован для пересылки пакета, он отбрасывается, поскольку он больше не нужен. Это показывает следующий символ данных в адресе пути для маршрутизации пакета на следующем маршрутизаторе. На рисунке 3 показано, как изменяется адрес пути в начале пакета по мере прохождения пакета по сети. Поскольку маршрутизатор может иметь максимум 31 порт вместе с внутренним портом конфигурации, каждый символ данных, формирующий адрес пути, находится в диапазоне от 0 до 31.

Figure3-Path-Addressing.svg
Адресация пути

Логическую адресацию также можно понять по аналогии с присвоением направления движения автомобиля. Логическая адресация — это как сказать водителю: «следуйте указателям на знаках на каждой кольцевой развязке». Это, конечно, требует, чтобы на каждой кольцевой развязке были установлены соответствующие знаки, и каждый пункт назначения должен иметь название или идентификатор, чтобы его можно было распознать на знаках. Аналогия с логическим адресом показана на рисунке 4.

В сети SpaceWire, использующей логическую адресацию, каждому пункту назначения присваивается идентификатор, представляющий собой число в диапазоне от 32 до 255. У каждого маршрутизатора в сети есть таблица маршрутизации (например, знак на кольцевой развязке), в которой указывается, через какой порт должен быть отправлен пакет. быть перенаправлены для каждого возможного идентификатора пункта назначения. Начальный символ данных пакета устанавливается равным требуемому идентификатору пункта назначения (например, 44, для примера). На каждом маршрутизаторе начальный символ данных используется для поиска соответствующих направлений в таблице маршрутизации, и пакет пересылается соответствующим образом. Для логической адресации начальный символ данных не отбрасывается на каждом маршрутизаторе, так как потребуется искать путь для следования на следующем встретившемся маршрутизаторе. Использование логической адресации показано на рисунке 4. Логическая адресация использует только один символ данных для идентификации пункта назначения, который находится в диапазоне от 32 до 255, чтобы его нельзя было спутать с адресами маршрута.

Figure4-Logical-Addressing.svg
Логическая адресация

У логической адресации есть преимущество: требуется только один байт адреса, но потребуется настроить таблицы маршрутизации, прежде чем её можно будет использовать. Для адресации пути требуется байт для каждого маршрутизатора и не нужны таблицы маршрутизации в маршрутизаторах.

2.4 Виды архитектур SpaceWire

Теперь рассматривается способ, которым SpaceWire можно использовать для создания архитектур обработки данных, адаптированных к конкретным требованиям проекта.

2.4.1 Каналы «точка-точка»

Самое простое и наиболее распространённое использование SpaceWire — это подключение устройства с высокой скоростью передачи данных непосредственно к бортовому запоминающему устройству. Такое расположение показано на рисунке 5.

Устройство может отправлять пакеты SpaceWire, содержащие данные, непосредственно в память по каналу SpaceWire. Данные могут быть упакованы в пакеты необходимого размера. Например, если инструмент представляет собой некую форму сканера с построчным сканированием, может быть целесообразно отправлять одну строку изображения за раз, например, пакеты по 34 Кбайт. Если прибор представляет собой камеру, полное изображение может быть передано одним пакетом, например, 2 мегабайта.

Устройство может просто отправить данные в память после их сбора, или память может отправить устройству команду на запрос следующего набора данных. SpaceWire включает низкоуровневое управление потоком, так что, если память не готова, прибор не может отправлять данные, пока память не будет готова. Это означает, что если память не сможет принять данные от камеры, как только она будет готова, камере придётся буферизовать данные.

Преимуществами этого типа архитектуры являются:

  • простота;
  • низкое потребление на Мбит/с;
  • приложению доступна полная пропускная способность канала.

Недостатки:

  • отсутствие резервирования (при сбое связи устройство теряется);
  • может быть неэффективным, если пропускная способность канала используется не полностью.

Этот последний пункт подчёркивает ещё одну возможность SpaceWire. Интерфейс SpaceWire может инициализироваться очень быстро (20 мкс). Если устройство предоставляет данные пакетами или время от времени по запросу, то можно отключить канал, когда он не используется. Если один конец канала установлен в режим автозапуска, он запустится, как только на канале появится трафик. Так, например, если прибор должен время от времени отправлять данные в память при обнаружении какого-либо события, интерфейс SpaceWire в памяти может быть переведён в режим автозапуска. Интерфейс SpaceWire в памяти остановится и будет ожидать любого трафика на своём входе. После этого прибор может отключить свой интерфейс SpaceWire. Когда происходит событие, интерфейс SpaceWire в устройстве активируется и запускается, трафик инициализации на канале обнаруживается интерфейсом SpaceWire в блоке памяти, что приводит к запуску его канала и установлению соединения. После этого устройство может передавать свои данные. Для достижения этого соединения требуется всего 20 мкс.

Тип приложения, в котором используется единая линия связи «точка-точка», предназначен для прямого подключения устройства к памяти, где не требуется отказоустойчивость, то есть допустимо, что в случае сбоя связи SpaceWire устройство будет потеряно.

2.4.2 Отказоустойчивые каналы

Предотвращение возможных единичных отказов в одной точке важно для большинства космических проектов. SpaceWire предоставляет простые средства повышения отказоустойчивости в системе там, где это необходимо.

SpaceWire достаточно надёжен благодаря хорошим характеристикам электромагнитной совместимости LVDS и используемому экранированию кабеля. В канале редко возникают ошибки, если они не введены специально. Если временная ошибка действительно возникает, то связь SpaceWire немедленно отключается электрически и проходит процесс повторной инициализации. Через 20 мкс канал снова работает. Пакет, который находился в процессе передачи, усекается и завершается специальным символом Error End of Packet (EEP), чтобы указать, что он был завершён преждевременно. Следующий пакет для отправки будет успешно доставлен при условии, что ошибка была временной. Если пакет, который был прерван из‑за сбоя, был важным, то пользовательское приложение должно обнаружить тот факт, что он не был доставлен должным образом, и повторно отправить информацию. Протоколы для предоставления этого типа услуг, которые работают через SpaceWire, разрабатывались и разрабатываются рабочей группой SpaceWire.

Если неисправность в канале SpaceWire является постоянной, например, провода могут быть отсоединены или интерфейс SpaceWire может перестать работать, то для восстановления требуется второй резервный канал SpaceWire. Это показано на рисунке 6.

Если основной канал SpaceWire перестаёт работать, необходимо запустить резервный канал и передать данные по этому каналу. Простая логика прибора может обеспечить эту функциональность.

Более надёжная система показана на рисунке 7.

Figure7-Cross-Strapping.svg
Перекрёстное связывание

В этом примере узел имеет решающее значение для проекта, поэтому предусмотрено два устройства. У каждого устройства есть два интерфейса SpaceWire: один основной и один резервный. Точно также есть два блока памяти. Во время нормальной работы резервный прибор и блок памяти отключены. Основной инструмент отправляет данные в основную память. Если основной прибор выходит из строя, он выключается, а резервный включается. Затем основная память получает данные прибора через резервный интерфейс SpaceWire. Это классическое перекрёстное связывание легко поддерживается SpaceWire – дополнительные звенья просто размещаются там, где требуется резервирование.

Преимуществами этого типа архитектуры являются:

  • простота;
  • низкое потребление на Мбит/с;
  • приложению доступна полная пропускная способность канала;
  • отказоустойчивость.

Недостатки:

  • увеличение размеров, так как несколько каналов необходимы для резервирования;
  • неэффективно, если пропускная способность не используется полностью.

Эта архитектура идеальна там, где требуется прямое подключение прибора к памяти или другому устройству и где отказ в одной точке неприемлем.

Важно, чтобы сбой в основном канале не распространяется и не вызывает сбой в резервном канале.

2.4.3 Архитектура на основе маршрутизатора

Маршрутизатор SpaceWire позволяет при необходимости реализовывать более сложные архитектуры. Базовая архитектура на основе маршрутизатора показана на рисунке 8.

Figure8-Basic-Router-Based-Architecture.svg
Базовая архитектура на основе маршрутизатора

Маршрутизатор SpaceWire соединяет между собой все устройства SpaceWire. После этого любое устройство может отправлять данные или получать данные от другого устройства. Два прибора могут отправлять данные в блок памяти, блок процессора может считывать данные из блока памяти для проверки или обработки, а процессор может управлять двумя приборами и блоком памяти.

Преимуществами этого типа архитектуры являются:

  • универсальность;
  • все устройства могут общаться друг с другом через маршрутизатор;
  • управление и данные могут быть отправлены по сети;
  • поток управления обычно противоположен потоку данных.

Недостатки:

  • нужно помнить о потенциальной блокировке маршрутизатора – необходимо учитывать трафик в сети;
  • маршрутизатор является потенциальным одноточечным отказом;
  • дополнительное энергопотребление роутера.

Возможная блокировка маршрутизатора может произойти, если, например, два устройства одновременно решат отправить данные в блок памяти. Поскольку маршрутизатор имеет только один канал связи с модулем памяти, только одно устройство может одновременно отправлять пакет по этому каналу. Если пакет от устройства 1 попадёт в маршрутизатор первым, он будет отправлен, но пакет от устройства 2 будет заблокирован до тех пор, пока пакет от устройства 1 не будет отправлен. Если пакет от устройства 1 большой, то устройству 2, возможно, придётся долго ждать. Это показано на рисунке 9.

Figure9-Blocking-in-a-Router.svg
Блокировка в маршрутизаторе

Устройство 1 отправляет пакет (показан зелёным) в блок памяти. Устройство 2 также хочет послать пакет (синий) в блок памяти, но поскольку канал от маршрутизатора к блоку памяти уже используется, этот пакет заблокирован внутри маршрутизатора. Только когда пакет от устройства 1 завершит отправку, пакет от устройства 2 сможет продолжить свой путь к блоку памяти. Эта характеристика сети SpaceWire известна как «блокировка» и является важной для понимания.

Есть несколько способов избежать этой ситуации. Если требуемая общая скорость передачи данных от двух устройств больше, чем может быть обеспечена одним каналом SpaceWire, тогда требуется второй канал между маршрутизатором и памятью, возможно, с использованием групповой адаптивной маршрутизации, которая обеспечит постепенное снижение производительности в случае сбоя одного канала. Если общая скорость передачи данных от двух устройств меньше, чем скорость передачи данных по одному каналу SpaceWire, то маршрутизатор может действовать как концентратор, пропуская сначала пакет, скажем, от устройства 1, а затем пакет от устройства 2. В этом случае объём буферизированных данных в устройствах будет зависеть от размера отправляемых пакетов. Следовательно, имеет смысл использовать короткие пакеты, а не длинные, чтобы уменьшить объём требуемой буферной памяти. Другая альтернатива заключается в том, чтобы память (или процессор) контролировала, когда устройству разрешено отправлять данные. Например, память может запрашивать данные от устройства 1, а после их получения она может запрашивать данные от устройства 2. Существует много возможностей: SpaceWire достаточно гибок, чтобы поддерживать различные требования.

Следует отметить, что, поскольку маршрутизатор использует маршрутизацию через "бутылочное горлышко" и не поддерживает буферизацию пакетов в маршрутизаторе, скорость всех соединений SpaceWire, подключённых к маршрутизатору, обычно должна быть установлена на одинаковую скорость.

Типичные приложения для этого типа архитектуры включают системы обработки данных полезной нагрузки с более чем одним устройством или несколькими возможными пунктами назначения для данных от прибора. Потенциального отказа маршрутизатора в одной точке можно избежать, включив второй маршрутизатор, подключённый ко всем устройствам.

На рисунке 10 показана пара основных и резервных маршрутизаторов, которые были включены в основные и резервные блоки обработки данных вместе с запоминающими устройствами и блоками обработки. Это обеспечивает резервирование маршрутизатора при уменьшении длины (и, следовательно, массы) каналов SpaceWire.

Figure10-Router-in-Data-Handling-Unit.svg
Маршрутизатор в блоке обработки данных

Преимуществами этого типа архитектуры являются:

  • поддерживает мультиплексирование нескольких инструментов;
  • поддерживает основные/резервные инструменты;
  • отсутствие единичных отказов;
  • меньший массовый штраф за каналы, поскольку несколько каналов встроены в блоки обработки данных.

Недостатки:

  • нужно помнить о потенциальной блокировке маршрутизатора – необходимо учитывать трафик в сети;
  • дополнительное энергопотребление маршрутизатора.

Этот тип архитектуры идеален, когда требуется система обработки данных с резервированием.

2.4.4 Концентратор данных

Уже упоминалось, что роутер SpaceWire может выступать в роли концентратора данных. Другой пример этого показан на [рисунке 11] (#f11-router-as-data-concentrator).

Figure11-Router-as-Data-Concentrator.svg
Маршрутизатор как концентратор данных

Устройство 1 имеет высокую скорость передачи данных и подключён прямыми линиями к маршрутизаторам в основной и резервной системах обработки данных. Устройства 2-5 имеют низкую скорость передачи данных и все расположены в одной области космического аппарата. Чтобы уменьшить размер кабельного жгута, данные от приборов 2-5 концентрируются маршрутизатором SpaceWire и отправляются на основные или резервные блоки обработки данных по отдельным каналам SpaceWire.

Преимущества этой архитектуры:

  • Уменьшенная масса кабеля;
  • Высокоскоростные приборы имеют прямое подключение к блоку обработки данных;
  • Инструменты с низкой и средней скоростью подключаются через концентрирующий маршрутизатор.

Недостатками конкретной архитектуры, показанной на рисунке 11, являются:

  • Необходимо помнить о потенциальной блокировке маршрутизатора – нужно учитывать трафик в сети;
  • Концентрирующий маршрутизатор без резервирования.

При необходимости концентрирующий маршрутизатор можно сделать резервным, добавив резервные каналы связи и интерфейсы SpaceWire.

Этот тип архитектуры подходит для систем обработки данных полезной нагрузки с распределёнными кластерами инструментов, которые обслуживаются централизованным блоком обработки данных.

2.4.5 Мост к шине датчика низкой скорости передачи данных

Некоторые датчики, такие как термопары, имеют очень низкую скорость передачи данных, и шина датчиков с низкой скоростью передачи данных (например, шина CAN) может быть более подходящей для сбора данных с них. Собранные данные всё ещё могут быть отправлены в систему обработки данных через канал SpaceWire, если используется мост между шиной датчиков с низкой скоростью передачи данных и SpaceWire. Это показано на рисунке 12.

Figure12-Bridge-to-Low-Data-Rate-Bus.svg
Мост к шине с низкой скоростью передачи данных

Компьютер удалённого терминала (Remote Terminal Computer, RTC) обеспечивает мост между сетью SpaceWire и шиной датчиков с низкой скоростью передачи данных. RTC собирает данные с датчиков низкой скорости передачи данных, помещает их в пакет SpaceWire и отправляет в систему обработки данных. Команды для датчиков с низкой скоростью передачи данных (или приводов) могут передаваться от процессора обработки данных в RTC для распределения на датчики с низкой скоростью передачи данных.

Преимущества этого типа сети:

  • несколько датчиков с низкой скоростью передачи данных, подключённых к низкоскоростной шине – данные датчиков упакованы и отправлены в блок обработки данных по SpaceWire;
  • могут поддерживаться устаревшие устройства, например, Mil-Std 1553.

Недостатки:

  • приходится использовать два типа шины/сети.

Приложениями для этого типа архитектуры являются системы обработки данных, которые включают в себя несколько датчиков с низкой скоростью передачи данных или требуют поддержки устаревших устройств.

Другие устройства, такие как система телеметрии нисходящей линии связи и система телеуправления восходящей линии связи, могут быть легко включены в систему SpaceWire. Архитектуры SpaceWire могут быть адаптированы к требованиям интерфейса, включая каналы связи для обслуживания одного или нескольких инструментов, маршрутизаторы для обеспечения архитектурной гибкости и интерфейсы для электронного наземного вспомогательного оборудования.

2.5 Пример архитектуры интерфейса SpaceWire

В этом разделе перечислены некоторые из основных космических проектов, использующих в настоящее время SpaceWire, а затем более подробно рассмотрены архитектуры обработки данных пяти из них (две от ЕКА, одна от НАСА и две от JAXA).

2.5.1 Проекты с использованием SpaceWire

Европейское Космическое Агентство (ESA) использует SpaceWire для:

  • GAIA — картограф звёздного неба с очень высоким разрешением12;
  • ExoMars — полуавтономный марсоход13;
  • BepiColombo Mercury Polar Orbiter14;
  • Sentinel 115, пара спутников с радиолокационными изображениями, которые обеспечат всепогодную, круглосуточную визуализацию для ряда услуг, включая картографирование морского льда, мониторинг разливов нефти, обнаружение судов, движением по земной поверхности и ликвидацией последствий стихийных бедствий.
  • Sentinel 216, многоспектральный проект с высоким разрешением, которая будет поддерживать оперативный наземный мониторинг и аварийно-спасательные службы.
  • Sentinel 317, пара спутников, которые будут предоставлять оперативные морские и наземные услуги наблюдения Земли с использованием оптических и микроволновых инструментов.
  • Sentinel 518, серия спутников наблюдения Земли.

НАСА использует SpaceWire для:

  • SWIFT — обсерватория гамма-всплесков, находящаяся на орбите и делающая научные открытия с 2004 года19;
  • Lunar Reconnaissance Orbiter, который в настоящее время находится на орбите вокруг Луны и делает изображения поверхности с очень высоким разрешением (все эти изображения дважды проходят через SpaceWire на борту космического аппарата)20;
  • Проект LCROSS, который намеренно врезался в южный полюс Луны и обнаружила там лёд21;
  • Космический телескоп Джеймса Уэбба (JWST) — инфракрасный телескоп, который станет самым большим из когда-либо запущенных спутников, за исключением международной космической станции. При определении сети обработки данных для JWST НАСА провело обширный обзор подходящих технологий и выбрало SpaceWire22;
  • Магнитосферный многомасштабный проект, который представляет собой многоспутниковое применение для исследования магнитосферы Земли23;
  • GOES-R, серия геостационарных космических аппаратов для наблюдения за Землёй, предназначенная для замены нынешних метеорологических спутников США24;
  • Plug and Play Sat (PnPSat), которая является новаторской технологией быстрой сборки, интеграции и развёртывания для тактических приложений и приложений мониторинга стихийных бедствий25;
  • TacSat, который является частью программы оперативного реагирования США (ORS). И TacSat, и PnPSat выбрали SpaceWire для своих бортовых сетей обработки данных, конкурируя с другими космическими и наземными технологиями26.

Японское Агентство Аэрокосмических Исследований (JAXA) внедрило SpaceWire для всех своих космических аппаратов, которым требуется умеренная или высокая скорость передачи данных, в том числе:

  • BepiColombo Mercury Magnetospheric Orbiter, который является компаньоном космического аппарата ESA BepiColombo и будет измерять магнитосферу Меркурия27;
  • ASTRO-H, рентгеновский телескоп, предназначенный для изучения структуры и эволюции Вселенной 28;
  • SPRINT-A — небольшой спутник, который будет наблюдать за атмосферой Венеры, Марса и Юпитера в крайнем ультрафиолетовом (EUV) диапазоне с околоземной орбиты на высоте около 1000 километров 29;
  • ASNARO — японский проект по оптической съёмке Земли с высоким разрешением30;
  • NEXTAR, который является одним из первых космических аппаратов, использующих SpaceWire для всех бортовых коммуникаций, и строится NEC31.

Федеральное космическое агентство Российской Федерации (Роскосмос), недавно одобрили использование SpaceWire на своих космических аппаратах, рассматривая SpaceWire в качестве ключевой технологии для своих будущих космических применений32.

SpaceWire также используется в таких странах, как Аргентина, Бразилия, Канада, Китай, Индия, Корея, Тайвань, Таиланд и многих других странах, а также космическими агентствами отдельных европейских государств-членов. Ряд коммерческих космических аппаратов, в том числе Inmarsat33, также используют SpaceWire.

2.5.2 ЕКА ЭкзоМарс

Примечание: программа закрыта по инициативе Европейского космического агентства в связи с СВО.

ExoMars — это марсианский проект ЕКА, в которой задействован универсальный марсоход. Планировалось, что марсоход ExoMars будет нести широкий спектр научных инструментов, предназначенных для экзобиологических и геологических исследований. Ровер проедет несколько километров в поисках следов прошлых и настоящих признаков жизни, собирая и анализируя образцы из поверхностных пород и из недр на глубину до 2 метров34.

Figure13-ExoMars-Rover.png
Марсоход ExoMars

Архитектура обработки данных SpaceWire, используемая на марсоходе ExoMars, показана на рисунке 14. Она точно соответствует примерной архитектуре на рисунке 1.

Figure14-ExoMars-SpaceWire-Data-Handling-Architecture.svg
Архитектура обработки данных ExoMars SpaceWire

ExoMars оснащён несколькими камерами для поддержки навигации: PanCam обеспечивает панорамный вид вокруг марсохода, NavCams используется для предоставления стереоскопических изображений, из которых можно получить ЦМР и использовать их для целей навигации, а LocCams используется для измерения движения марсохода относительно поверхности. Обработка этих данных изображений является довольно интенсивной, поэтому для поддержки обработки используется специальный чип обработки изображений. SpaceWire используется для передачи изображений с камер в память, а оттуда в процессор и микросхему обработки изображений. Маршрутизатор SpaceWire используется для соединения различных блоков SpaceWire35. Инструментальная рука и инструмент Пастера также подключены к системе обработки данных с помощью SpaceWire.

ExoMars широко использует протокол RMAP36 для передачи данных с камер в память и в/из процессора и чипа обработки изображений.

2.5.3 Лунный разведывательный орбитальный аппарат НАСА

Лунный разведывательный орбитальный аппарат (Lunar Reconnaissance Orbiter, LRO)37 — это проект НАСА, которая в настоящее время находится на орбите вокруг Луны и возвращает изображения и другие научные данные о лунной поверхности, смотрите рисунок 15.

Figure15-LRO-In-Lunar-Orbit.png
Лунный разведывательный орбитальный аппарат на лунной орбите

Архитектура обработки данных лунного разведывательного орбитального аппарата38 показана на рисунке 16. Опять же, она аналогична примерной архитектуре на рисунке 1.

Figure16-Lunar-Reconnaissance-Orbiter-Data-Handling-Architecture.svg
Архитектура обработки данных лунного разведывательного орбитального аппарата

SpaceWire используется для подключения камер LRO (узкоугольных камер, NAC1 и NAC2, а также широкоугольные камеры, WAC) и радиолокационного мини-радиолокатора к системе управления и обработки данных (C&DH). SpaceWire также используется для передачи данных из системы управления и обработки данных в системы связи Ka и S-диапазона. Информация от устройства LymanAlpha Mapping Project (LAMP) передаётся на плату ввода‑вывода в системе C&DH (HK/IO), а затем отправляется по SpaceWire в компьютер/запоминающие устройства C&DH. Компьютер C&DH включает в себя 4‑портовый маршрутизатор SpaceWire для обработки связи SpaceWire.

Пример изображения из LRO приведён на рисунке 17. На нём показано место посадки Аполлона ‑ 12. На изображении хорошо видна стадия спуска «Аполлона-12» («Intrepid / Интрепид»), как и более ранний космический аппарат «Surveyor 3 / Сервейер-3». Чёрные линии, расходящиеся от Intrepid и отмеченные стрелками в других частях этого изображения — это следы астронавтов Аполлона ‑ 12. Это изображение передавалось по SpaceWire дважды: из NAC в запоминающие устройства и из памяти в систему нисходящей связи.

Figure17-Image-from-LRO-Showing-Apollo-12-Landing-Site.png
Изображение из LRO, показывающее место посадки Аполлона-12

2.5.4 BepiColombo

BepiColombo — совместный проект ЕКА и JAXA на Меркурий, целью которой является исследование Меркурия, попытка понять планету и дать ключ к разгадке формирования Солнечной системы. BepiColombo — особенно сложный проект из‑за близости Меркурия к Солнцу и связанных с этим суровых условий.

BepiColombo состоит из трёх космических аппаратов: Mercury Polar Orbiter (MPO), который будет изучать поверхность планеты и её внутренний состав, Mercury Magnetospheric Orbiter (MMO), который будет изучать магнитосферу Меркурия, и Mercury Transfer Module (MTM), на котором находятся два других космический аппарата к Меркурию. MMO и MPO отделятся от MTM, когда он достигнет Меркурия. MMO разрабатывается Jaxa, а два других компонента — ЕКА.

Figure18-BepiColombo-MPO-and-MMO.png
BepiColombo MPO и MMO (предоставлено ЕКА)

Архитектура обработки данных SpaceWire, используемая в MPO, показана на рисунке 19.

Figure19-Mercury-Polar-Orbiter-Data-Handling-Architecture.svg
Архитектура обработки данных Mercury Polar Orbiter

MPO использует SpaceWire для обработки данных своих девяти научных полезных нагрузок.

Эти инструменты полезной нагрузки подключены к бортовому блоку запоминающих устройств через двухточечные каналы и три маршрутизатора SpaceWire, которые интегрированы в блок запоминающих устройств. Эти маршрутизаторы также соединены с бортовым компьютером и друг с другом последовательной цепочкой. Это позволяет бортовому компьютеру получить доступ к каждому из маршрутизаторов и инструментов полезной нагрузки для настройки и управления. Другой маршрутизатор используется для подключения блока запоминающих устройств к генераторам формата телеметрии нисходящей линии связи X-диапазона и Ka­диапазона, которые форматируют данные полезной нагрузки перед их отправкой обратно на Землю.

Этот маршрутизатор SpaceWire также подключён к бортовому компьютеру, что позволяет настраивать и контролировать маршрутизатор и генераторы формата телеметрии нисходящей линии связи. Каналы связи SpaceWire также используются для подключения бортового компьютера к платформе космического аппарата и электронному наземному вспомогательному оборудованию (EGSE).

В качестве устройств маршрутизации SpaceWire используются маршрутизаторы ЕКА SpW-10X (Atmel AT7910E).

Рисунок 19 упрощён для ясности. В целях резервирования блоки обработки данных дублируются с перекрёстным связыванием между блоками, чтобы повысить общую надёжность и избежать возможных отказов в одной точке. MMO показана на рисунке 20, а её архитектура обработки данных показана на рисунке 21.

Figure20-BepiColombo-MMO.png
BepiColombo MMO (предоставлено ЕКА)
Figure21-Mercury-Magnetospheric-Orbiter-Data-Handling-Architecture.svg
Архитектура обработки данных магнитосферного орбитального аппарата «Меркурий»

Каждый прибор подключается с помощью двухточечной связи к процессору данного интерфейса, который содержит два блока обработки данных, каждый из которых содержит центральный процессор и маршрутизатор SpaceWire. SpaceWire используется для настройки, управления, сбора служебной информации и сбора данных со всех инструментов в MMO. Он также используется для передачи телекоманд от системы космического аппарата и передачи служебных и научных данных в систему космического аппарата для телеметрии обратно на Землю. Из‑за низких требований к мощности и массе ММО была реализована специальная версия интерфейса SpaceWire, которая может запускаться и продолжать работу на скорости 2 Мбит/с.

2.5.5 АСНАРО

ASNARO — это японский проект по оптической съёмке Земли с высоким разрешением с расстоянием выборки наземных данных 0,5 м. в панхроматическом режиме и 2 м. в мультиспектральном режиме, а также шириной полосы обзора 10 км. ASNARO разрабатывается корпорацией NEC и USEF (Институт беспилотных космических экспериментов Free Flyer) при финансовой поддержке Министерства экономики, торговли и промышленности Японии. Общая цель проекта ASNARO заключается в разработке высокопроизводительной мини-спутниковой шинной системы следующего поколения на основе методов открытой архитектуры и производственных методологий, чтобы резко сократить стоимость и время разработки с внедрением современных электронных технологий39.

SpaceWire используется на борту ASNARO для обработки всех данных. Архитектура SpaceWire показана на рисунке 22.

Figure22-ASNARO-SpaceWire-Networks.svg
ASNARO SpaceWire Networks

ASNARO использует SpaceWire для управления платформой и ориентацией и орбитой (AOCS), а также для обработки данных полезной нагрузки. Компьютер управления полезной нагрузкой подключён к полезной нагрузке с помощью SpaceWire. Электроника платформы, включая компьютер обработки данных, компьютер полезной нагрузки, компьютер управления ориентацией и орбитой, управление нагревателем, приёмник GPS, управление питанием и блок телеуправления-телеметрии S-диапазона, соединены между собой с помощью маршрутизатора SpaceWire. Отдельная сеть SpaceWire соединяет датчики и приводы AOCS с компьютером AOCS.

3 Каналы SpaceWire

В этом разделе более подробно рассматривается работа канала SpaceWire. SpaceWire основан на двух предыдущих стандартах IEEE 1355-199540 и ANSI/TIA/EIA­64441.

Стандарт SpaceWire охватывает физические разъёмы и кабели, электрические свойства и логические протоколы, которые составляют каналы передачи данных и сети SpaceWire, которые определены на следующих нормативных уровнях протокола.

  • Физический уровень — разъёмы SpaceWire, кабели, кабельные сборки и дорожки печатных плат.
  • Уровень сигнала — кодирование сигнала, уровни напряжения, запас по шуму и скорость передачи данных, используемые в SpaceWire.
  • Уровень символов — символы данных и управляющие символы, используемые для управления потоком данных по каналу SpaceWire.
  • Уровень обмена — протоколы для инициализации канала, управления потоком, обнаружения ошибок канала и устранения ошибок канала.
  • Пакетный уровень — определение того, как данные для передачи по каналу SpaceWire разбиваются на пакеты.
  • Сетевой уровень — структура сети SpaceWire и способ передачи пакетов от узла ‑ источника к узлу ‑ получателю по сети. Уровень сети также определяет, как обрабатываются ошибки связи и ошибки сетевого уровня.

В следующих подразделах каждый из этих уровней протокола будет рассмотрен по очереди, включая уровень пакетов.

3.1 Физический уровень

Физический уровень стандарта SpaceWire охватывает кабели, разъёмы, кабельные сборки и дорожки печатных плат. SpaceWire был разработан в соответствии со спецификациями электромагнитной совместимости для обычных космических аппаратов.

3.1.1 Кабели

Кабель SpaceWire состоит из четырёх витых пар с отдельным экраном вокруг каждой витой пары и общего экрана. Для достижения высокой скорости передачи данных с помощью SpaceWire на расстояния до 10 м используется кабель со следующими характеристиками:

  • Характеристическое сопротивление дифференциального сопротивления 100 Ом, которое согласовано с сопротивлением оконечной нагрузки линии.
  • Низкий перекос сигнал-сигнал между каждым сигналом в дифференциальной паре и между парами Данные и Строб.
  • Низкое затухание сигнала.
  • Низкие перекрёстные помехи.
  • Хорошие характеристики ЭМС.

Структура кабеля SpaceWire показана на рисунке 23.

Figure23-SpaceWire-Cable-Structure.svg
Структура кабеля SpaceWire

Одним из недостатков SpaceWire является масса кабеля, которая составляет около 87 г/м. В настоящее время ЕКА разрабатывает новую форму кабеля SpaceWire, который имеет значительно меньшую массу. Этот кабель использует только один уровень экранирования.

SpaceWire может работать со скоростью 200 Мбит/с по 10-метровому кабелю. Для бо́льших расстояний можно увеличить сечение проводников, чтобы уменьшить затухание в кабеле.

3.1.2 Разъёмы

Разъём SpaceWire имеет восемь сигнальных контактов плюс контакт для подключения экрана. В качестве разъёма SpaceWire указан микроминиатюрный разъём D-типа с девятью контактами. Этот тип соединителя подходит для использования в космосе. Схема контактов разъёма показана на рисунке 24.

Figure24-SpaceWire-Connector-Pin-Out.svg
Разводка разъёма SpaceWire

3.1.3 Кабельные сборки

Кабельные сборки SpaceWire изготавливаются из отрезка кабеля SpaceWire длиной до 10 м, заканчивающегося на каждом конце девятиштырьковыми микроминиатюрными штекерами D ‑ типа.

Figure25-SpaceWire-Cable-Assembly.png
Кабельная сборка SpaceWire

Кабельная сборка SpaceWire включает в себя внешний экран, который на 360º заканчивается на задней оболочке разъёма на каждом конце кабеля. Каждая витая пара также имеет экран (внутренние экраны), которые подключаются к контакту 3 разъёма (сигнальная земля) только на одном конце кабеля, экраны которых должны соединяться между собой.

Такое расположение далеко от идеального, и в будущем рекомендуется, чтобы все экраны подключались к корпусу и контакту 3 на обоих концах разъёма.

Фотография кабельной сборки SpaceWire показана на рисунке 26.

Figure26-Photograph-of-SpaceWire-Cable-Assembly.png
Фотография кабельной сборки SpaceWire

3.1.4 Дорожки печатной платы

SpaceWire также можно прокладывать по печатным платам (PCB), включая объединительные платы. Из‑за высокой скорости сигналов SpaceWire, которые имеют полосу пропускания более 1 ГГц (при 200 Мбит/с частота сигнала составляет 100 МГц, а частота фронтов сигнала примерно в десять раз больше, что даёт 1 ГГц), необходимо соблюдать осторожность с макетом печатной платы. Следует придерживаться следующих указаний:

  • дорожки печатной платы должны иметь дифференциальное сопротивление 100 Ом;
  • пары дорожек хорошо отделены от других дорожек;
  • отсутствие поворотов под прямым углом;
  • минимальное использование переходных отверстий;
  • каждый сигнал дифференциальной пары должен отслеживаться одинаково и иметь одинаковую длину (< 5 мм);
  • пары сигналов данных и стробоскопа должны иметь одинаковую длину (< 5 мм).

3.2 Уровень сигнала

Сигнальный уровень стандарта SpaceWire охватывает уровни напряжения сигнала, уровень шумов и кодирование сигнала

3.2.1 Уровень сигнала и допустимые помехи

Для передачи сигналов SpaceWire используется LVDS по стандарту ANSI/TIA/EIA-64442. LVDS использует симметричные сигналы для обеспечения высокоскоростного соединения с низким разбросом напряжения (обычно 350 мВ). Балансная или дифференциальная передача сигналов обеспечивает достаточный запас по шуму, позволяющий использовать низкое напряжение в практических системах. Низкое колебание напряжения приводит к относительно низкому энергопотреблению на высокой скорости. LVDS подходит для соединений между микросхемами на плате, платами в блоке и соединениями между блоками на расстоянии 10 м и более. Уровни сигнализации LVDS показаны на рисунке 27.

Figure27-LVDS-Signalling-Levels.svg
Уровни сигнализации LVDS

Типичные драйвер и приёмник LVDS показаны на рисунке 28 и соединены средой (кабелем или дорожками печатной платы) с дифференциальным сопротивлением 100 Ом. Драйвер LVDS использует логику текущего режима. Источник постоянного тока около 3,5 мА обеспечивает ток, вытекающий из драйвера по передающей среде, через согласующее сопротивление 100 Ом и обратно к драйверу через передающую среду. Две пары транзисторных переключателей в драйвере управляют направлением тока, протекающего через согласующий резистор. Когда транзисторы драйвера, отмеченные «+» на рисунке 28, включены, а транзисторы, отмеченные «-», выключены, ток течёт, как показано стрелками на диаграмме, создавая положительное напряжение на согласующем резисторе. Когда два управляющих транзистора с знаком «-» включены, а транзисторы со знаком «+» выключены, ток течёт в противоположном направлении, создавая отрицательное напряжение на согласующем резисторе. Приёмники LVDS имеют высокий входной импеданс, так что большая часть тока проходит через согласующий резистор, генерируя около ±350 мВ при номинальном токе источника 3,5 мА.

Figure28-LVDS-Operation.svg
Принцип работы LVDS

LVDS имеет несколько особенностей, которые делают его очень привлекательным для передачи данных43:

  • Почти постоянный общий ток привода (+3,5 мА для логической 1 и -3,5 мА для логического 0), что снижает шум переключения источников питания.

  • Высокая устойчивость к разности потенциалов земли между драйвером и приёмником, LVDS может выдерживать разность потенциалов земли не менее ±1 В.

  • Высокая устойчивость к наведённым помехам благодаря дифференциальной передаче сигналов, обычно с использованием кабеля с витой парой.

  • Низкое электромагнитное излучение, потому что небольшие равные и противоположные токи создают небольшие электромагнитные поля, которые имеют тенденцию компенсировать друг друга.

  • Не зависит от напряжения питания конкретного устройства.

  • Простая оконечная нагрузка 100 Ом на приёмнике.

  • Отказоустойчивая работа — выход приёмника переходит в высокое состояние (неактивен) всякий раз, когда:

    • приёмник включён, а драйвер выключен,
    • входы закорочены друг на друга,
    • входные провода отсоединены.
  • Потребляемая мощность обычно составляет 50 мВт на пару драйвер/приёмник для LVDS по сравнению со 120 мВт для ECL/PECL.

Уровни сигнала и запасы по шуму для SpaceWire взяты из стандарта ANSI/TIA/EIA-64444, который определяет выходные характеристики драйвера и входные характеристики приёмника. Глазковая диаграмма для сигналов SpaceWire, передаваемых по кабелю длиной 10 м со скоростью передачи данных 200 Мбит/с, показана на рисунке 29.

Figure29-SpaceWire-Eye-Diagram.png
Глазковая диаграмма SpaceWire (200 МГц, кабель 10м)

3.2.2 Кодирование данных

SpaceWire использует кодировку Data-Strobe (DS). Это схема кодирования, которая кодирует тактовую частоту передачи с данными в данные и строб, так что тактовую частоту можно восстановить, просто объединив линии XOR вместе линий данных и строба. Значения данных передаются напрямую, и стробирующий сигнал меняет состояние всякий раз, когда данные остаются постоянными от одного интервала битов данных к другому. Эта схема кодирования показана на рисунке 30. Схема кодирования DS также используется в стандарте IEEE 1355-199545 и IEEE 1394-1995 (Firewire)46.

Причина использования DS-кодирования состоит в том, чтобы повысить устойчивость к перекосу почти до 1-битного времени по сравнению с 0,5-битным временем для кодирования простых данных и тактов.

Figure30-Data-Strobe-DS-Encoding.svg
Кодировка Data-Strobe (DS)

Канал SpaceWire состоит из двух пар дифференциальных сигналов, одна пара которых передаёт сигналы D и S в одном направлении, а другая пара передаёт D и S в противоположном направлении. Это всего восемь проводов для каждого двунаправленного канала.

Битовая трассировка анализатора канала SpaceWire показана на рисунке 31. Жёлтые линии — данные и стробирующие сигналы (DIN и SIN). При каждом переходе линии строба вертикальная пунктирная белая линия проводилась от сигнала строба по сигналу данных. Значение строки данных между этими вертикальными линиями или переходами строки данных представляет собой декодированное значение данных, отображаемое белыми цифрами 0 или 1 на графике. Таким образом, битовая синхронизация в SpaceWire довольно проста, но определение границ между символами SpaceWire в битовой трассировке является более сложной задачей.

Figure31-Decoding-SpaceWire-Data.png
Расшифровка данных SpaceWire

SpaceWire выполняет битовую синхронизацию путём операции XOR данных и сигналов стробирования для формирования тактового сигнала, оба фронта которого затем используются для считывания значений в строке данных.

3.3 Символьный уровень

В этом разделе описывается уровень символов SpaceWire.

3.3.1 Символы SpaceWire

У SpaceWire есть два типа символов: символы данных и управляющие символы, которые показаны на рисунке 32.

  • Символы данных, которые содержат восьмибитовое значение данных, передаются первым младшим значащим битом. Каждый символ данных содержит бит чётности (паритета), флаг управления данными и восемь битов данных. Бит чётности охватывает предыдущие восемь битов данных или два бита управляющего символа, текущий бит чётности и текущий флаг управления данными. Значение должно быть установлено так, что общее количество единиц в поле, охватываемым данным битом должно быть нечётным. Флаг управления данными устанавливается в ноль, чтобы указать, что текущий символ является символом данных.
  • Управляющие символы, содержащие двухбитный управляющий код. Каждый управляющий символ формируется из бита чётности, флага управления данными и двухбитового управляющего кода. Флаг управления данными устанавливается в единицу, чтобы указать, что текущий символ является управляющим. Покрытие чётности похоже на покрытие символа данных. Одним из четырёх возможных управляющих символов является управляющий код (ESC). Это можно использовать для формирования более длинных управляющих кодов. Указаны и действительны два более длинных управляющих кода: код NULL и Time‑код.

В дополнение к данным и управляющим символам есть два управляющих кода: NULL и Time‑коды.

  • NULL формируется из ESC, за которым следует метка управления потоком (FCT). NULL передаётся всякий раз, когда канал не отправляет данные или маркеры управления, чтобы поддерживать активный канал и поддерживать обнаружение разрыва канала.
  • Time‑код используется для поддержки распределения системного времени по сети. Time‑код формируется с помощью ESC, за которым следует один символ данных.
Figure32-Data-and-Control-Characters-and-Control-Codes.svg
Данные, управляющие символы и управляющие коды

3.3.2 Покрытие чётности

Покрытие чётности для SpaceWire немного необычно, так как оно соответствует стандарту IEEE1355­1995. Из‑за разной длины управляющего символа и символа данных поле чётности предыдущего символа включает флаг данных/управления следующего символа. Это делается для того, чтобы длина следующего символа проверялась битом чётности перед декодированием этого символа. Это позволяет избежать неправильного декодирования символа, когда его флаг данных/управления ошибочен.

Figure33-Data-and-Control-Characters-Parity-Coverage.svg
Контроль чётности символов данных и управляющих символов

3.3.3 Приоритет символов

Передача символов имеет следующий приоритет:

  • Time‑код – наивысший приоритет
  • FCT
  • N‑символы
  • NULL – самый низкий приоритет

Time‑коды имеют наивысший приоритет, поскольку они используются для передачи информации о времени или синхронизации и должны доставляться с низким отклонением. FCT имеют более высокий приоритет, чем N‑символы, поэтому большой объём данных, отправляемых в одном направлении, не останавливает отправку FCT, что приводит к тому, что другой конец канала прекращает отправку данных, поскольку он исчерпал возможности управления потоком. NULL имеют самый низкий приоритет, поскольку они отправляются только для поддержания работы и синхронизации канала, когда больше нечего отправлять.

3.3.4 Назначения символов

Символы в SpaceWire используются для трёх разных назначений: управление каналом, отправка пакетов и отправка Time‑кодов.

Символы и управляющие коды, используемые для управления каналом — это NULL и FCT, которые известны как L‑символы или символы канала. Они используются на уровне Exchange и не передаются на более высокий уровень.

Символы и управляющие коды, используемые для отправки пакетов, представляют собой символы данных и маркеры конца пакета (EOP и EEP), известные как N‑символы или обычные символы. Эти символы передаются на пакетный уровень.

Time‑коды используются для отправки информации о времени и синхронизации и передаются обработчику Time‑кодов узла или маршрутизатора.

Интерфейс связи SpaceWire чередует L‑символы, N‑символы и Time‑коды. N‑символы из одного пакета не чередуются с N‑символами из другого пакета. Полученный символ должен быть проверен на чётность, прежде чем будет обработан.

3.3.5 Синхронизация символов

Синхронизация символов выполняется только один раз, когда канал запускается, либо перезапускается после разрыва связи. Это показано на рисунке 34.

Один терминал канала (нижний сигнал, терминал A) начинает отправлять NULL-коды, определённую последовательность из 8 битов данных. Другой терминал обнаруживает эту последовательность, синхронизирует свой приёмник и начинает отправлять обратно нули (верхний сигнал, терминал B). Когда терминал B получает эти значения Null, он синхронизирует свой приёмник. Дальнейший обмен выполняется между двумя концами соединения, который описан ниже в разделе 3.4. Первоначально интерфейсы SpaceWire начинают работать со скоростью передачи данных 10 Мбит/с. После того, как соединение установлено, два конца соединения могут переключаться на работу с более высокой скоростью, если это необходимо. Это хорошо видно на рисунке 34.

Перед тем, как канал отправит свой первый Null, линии данных и строба устанавливаются на низкий уровень, как показано на рисунке 35.

К сожалению, последовательность битов для Null не уникальна в последовательности битов SpaceWire, поэтому её нельзя надёжно использовать для повторной синхронизации сигналов без предварительной остановки канала SpaceWire, а затем его перезапуска и повторной синхронизации.

3.4 Уровень обмена

Уровень обмена SpaceWire отвечает за обмен информацией между двумя концами канала. Он обеспечивает следующие функции: инициализация канала, управление потоком и обработка ошибок.

3.4.1 Интерфейс связи SpaceWire

На каждом конце канала SpaceWire находится интерфейс канала SpaceWire. Блок-схема интерфейса канала показана на рисунке 36.

Канал SpaceWire может отправлять и получать пакеты SpaceWire и Time‑коды после того, как он был инициализирован и запущен. Как описано в разделе 2.3.2, пакет SpaceWire содержит адрес назначения, передаваемых данных и маркер конца пакета. Чтобы отправить пакет SpaceWire по каналу SpaceWire, он передаётся посимвольно в буфер передачи FIFO, начиная с первого символа адреса получателя. Пакеты SpaceWire поступают в RX FIFO и могут быть прочитаны приложением. Для отправки Time ‑ кода он предъявляется интерфейсу SpaceWire и будет передан, как только завершится передача текущего символа. Когда Time ‑ коды получены, они становятся доступными через интерфейс Time ‑ кода. Time ‑ коды должны быть проверены перед их использованием, смотрите раздел 5.

Прежде чем канал SpaceWire сможет отправлять и получать пакеты и Time‑коды SpaceWire, его необходимо инициализировать. Это делается под управлением конечного автомата канала. Этот конечный автомат также управляет восстановлением после любых ошибок, обнаруженных в канале, методом повторной инициализации канала.

Чтобы предотвратить переполнение приёмного FIFO, интерфейс SpaceWire включает в себя схему контроля объёма доступного пространства в приёмном FIFO и регулирования данных, отправляемых с другого конца, с помощью меток управления потоком.

3.4.2 Инициализация канала

Инициализация канала необходима для полной синхронизации обоих концов канала и готовности к приёму данных, символов EOP и Time‑кодов. Синхронизация битов выполняется путём декодирования сигналов строба данных для создания битовой синхронизации и потока данных. Синхронизация символов выполняется один раз при инициализации канала. Оба конца канала должны быть синхронизированы по символам, иначе канал автоматически сбрасывается и пытается выполнить повторную синхронизацию.

После сброса интерфейс SpaceWire удерживается в состоянии сброса до тех пор, пока он не получит указание запуститься и попытаться установить соединение с интерфейсом SpaceWire на другом конце канала. Соединение устанавливается после процедуры установки соединения, которое гарантирует, что оба конца канала смогут успешно отправлять и получать символы. Каждый конец канала отправляет NULL, ожидает получения NULL, затем отправляет FCT и ожидает получения FCT. Поскольку интерфейсу SpaceWire не разрешено отправлять FCT до тех пор, пока он не получит NULL, получение одного или нескольких NULL с последующим получением FCT означает, что другой конец канала успешно получил NULL и установлено полное соединение. Этот обмен NULL и FCT известен как рукопожатие Null/FCT.

Инициализация канала обрабатывается конечным аппаратом в каждом из интерфейсов SpaceWire на любом конце канала. Базовый конечный аппарат показан на рисунке 37. Эта диаграмма упрощена, чтобы выделить процедуру инициализации канала.

Figure37-SpaceWire-Interface-State-Machine.svg
Конечный аппарат интерфейса SpaceWire

При сбросе конечный автомат интерфейса SpaceWire переходит в состояние ErrorReset, при котором и передатчик, и приёмник в интерфейсе SpaceWire сбрасываются. Конечный автомат остаётся в этом состоянии в течение 6,4 мкс, чтобы убедиться, что интерфейс правильно сброшен, а затем переходит в состояние ErrorWait, в котором он сохраняет сброс передатчика, но разрешает приёмник. Причина этого станет ясна позже. После ожидания 12,8 мкс в состоянии ErrorWait интерфейс SpaceWire переходит в состояние Ready, где он ожидает команды для запуска канала. Когда интерфейс SpaceWire получает указание запустить связь (логикой локального приложения, использующей интерфейс SpaceWire), он переходит в состояние Started, в котором начинает отправлять NULL-коды. Если другой конец (конец B) канала также отправляет Null, то конец A получит Null (gotNull) и перейдёт в состояние Connecting. В состоянии соединения передатчику разрешено отправлять пустые значения и FCT. Он отправит начальный пакет FCT (смотрите далее раздел управления потоком) как часть процедуры инициализации. Другой конец канала (конец B) получит NULL-коды и, следовательно, также будет находиться в состоянии соединения, отправляя FCT и NULL-коды. FCT будут получены в конце A, и конечный автомат перейдёт в состояние Run. В состоянии Run оба конца канала установили соединение (или только собираются это сделать), и интерфейс SpaceWire готов начать передачу данных. Канал теперь будет оставаться в состоянии Run до тех пор, пока один из интерфейсов SpaceWire не будет отключён логикой локального приложения, установив контрольный бит Link Disabled.

Если другой конец канала (терминал B) не готов и не отправляет Null и FCT, как ожидается, терминал A будет ждать в состоянии Started или Connecting в течение 12,8 мкс, а затем прекратит ожидание, вернётся в состояние ErrorReset и попробует ещё раз установить соединение. Это показано на рисунке 38.

Figure38-SpaceWire-Interface-State-Machine-moves-to-ErrorReset.svg
Алгоритм перехода SpaceWire в ErrorReset, когда не получены Null или FCT

Чтобы не устанавливать оба бита Start Link на обоих концах канала для запуска канала, в конечный автомат SpaceWire включён режим Auto-Start. Интерфейс SpaceWire в режиме Auto-Start автоматически запустится, когда получит бит (gotBit) на свой приёмник. Эта функциональность достигается за счёт добавления дополнительного условия при переходе между состояниями «Готово» и «Запущено». Это добавление показано на рисунке 39.

Figure39-SpaceWire-Interface-State-Machine-with-Auto-Start.svg
Конечный автомат интерфейса SpaceWire с автоматическим запуском

На одном конце канала (конец B) установлен управляющий бит AutoStart, он был сброшен, прошёл через ErrorReset и ErrorWait и теперь находится в состоянии Ready. Другой конец канала (конец A) также был сброшен и находится в состоянии готовности. Когда конец A получает команду Start Link, он переходит в состояние Started и начинает отправлять Null. Конец B получает начало Null, и утверждается gotBit, заставляя его также переходить в состояние Started. Рукопожатие Null/FCT теперь происходит, когда оба конца проходят через Started и Connecting to Run.

Когда один конец канала пытается установить соединение, то есть установлено значение Start Link, а другой конец канала (конец B) по какой-либо причине не готов к установлению соединения, конец A будет постоянно отправлять символы Null в течение 12,8 мкс и затем отключаться на 19,2 мкс (6,4 мкс + 12,8 мкс). Появление пакетов нулей с одного конца канала, в то время как в другом направлении ничего не отправляется, является явным признаком того, что один конец пытается отправить, а другой конец не отвечает. Это может быть связано с тем, что на этом конце канала не установлен бит управления автозапуском или, в качестве альтернативы, установлен его бит отключения.

Последовательность инициализации канала показана на рисунке 40. Последовательность символов в событии A → B предназначена для одного направления связи (символы отправляются из конца A в конец B), а в событии B → A — в другом направлении.

  1. Канал разъединяется, что приводит к сбросу обоих концов канала, переходу от состояний ErrorReset и ErrorWait к состоянию Ready.
  2. Конец B канала имеет установленную Start Link и, таким образом, переходит в состояние Started и начинает отправлять Null, которые принимаются на конец A, сначала вызывая утверждение GOT-BIT, а затем получение серии Null.
  3. Конец A имеет установленный AutoStart, поэтому, как только он получил первый бит (GOT-BIT), он переходит в состояние Started и отправляет хотя бы один Null, который принимается на конце B.
  4. Когда конец A получает Null и после того, как он отправил хотя бы один Null в ответ, он переходит в состояние Connecting и может отправить один или несколько FCT.
  5. Null от конца A поступает на конец B, поэтому конец B переходит в состояние Connecting и может отправить один или несколько FCT.
  6. FCT от конца A поступает на конец B, поэтому конец B переходит в состояние Run и переключается на требуемую скорость работы канала (обратите внимание на изменение синхронизации символов).
  7. FCT, отправленный с конца B, принимается на конце A, поэтому конец A переходит в состояние Run и переключается на требуемую скорость работы канала. Сейчас канал работает в обоих направлениях.

Обратите внимание, что во время инициализации должен быть отправлен по крайней мере один Null перед отправкой FCT, хотя это чётко не указано в стандарте SpaceWire.

Если на входе приёмника есть шум, возможно, вызванный отсоединением кабеля, случайный шум может иногда соответствовать Null, за которым следует FCT. Если приёмник находится в режиме автозапуска, это заставит приёмник запуститься и начать отправку нулей и FCT. В конце концов шум вызовет ошибку чётности и отключение. Если интерфейс SpaceWire периодически отправляет короткие пакеты символов, вероятно, причиной является шум на входах его приёмника. В некоторой степени нежелательный шум можно устранить, используя смещающие резисторы на входах приёмника.

Передатчику разрешено передавать N‑символы (обычные символы, которые являются символами данных, EOP или EEP), если для них есть место в приёмном FIFO на другом конце канала. Полученный FIFO указывает, что есть место для ещё восьми N‑символов, запрашивая передатчик канала для отправки маркера управления потоком (FCT). FCT принимается на другом конце канала (конец B), что позволяет передатчику на конце B отправить до восьми дополнительных N‑символов. Если в приёмном FIFO больше места, можно отправить несколько FCT, по одному на каждые восемь мест в приёмном буфере. Соответственно, если получено несколько FCT, это означает, что в приёмном FIFO имеется соответствующий объём свободного места, например, четыре FCT означают, что есть место для 32 N‑символов. Таким образом, каждый FCT заменяется на 8 N‑символов. Работа управления потоком показана на рисунке 41.

Figure41-Flow-Control-With-FCTs.png
Управление потоком с помощью FCT

FCT, отправленный концом B и полученный концом A (1), позволяет концу A послать ещё восемь N‑символов (2). FCT идёт в направлении, противоположном данным, на которые он обменивается. Канал SpaceWire на рисунке 41 отправляет данные в обоих направлениях канала, поэтому FCT также отправляются в обоих направлениях.

Интерфейсу SpaceWire разрешено иметь максимум семь незавершённых FCT, соответствующих 56 N‑символам. При необходимости можно использовать буферы большего размера, но семи FCT более чем достаточно для поддержки непрерывной передачи данных по каналу. Также могут использоваться меньшие FIFO, и в этом случае в обращении всегда будет меньше семи FCT.

Существует несколько типов ошибок, которые могут возникнуть в канале SpaceWire:

  • Ошибка разъединения – канал разъединён в одном или обоих направлениях, поэтому данные или пустые значения не принимаются.
  • Ошибка чётности – полученный символ содержит ошибку чётности.
  • Escape-ошибка – получен Escape ‑ символ, за которым следует другой Escape ‑ символ, EOP или EEP, которые представляют собой недопустимые последовательности символов.
  • Ошибка кредитования – N‑символ приходит, когда для него нет места в приёмном FIFO.

Отключение канала связи обнаруживается, когда после приёма бита данных не принимается новый бит данных в течение окна времени ожидания отключения канала (850 нс). После обнаружения ошибки отключения канала пытается восстановиться после ошибки.

Ошибки чётности, возникающие в символе данных или управляющем символе, обнаруживаются при отправке следующего символа, поскольку бит чётности для символа данных или управляющего символа содержится в следующем символе. После обнаружения ошибки чётности канал пытается восстановиться после ошибки.

После ошибки или сброса канал пытается повторно синхронизироваться и перезапуститься, используя протокол «обмен молчанием» (смотрите рисунок 42). Конец канала, который либо сбрасывается, либо обнаруживает ошибку, прекращает передачу. На другом конце соединения это обнаруживается как разрыв соединения, и этот конец также прекращает передачу. Первый канал сбрасывает свои входы и выходы на 6,4 мкс, чтобы гарантировать, что другой конец обнаружит разъединение. Другой конец также ожидает 6,4 мкс после прекращения передачи. Затем каждый канал ждёт ещё 12,8 мкс, прежде чем начать передачу. Этих периодов времени достаточно, чтобы гарантировать, что приёмники на обоих концах канала готовы к приёму символов до того, как любой конец начнёт передачу. Два конца канала проходят через рукопожатие NULL/FCT (смотрите рисунок 40) для повторного установления соединения и обеспечения надлежащей синхронизации символов.

Восстановление после ошибок контролируется конечным автоматом в интерфейсе SpaceWire. Полный конечный автомат показан на рисунке 43.

Figure43-SpaceWire-Interface-State-Machine-Error-Recovery.svg
Восстановление после ошибок конечного автомата интерфейса SpaceWire

Условия ошибки, которые могут возникнуть, показаны красным цветом. Любая обнаруженная ошибка приводит к переходу к ErrorReset, который запускает цикл восстановления после ошибки.

RxErr — ошибка разъединения, ошибка чётности или ошибка перехода.

Обнаружение ошибок разъединения включается после сброса канала только после получения первого бита.

RxErr может быть обнаружен в любом состоянии, кроме ErrorReset, и приведёт к переходу в ErrorReset.

В состояниях ErrorWait, Ready и Started не должно быть возможности получить FCT, N‑символ или Time‑код, поскольку канал ещё не полностью инициализирован. Получение любого из этих символов является ошибкой и приводит к переходу в состояние ErrorReset.

В состоянии соединения не должно быть возможности получать N‑символы или Time‑коды, так как канал подключён только частично, перед любым из этих других символов должен быть получен FCT, что завершает инициализацию канала и вызывает переход в состояние выполнения. Если какие-либо N‑символы или Time‑коды получены в состоянии Connecting, это ошибка, и конечный автомат переходит в состояние ErrorReset.

Обнаружение ошибки чётности, Escape Error, gotFCT, gotN-Char и gotTime-Code включаются только после получения первого Null, то есть утверждения gotNULL.

Таким образом:

    RxErr OR gotFCT OR gotN-Char OR gotTime-Code

На самом деле:

    RxErr OR (gotNULL AND (gotFCT OR gotN-Char OR gotTime-Code))

3.4.5 Автозапуск

Функция Auto-Start в интерфейсе связи SpaceWire позволяет дальнему концу канала разрешать инициирование запуска канала. Один конец канала настроен на автоматический запуск. Некоторое время спустя другой конец канала запускается и начинает отправлять NULL-коды. Их получают в конце канала, установленном на Auto-Start, который отвечает на получение Null запуском и отправкой Null. Происходит инициализация канала, после чего данные могут быть отправлены по каналу.

Оба конца канала SpaceWire могут быть настроены на автоматический запуск, и в этом случае любой конец может быть запущен и вызвать инициализацию канала.

Без средства Auto-Start оба конца канала должны были бы запускаться специально. Один конец может быть запущен, отправляя нули в течение длительного времени, прежде чем другой конец также будет запущен. Это ресурсозатратно.

Условие включения канала для начала инициализации:

    [Link Enabled] = ( NOT [Link Disabled] ) AND ([LinkStart] OR ( [AutoStart] AND gotNULL ))

Где:

  • LinkDisabled — флаг, установленный программным или аппаратным обеспечением, чтобы указать, что канал отключён;
  • LinkStart — флаг, установленный программным или аппаратным обеспечением для запуска канала;
  • AutoStart — флаг, установленный программным или аппаратным обеспечением, чтобы запросить автоматический запуск канала при получении NULL;
  • gotNULL — флаг, указывающий, что интерфейс канала получил NULL.

Если канал отключён, установлен LinkDisabled, другие флаги игнорируются, и канал не будет пытаться начать инициализацию, пока LinkDisabled не будет снят.

3.5 Пакетный уровень

На пакетном уровне SpaceWire определяются поля пакета SpaceWire: адрес назначения, передаваемые данные и маркер конца пакета, как показано на рисунке 44.

Figure2-SpaceWire-Packet-Format.svg
Формат пакета SpaceWire

«Адрес назначения» — это первая часть отправляемого пакета, представляющая собой список символов данных, который представляет либо идентификатор узла назначения, либо путь, который пакет должен пройти через сеть SpaceWire, чтобы достичь точку назначения. В случае соединения точка-точка непосредственно между двумя точками (без маршрутизаторов между ними) адрес назначения не требуется.

«Передаваемые данные» — это данные, которые должны быть переданы от источника к месту назначения. Любое количество байтов данных может быть передано в пакете SpaceWire.

«Конец пакета» (EOP) используется для обозначения конца пакета. Символ данных, следующий за End of Packet, является началом следующего пакета. Размер пакета SpaceWire не ограничен.

В дополнение к обычному маркеру конца пакета (EOP) существует ещё один маркер конца пакета, маркер конца пакета с ошибкой (EEP), который указывает, что пакет был завершён преждевременно из‑за ошибки, возникшей при прохождении пакета по каналу или сети SpaceWire. Пакет, завершённый EEP, показан на рисунке 45.

Figure45-SpaceWire-Packet-Terminated-by-EEP.svg
Пакет SpaceWire прерван EEP

Когда пакет завершается EEP, вероятно, передаваемые данные неполные и могут содержать некоторые ошибочные символы данных. Также возможна ошибка в начале пакета при отправке адреса получателя. В этом случае у пакета нет содержимого, только дефектный адрес назначения, за которым следует EEP. Если этот неполный адрес назначения является адресом пути, то при перемещении пакета, завершённого EEP, по сети SpaceWire, каждый маршрутизатор будет пересылать пакет и удалять начальный символ пакета. В конце концов, все символы адреса назначения будут удалены до того, как пакет прибудет к месту назначения, поскольку это был неполный адрес назначения. Остаётся только EEP. Поскольку маршрутизатор сам не может знать, куда пересылать EEP, он просто удалит EEP. В этом случае преждевременно завершённый пакет полностью исчезнет.

3.6 Восстановление после ошибки связи

Обработка ошибок канала машиной состояния канала описана в разделе 3.4.4. В этом разделе рассматривается, что происходит с пакетом, который перемещается по каналу, когда возникает ошибка.

Если интерфейс связи обнаруживает ошибку, для устранения ошибки выполняется следующая последовательность событий:

[1. Обнаружить ошибку]

Обнаружена ошибка отключения, чётности, перехода или кредитования.

На рисунке 46 показаны два направления передачи пакетов по каналу: от буфера конечного пользователя, передающего данные к передатчику SpaceWire, через FIFO, по каналу, в приёмный FIFO интерфейса SpaceWire на другом конце канала, и в буфер конечного пользователя, принимая данные от приёмника. В направлении слева направо заголовок пакета находится в пользовательском буфере, а конец пакета с EOP находится в буфере передающего конца. Только что произошла ошибка в этом направлении канала.

[2. Отключение канала]

Ошибка, обнаруженная в приёмнике в правой части рисунка 46, приводит к отключению передатчика на этом конце, что приводит к ошибке отключения на другом конце линии канала. Оба конца канала теперь отключены, как показано на рисунке 47.

[3. Завершение пакетов с помощью EEP]

К информации в приёмных FIFO добавляется EEP, как только в каждом FIFO появляется место для его добавления. Это завершает полученную часть пакета, чтобы он мог продолжить свой путь через сеть SpaceWire. Это показано на рисунке 48.

[4. Сброс остатка пакета]

Остаток пакета, который ещё не был передан по каналу, должен быть отброшен, так как один или несколько N‑символов будут потеряны или повреждены из‑за ошибки в канале. Конечная часть пакета, который ещё не был отправлен по каналу, содержит достоверные данные, но его назначение неясно: например, это мог быть EOP, потерянный при возникновении ошибки в канале. Поскольку адресат неизвестен, всё, что можно сделать с хвостовой частью пакета — отбросить его. Данные считываются передатчиком и передаются до тех пор, пока не будет достигнут EOP (или EEP). Символ, следующий за EOP, будет адресом назначения в начале следующего пакета. Результат после сброса пакета показан на рисунке 49.

[5. Переподключение]

Теперь канал SpaceWire приведён в порядок после ошибки, канал может быть повторно инициализирован и соединение восстановлено. Это показано на рисунке 50.

[6. Продолжение передачи пакетов]

При перезапуске канала может быть отправлен следующий пакет, чей заголовок и адрес назначения ожидают в FIFO передачи. Нормальная работа возобновилась. Это показано на рисунке 51.

Механизм восстановления после ошибок работает в сетях, состоящих из нескольких коммутаторов маршрутизации. Сбрасывается (отключается/повторно подключается) только канал, на которой возникает ошибка. Все остальные каналы продолжают работу. Обычно только пакет, в котором произошла ошибка, частично теряется, а все остальные пакеты остаются правильными. В некоторых случаях более одного пакета могут быть потеряны из‑за времени, необходимого для отключения канала.

Если байт заголовка (то есть первый байт после EOP или EEP) повреждён, весь пакет теряется и данные не распространяются по сети. Коммутатор маршрутизации просто уничтожает пакет.

Если ошибка возникает в EOP (или EEP), затрагиваются два пакета: один перед EOP, когда все данные отправлены, но EOP не получен, и следующий, потому что передатчик канала «рассыпает» пакет до следующего EOP (или EEP).

Если ошибка возникает в NULL или FCT, вставленном в поток данных для пакета, отправляемый пакет с этого момента отбрасывается. Это потому, что неизвестно, каким был символ до того, как он был испорчен.

Время, необходимое для полного восстановления после ошибки на канале, будет зависеть от того, сколько времени потребуется для сброса хвостовой части пакета, передаваемого при возникновении ошибки канала, что зависит от размера этого пакета. Возможно, придётся вытащить хвост из источника пакета через один или несколько маршрутизаторов, образующих сеть SpaceWire.

Решение о том, что делать с пакетом, заканчивающимся EEP, остаётся за пользовательским приложением.

4 Сети SpaceWire

Сети SpaceWire строятся из каналов, узлов и маршрутизаторов SpaceWire. Каналы и маршрутизаторы предназначены для соединения узлов, чтобы они могли обмениваться информацией и работать вместе для выполнения некоторых необходимых функций.

4.1 Узлы SpaceWire

Узел — это часть оборудования, использующая услуги канала или сети SpaceWire. Это источник или пункт назначения пакетов SpaceWire, конечная точка в сети SpaceWire. Например, прибор, запоминающие устройства или процессор, подключённый к сети SpaceWire, является узлом SpaceWire.

В узле может быть более одного интерфейса SpaceWire и может быть более одного логического адреса.

4.2 Коммутатор маршрутизации SpaceWire

Маршрутизатор SpaceWire соединяет множество узлов и предоставляет средства маршрутизации пакетов от одного узла к одному из многих других возможных узлов. Маршрутизатор SpaceWire включает в себя несколько интерфейсов связи SpaceWire и матрицу коммутации. Матрица коммутации позволяет пакетам, прибывающим на один канальный интерфейс, передаваться и отправляться из другого интерфейсного канала на маршрутизаторе. Каждый интерфейс канала может рассматриваться как содержащий входной порт (приёмник интерфейса канала) и порт вывода (передатчик интерфейса канала), как показано на рисунке 52.

Figure52-Router-Switch-Matrx.svg
Матрица коммутации маршрутизатора

Маршрутизатор SpaceWire передаёт пакеты от входного порта коммутатора, куда поступает пакет, на конкретный выходной порт, определяемый адресом назначения пакета. Маршрутизатор использует начальный символ данных пакета (один из символов идентификатора пункта назначения) для определения выходного порта маршрутизатора, на который должен быть направлен пакет. Если есть два входных порта, ожидающих использования определённого выходного порта после завершения отправки предыдущего пакета, то механизм арбитража в выходном порту решает, какой входной порт обслуживать.

4.3 Таблицы маршрутизации

Таблица маршрутизации в маршрутизаторе используется для преобразования адреса назначения в начале пакета в номер порта, через который будет отправлен пакет. Адреса маршрутизаторов назначаются, как показано в таблице 5.

Диапазон адресов Назначение
0 Внутренний порт конфигурации
1-31 (01-1F hex) Физические выходные порты
32-254 (20-FE hex) Логические адреса, которые сопоставляются с физическими выходными портами
255 (FF hex) Резерв
Таблица 5 Адреса маршрутизаторов

Внутренний порт конфигурации используется для доступа к информации о конфигурации и состоянии маршрутизатора. Пакет SpaceWire, поступающий на любой порт маршрутизатора с начальным значением адреса назначения, равным 0, будет перенаправлен на порт конфигурации. Информация о конфигурации, к которой можно получить доступ через порт конфигурации, включает таблицу маршрутизации, позволяющую программировать информацию о маршрутизации по сети SpaceWire. У всех маршрутизаторов SpaceWire есть порт конфигурации. Поскольку порт конфигурации является одновременно источником и получателем пакетов SpaceWire, схема конфигурации и состояния маршрутизатора становится узлом.

Физические выходные порты — это фактические порты SpaceWire на маршрутизаторе. Для подключения к локальному по отношению к маршрутизатору оборудованию не всегда необходимо использовать канал SpaceWire. В этом случае вместо него можно использовать порт FIFO. Порт FIFO является двунаправленным и ведёт себя как порт SpaceWire до маршрутизатора, но к нему не подключён канал SpaceWire. Вместо этого некоторые пользовательские приложения подключаются напрямую к порту FIFO. К физическим выходным портам маршрутизатора относятся как порты SpaceWire, так и порты FIFO. Физические выходные порты всегда нумеруются с единицы и обычно первыми идут порты SpaceWire. Таким образом, маршрутизатор с четырьмя портами SpaceWire и двумя портами FIFO будет нумеровать порты SpaceWire с 1 по 4, а порты FIFO — с 5 по 6. Порты FIFO также называются внешними или параллельными портами, то есть внешними по отношению к сети SpaceWire, и параллельными, а не последовательными, портами SpaceWire. Маршрутизатору разрешено иметь максимум 31 физический порт, поэтому физические выходные порты нумеруются максимум от 1 до 31.

Логические адреса сопоставляются таблицей маршрутизации с физическими выходными портами. Необходимо иметь возможность различать пути и логические адреса, чтобы маршрутизатор мог правильно их обрабатывать. Это делается простым способом: значение начального символа адреса пакета определяет, является ли он путевым или логическим адресом, если он находится в диапазоне от 0 до 31, это адрес пути, если он находится в диапазоне от 32 до 255 — это логический адрес. Адрес пути используется непосредственно для определения выходного порта, через который должен быть перенаправлен пакет. Логический адрес используется как индекс в таблице маршрутизации, из которой определяется номер физического порта. Затем пакет перенаправляется через определённый выходной порт.

Логический адрес 255 зарезервирован и не должен использоваться.

Пример таблицы маршрутизации для маршрутизатора с четырьмя портами SpaceWire и портом конфигурации показан в таблице 6. «1» в таблице сопоставляет адрес с номером выходного порта. Доступ к порту конфигурации (порт 0) осуществляется только через адресацию пути с адресом 0. Доступ к портам с 1 по 4 осуществляется с использованием адресов пути с 1 по 4 соответственно. Адреса путей после адреса 4 не имеют значения в 4 ‑ портовом маршрутизаторе и вызывают ошибку маршрутизации. Логические адреса могут использоваться для доступа к любому из четырёх выходных портов в зависимости от того, как запрограммирована таблица маршрутизации. Например, в таблице 6 логический адрес 33 запрограммирован для порта 4. Все пакеты, поступающие с адресом 33, будут направляться на выходной порт 4.

АдресПорт 0Порт 1Порт 2Порт 3Порт 4
Адресация пути010000
101000
200100
..................
Логическая адресация3200100
3300001
3401000
..................
25500000
Таблица 6 Таблица маршрутизации для 4-портового маршрута

4.4 Групповая адаптивная маршрутизация

Маршрутизаторы SpaceWire могут реализовывать групповую адаптивную маршрутизацию. Когда два или более выходных порта прямо или косвенно ведут к одному и тому же месту назначения, эти выходные порты можно сконфигурировать как группу. Когда пакет поступает на входной порт для маршрутизации из выходного порта, который занят, любой другой выходной порт в той же группе, что и адресуемый выходной порт, может использоваться для пересылки пакета.

Таблица маршрутизации в маршрутизаторе, реализующем групповую адаптивную маршрутизацию, показана в таблице 7. Логическому адресу 33 назначены два выходных порта. Когда пакет с этим логическим адресом получен, маршрутизатор может направить пакет через порт 3 или порт 4.

АдресПорт 0Порт 1Порт 2Порт 3Порт 4
Адресация пути010000
101000
200100
..................
Логическая адресация3201100
3300011
3401100
..................
25500000
Таблица 7 Таблица маршрутизации для 4-портового маршрута

4.5 Червячная маршрутизация

Коммутаторы маршрутизации SpaceWire используют червячную маршрутизацию. Когда пакет начинает поступать на входной порт маршрутизатора, сразу же просматривается его адрес назначения. Если выходной порт, который должен использоваться для пересылки пакета к месту назначения, в настоящее время не используется, заголовок пакета сразу отправляется на этот выходной порт, а остальная часть пакета следует по мере его получения на входном порту. В роутере нет буферизации полных пакетов ни до, ни после коммутации.

У червячной маршрутизации есть ряд преимуществ по сравнению с другими подходами, такими как хранение и пересылка:

  • Нет буферизации пакетов
  • Небольшая буферная память
  • Может поддерживать пакеты произвольного размера
  • Быстрое переключение

Червячная маршрутизация страдает от одной основной проблемы — блокировки. Если выходной порт, через который должен быть перенаправлен пакет, не готов или в настоящее время используется, пакет должен ждать, пока он не будет готов или пакет, проходящий через него в настоящее время, не завершится. Поскольку хвост пакета может распространяться по сети, ожидающий пакет не только останавливается, но и блокирует любой другой пакет в сети, ожидающий использования каналов, которые он в настоящее время занимает. Это показано на рисунке 55.

Figure55-Packet-Blocking.svg
Блокировка пакетов

Длинный пакет передаётся от узла 1 к узлу 5, передача показана синим цветом. Другой пакет, показанный красным, хочет пройти от узла 2 к узлу 5, но, поскольку канал от маршрутизатора 2 к узлу 5 уже используется, красный пакет заблокирован в маршрутизаторе 2. Третий пакет, показанный жёлтым, хочет для перехода от узла 3 к узлу 6. При этом не используется ни один из каналов, занятых первым пакетом (синий), но он заблокирован ожидающим пакетом (красный) в маршрутизаторе 1, поскольку он должен пройти по каналу из от маршрутизатора 1 к маршрутизатору 2. Как только возникает блокировка, её эффект может усиливаться, вызывая дальнейшую блокировку по всей сети.

Блокировка может происходить по нескольким причинам:

  • Отправляется большой пакет.
  • Пункт назначения пакета не готов к его приёму.
  • Что-то пошло не так в сети, например, отказ канала, таким образом, пакет не может двигаться вперёд по отказавшему каналу.

Есть несколько стратегий, помогающих избежать блокировки сети:

  • Разделите большие пакеты на множество меньших, например, изображение может быть отправлено в виде серии строк изображения.
  • Перед отправкой пакета убедитесь, что пункт назначения готов, это можно сделать с помощью сквозного механизма управления потоком.
  • Если место назначения не готово к приёму пакета, оно вправе просто отбросить пакет. Допускается комбинировать с механизмом повторных попыток для реализации управления потоком, хотя это может привести к неэффективному использованию пропускной способности сети, если место назначения часто не готово.
  • Если пакет действительно блокируется дольше, чем можно было бы ожидать, указывая на то, что произошла ошибка, обнаружьте это с помощью сторожевого таймера и отбросьте заблокированный пакет.

4.6 Удаление заголовка

Удаление заголовка — это отбрасывание первого символа данных пакета после того, как он был использован для выполнения функции маршрутизации. Удаление заголовка всегда используется в маршрутизаторе для адресации пути. После того, как адрес пути был использован, он больше не нужен и отбрасывается, открывая следующий символ адреса пути, который будет использоваться следующим маршрутизатором, обнаруженным в сети.

Удаление заголовка обычно не применяется к логическим адресам, поскольку логический адрес идентифицирует узел назначения. Один символ логического адреса используется каждым маршрутизатором, с которым сталкивается пакет, в качестве индекса в таблице маршрутизации маршрутизатора, чтобы маршрутизатор мог перенаправить пакет в намеченное место назначения. Это ограничивает количество узлов до 223, что считается достаточным для большинства космических применений.

Однако есть способ увеличить число логических адресов. Региональная логическая адресация использует логический адрес в одном регионе сети, но, если пакет пересекает границу одного региона в другой регион, его начальный логический адрес удаляется, открывая другой символ логического адреса, который используется в следующем регионе. Это показано на рисунке 56.

Figure56-Regional-Logical-Addres.svg
Региональная логическая адресация

На рисунке 56 показана большая сеть. Выше пунктирной линии все логические адреса узлов уникальны, но ниже пунктирной линии некоторые логические адреса повторяют те, что над линией. Узел 71 хочет послать один пакет узлу 64 выше линии (узел 64 А) и другой пакет узлу 64 ниже линии (узел 64 В). Как это может быть сделано? Если маршрутизаторы над линией настроены на маршрутизацию к узлу 64 A, пакет, отправленный с узла 71 с адресом назначения 64, попадёт в узел 64 A.

Для достижения узла 64 B сеть разбивается на две области: над линией и под линией. В каждом регионе логические адреса узлов должны быть уникальными. Затем каждому региону присваивается логический адрес, который не должен назначаться ни одному из узлов. Области над линией присваивается логический адрес 220, а ниже — 221. Теперь для маршрутизации от узла 71 к узлу 64 B пакету присваивается два каскадных логических адреса, первый из которых является логическим адресом области назначения (где находится целевой узел), а второй из которых является логическим адресом целевого узла в этом регионе. Таким образом, для узла 64 B это 221, 64. Тогда отправляется пакет:

    221, 64, передаваемые данные, EOP

Все маршрутизаторы в регионе 220 настроены на маршрутизацию любого пакета с логическим адресом 221 сначала на маршрутизатор 2, а затем на маршрутизатор 4. Маршрутизатор 2 запрограммирован таким образом, что при пересылке пакета от маршрутизатора 2 к маршрутизатору 4 его начальный символ адреса будет сброшен, открывая второй адресный символ:

    64, передаваемые данные, EOP

Маршрутизаторы в регионе 221 настроены на маршрутизацию пакетов с логическим адресом 64 на локальный узел с этим логическим адресом, то есть на узел 64 B.

Для использования региональной логической адресации необходимо:

  1. Разделить сеть на регионы, каждому из которых присвоен логический адрес.
  2. Внутри региона узлы должны иметь уникальные логические адреса.
  3. Узлы в двух разных регионах могут иметь одинаковый логический адрес.
  4. При маршрутизации пакета из одного региона в другой маршрутизатор должен удалить начальный символ адреса получателя. Это должно быть специально настроено в маршрутизаторе.
  5. Для достижения пункта назначения можно пересекать регионы при условии, что для каждого региона имеется один логический адрес.

Для большинства приложений региональная логическая адресация не требуется, поскольку обычно количество узлов намного меньше 223.

4.7 Трансляция Time-кода

Помимо пересылки пакетов SpaceWire к местам назначения, маршрутизатор SpaceWire также передаёт Time ‑ коды. Time ‑ коды и способ их передачи маршрутизатором SpaceWire описаны в разделе 5.

Каждый маршрутизатор содержит регистр Time‑кода (также называемый счётчиком Time‑кода). Когда Time‑код поступает на порт, его значение (6 битов в символе данных Time‑кода, смотрите раздел 3.3.1) сравнивается со значением регистра Time‑кода. Если он на единицу больше, чем регистр Time‑кода, Time‑код действителен и пересылается из всех физических портов маршрутизатора, кроме порта конфигурации и порта, на который пришёл Time‑код. Это транслирует Time‑код по сети. Затем регистр Time‑кода обновляется значением принятого Time‑кода. Если Time‑код не больше регистра Time‑кода на единицу, значение Time‑кода загружается в регистр Time‑кода, но Time‑код не пересылается. Это предотвращает повторную передачу Time‑кодов по сети, содержащей петлю, через один или несколько маршрутизаторов. Он также предоставляет метод восстановления Time‑кодов, которые пропали по какой-либо причине. Обратите внимание, что некоторые маршрутизаторы можно настроить для передачи Time‑кода только на определённые порты. Это средство было включено, чтобы разрешить работу с устаревшими устройствами IEEE ‑ 1355, которые могли принимать пакеты SpaceWire, но не понимали Time‑коды.

Обычно в маршрутизаторе имеется один регистр Time‑кода. Однако в некоторых реализациях в маршрутизаторе может быть предусмотрено четыре регистра Time‑кода, при чём два старших бита символа данных Time‑кода используются для определения того, какой из четырёх регистров Time‑кода использовать. Это позволяет одновременно транслировать по сети до четырёх наборов Time‑кодов. Это строго нарушает стандарт SpaceWire, поскольку стандарт резервирует два старших бита Time‑кода. Эти два бита, вероятно, будут использоваться в будущем для других целей, включая сигнализацию прерывания.

4.8 Конфигурация маршрутизатора

Маршрутизатор настраивается через его порт конфигурации. Стандарт SpaceWire не указывает, как должен быть сконфигурирован маршрутизатор, но обычно это делается с использованием протокола удалённого доступа к памяти (RMAP) (смотрите раздел 6.2). Это обеспечивает стандартные средства чтения и записи регистров в порту конфигурации, но не определяет расположение и функции регистров в порту конфигурации. в настоящее время ведётся работа над (американским) стандартом SpaceWire plug and play, целью которого является стандартизация конфигурации сети SpaceWire. В то же время каждое пространство конфигурации маршрутизатора имеет собственное расположение регистров.

4.9 Распределение пакетов

Стандарт SpaceWire определяет способ использования маршрутизатора для копирования и распространения пакета SpaceWire на несколько узлов, подключённых к разным портам маршрутизатора. Это было включено для конкретной цели распределения одних и тех же данных на несколько процессоров в системе параллельной обработки. Это может вызвать серьёзные проблемы при использовании в сети SpaceWire, и его использование не рекомендуется. Например, если пакет поступает на один порт маршрутизатора и распространяется через несколько других портов, а узел, подключённый к одному из этих портов, не может больше принимать данные по какой-либо причине, данные, поступающие на все процессоры, будут остановлены. Любая неисправность многократно умножается.

4.10 Пример маршрутизатора SpaceWire

В этом разделе описывается архитектура ASIC маршрутизатора ESA SpW-10X SpaceWire, а затем объясняются некоторые специальные функции, добавленные в этот маршрутизатор для расширения его возможностей.

4.10.1 Архитектура SpW-10X

Архитектура ASIC маршрутизатора SpaceWire показана на рисунке 57.

Figure57-ESA-SpW-10X-SpaceWire-Router-ASIC-Architecture.svg
Архитектура ASIC маршрутизатора ЕКА SpW-10X SpaceWire

В маршрутизаторе SpaceWire есть восемь портов SpaceWire, два внешних порта и внутренний порт конфигурации. Неблокирующий кросс-переключатель с малой задержкой и червячной маршрутизацией позволяет пакетам, прибывающим на любой порт SpaceWire, внешний порт или сгенерированным в конфигурационном порту, направляться из любого другого SpaceWire или внешнего порта, либо направляться в конфигурационный порт.

Порты SpaceWire соответствуют стандарту SpaceWire47, обеспечивая высокоскоростную двунаправленную связь. Каждый из портов FIFO содержит входной FIFO и выходной FIFO и может принимать и отправлять символы данных и маркеры конца пакета. Порт Time ‑ кода также предоставляется вместе со счётчиком времени для облегчения распространения Time ‑ кодов, смотрите раздел 5. Когда действительный Time ‑ код поступает на порт маршрутизатора, он отправляется из всех других портов SpaceWire и сигнал TICK_OUT генерируется на порте Time‑кода. Маршрутизатор может работать как мастер Time‑кода, используя TICK_IN, указанный в порте Time‑кода.

Порт конфигурации доступен через любой из SpaceWire или внешних портов. Он содержит регистры, которые контролируют работу портов SpaceWire, внешних портов и кроссового (матричного) переключателя. Порт конфигурации содержит регистры состояния для различных портов и коммутатора. Эти регистры можно прочитать с помощью команды чтения конфигурации, чтобы определить состояние маршрутизатора и получить доступ к информации об ошибках. Информация о состоянии и ошибках также может быть выбрана для вывода на несколько контактов состояния. Доступ к таблице маршрутизации осуществляется через порт конфигурации. Сопоставление порта логического адреса и биты приоритета могут быть установлены в таблице маршрутизации. Таблица маршрутизации используется для управления групповой адаптивной маршрутизацией и приоритетным арбитражем в кроссбарном коммутаторе. В маршрутизаторе SpW-10X конфигурация выполняется с использованием протокола удалённого доступа к памяти SpaceWire (RMAP), смотрите раздел 6.

SpW-10X был разработан Университетом Данди, передан в радиационно-стойкие технологии компанией Austrian Aerospace, произведён компанией Atmel и продаётся как устройство AT7910E. Он упакован в 256-контактный корпус QFP, отвечающий требованиям космического пространства, смотрите рисунок 58.

Figure58-Photograph-of-SpW-10X-Router-ASIC.png
Фотография ASIC маршрутизатора SpW-10X

4.10.2 Сторожевые таймеры

Сторожевые таймеры предусмотрены в SpW-10X на каждом порту для обнаружения блокировки (смотрите раздел 4.5). Если пакет SpaceWire по какой-либо причине блокируется, SpW-10X обнаружит эту блокировку, добавит EEP в конец уже отправленных данных и сбросит хвостовую часть пакета. Предусмотрен диапазон значений времени ожидания от 0,1 мс до более 1 с. Сторожевые таймеры можно отключить.

4.10.3 Маршрутизация к неподключенному порту

Возможно, у пакета неправильный адрес, или таблица маршрутизации настроена неправильно, и в итоге он направляется на порт, который ни к чему не подключён. В этой ситуации, если сторожевые таймеры включены, маршрутизатор будет ждать запуска канала до окончания периода ожидания, а затем сбросит пакет. EEP не добавляется, так как данные из пакета не будут переданы. Если сторожевые таймеры не включены, пакет будет немедленно потерян.

4.10.4 Маршрутизация на несуществующий порт

Точно так же пакет может быть направлен на порт, который фактически не существует на маршрутизаторе (например, порт 12 на 8-портовом маршрутизаторе). В этом случае маршрутизатор немедленно сбрасывает пакет и регистрирует эту ошибку в своих регистрах состояния.

4.10.5 Маршрутизация к занятому порту

Если пакет направляется на порт, который уже занят на маршрутизаторе, маршрутизатор будет ожидать отправки пакета в течение периода сторожевого таймера. Если время ожидания истекло, пакет будет потерян, но EEP не будет добавлен в конец пакета, поскольку данные из пакета не были отправлены. Это отличается от случая в разделе 4.10.2, поскольку здесь пакет находится в процессе отправки через выходной порт маршрутизатора, когда он становится заблокированным. Здесь пакет ещё не был переключён на выходной порт, так как этот порт занят. Если тайм-аут истекает и ожидающий пакет теряется, эта ошибка регистрируется в регистре состояния.

4.10.6 Запуск по запросу, отключение при молчании

SpW-10X имеет некоторые возможности для поддержки энергосбережения. Его можно настроить на «отключение при отсутствии связи» и «запуск по запросу».

«Отключить при тишине» выключит канал, когда нет пакета для отправки, после истекания интервала сторожевого таймера.

Запуск по запросу запускает отключённый канал, когда пакет, прибывший на другой порт, хочет перенаправиться через отключённый канал. Он попытается сделать это в течение интервала сторожевого таймера, а затем пакет будет отброшен (удалён).

Эти функции вместе с автоматическим запуском позволяют автоматически включать и отключать связь, когда требуется только спорадическая передача данных. Это показано на рисунках с 59 по 64.

Figure59-Start-On-Request-Disable-On-Silence-Initial-State.svg
Запускать по запросу, отключать при молчании: исходное состояние

Маршрутизатор 1 и маршрутизатор 2 настроены на автоматический запуск, запуск по запросу и отключение при молчании. Трафик не течёт.

Figure60-Start-On-Request-Disable-On-Silence-Node-Starts-to-Send.svg
Запускать по запросу, отключать при молчании: узел начинает отправлять пакет

Узел 1 посылает маршрутизатору 1 пакет, который предназначен для узла 5 и должен быть отправлен через порт 5 маршрутизатора 1. В настоящее время этот порт отключён.

Figure61-Start-On-Request-Disable-On-Silence-Output-Port-Started.svg
Запускать по запросу, отключать при молчании: выходной порт запущен

Порт 5 маршрутизатора 1 запускается автоматически и пытается установить связь с портом 1 маршрутизатора 2.

Figure62-Start-On-Request-Disable-On-Silence-Connection-Made-and-Packet-Forwarded.svg
Запускать по запросу, отключать при молчании: установлено соединение и переадресован пакет

Порт 1 маршрутизатора 2 настроен на автоматический запуск, поэтому, когда маршрутизатор 1 пытается инициализировать канал, это удаётся, и пакет пересылается через маршрутизатор 2 на узел 5.

Figure63-Start-On-Request-Disable-On-Silence-Time-out-When-Silent.svg
Запускать по запросу, отключать при молчании: тайм-аут при молчании

Больше нет пакетов для отправки, поэтому канал между портом 5 маршрутизатора 1 и портом 1 маршрутизатора 2 отключается. По истечении тайм-аута. Маршрутизатор 1 обнаруживает, что по этому каналу больше не отправляется трафик, и, поскольку он настроен на отключение при молчании, он отключает выходной порт 5.

Как только порт 5 маршрутизатора 1 отключён, он принудительно обнаруживает отключение на другом конце канала. Затем порт 1 маршрутизатора 2 отключается. Если включено три состояния каналов, можно сэкономить электроэнергию.

4.10.7 Тройное состояние

Выходные порты могут быть переведены в состояние, подобное тройному состоянию, для экономии энергии, когда они не используются. Помните, что драйвер LVDS всегда потребляет ток. Три состояния отключают этот ток и останавливают трату энергии. Тройное состояние можно использовать с методами энергосбережения, упомянутыми в разделе 4.10.6.

4.10.8 Отключение часов передачи

Маршрутизатор SpW-10X имеет восемь портов SpaceWire. В некоторых системах не все эти порты требуются. Затем можно отключить дерево часов для порта для экономии энергии. Приёмная часть внешнего интерфейса порта имеет часы, полученные из принимаемого сигнала, поэтому динамическая мощность, потребляемая приёмником, не будет потребляться, если он не подключён. Регистры конфигурации используются для отключения передачи тактовых импульсов на неиспользуемые порты.

4.10.9 Приоритетная доставка пакетов

В некоторых маршрутизаторах SpaceWire реализована схема приоритетов, хотя это не указано в стандарте SpaceWire.

Если в маршрутизаторе есть два входных порта, ожидающих использования определённого выходного порта, используется механизм арбитража для выбора того, какой входной порт будет обслуживаться. Арбитражный механизм может включать в себя схему приоритетов. В заголовке пакета SpaceWire отсутствует флаг приоритета, указывающий его уровень приоритета. Заголовок SpaceWire содержит только адресную информацию, поэтому приоритет пакета должен быть связан с логическим адресом (или с номером входного порта). В таблицах маршрутизации логическим адресам может быть присвоен высокий или низкий приоритет. Логические адреса с высоким приоритетом имеют приоритетный доступ к выходному порту при арбитраже. Логический адрес, которому был назначен высокий приоритет, действует как высокоприоритетный канал в сети от многих возможных источников к одному месту назначения. Если требуется доступ с высоким и низким приоритетом к определённому месту назначения, для определённого места назначения требуются два логических адреса, один из которых имеет высокий приоритет, а другой — низкий. Затем источник может решить, какой логический адрес использовать при отправке пакета получателю, в зависимости от требуемого приоритета пакета. Существует компромисс между количеством адресатов, которые могут быть адресованы, и количеством уровней приоритета. С двумя уровнями приоритета можно иметь, скажем, 128 пунктов назначения с низким приоритетом и 96 пунктов назначения с высоким приоритетом в пределах 224 доступных логических адресов.

5 Time-коды

Time‑коды SpaceWire48 обеспечивают средства синхронизации устройств в системе SpaceWire с достаточно низким джиттером. Эта временная информация может предоставляться в виде «тиков», увеличивающегося значения, которое может быть синхронизировано со временем космического аппарата. Time‑коды быстро передаются по сети SpaceWire, что устраняет возможную потребность в отдельной сети распределения времени.

5.1 Структура Time-кода

Time‑код SpaceWire состоит из символа ESC SpaceWire, за которым следует один 8-битный символ данных. Символ данных содержит два управляющих флага и шестибитный счётчик времени. Time‑код показан на рисунке 65. Шестибитный отсчёт времени хранится в шести младших битах Time‑кода (T0­T5), в то время как два старших бита (T6, T7) содержат два контрольных флага. Бит чётности (P) в середине Time‑кода устанавливается равным единице, чтобы обеспечить правильную чётность.

Figure65-SpaceWire-Time-Code.svg
Time-код SpaceWire

Два управляющих флага предназначены для общего использования, у них нет специальной функции для распределения Time‑кода. Единственным допустимым значением флагов является 0b00. Другие возможные значения зарезервированы.

5.2 Интерфейс Time-кода

Чтобы иметь возможность передавать и получать Time‑коды, кодек SpaceWire имеет интерфейс Time‑кода. Интерфейс Time‑кода содержит два сигнала, TICK_IN и TICK_OUT, вместе с восьмибитным входным портом Time‑кода и восьмибитным выходным портом Time‑кода. Восьмибитный ввод и вывод разделены на два поля: шестибитное поле времени и двухбитное поле управляющего флага.

Сигнал TICK_IN используется для запроса передачи Time‑кода, а восьмибитный входной порт предоставляет значение Time‑кода для отправки. Всякий раз, когда устанавливается TICK_IN, кодек SpaceWire отправляет Time‑код сразу после завершения передачи текущего символа. Обратите внимание, что кодек SpaceWire может отправлять Time‑коды только тогда, когда он запущен и работает, отправляя нули, FCT и/или данные (то есть находится в состоянии Run).

TICK_OUT используется для указания того, что Time‑код поступил на интерфейс SpaceWire. TICK_OUT устанавливается каждый раз, когда интерфейс связи находится в состоянии Run и приёмник получает действительный Time‑код. Восьмибитный выходной порт Time‑кода настроен так, чтобы отражать содержимое Time‑кода.

5.3 Счётчик времени

Каждый узел и маршрутизатор содержат счётчик времени, который используется для хранения текущего 6-битного значения времени из времени Time‑кода. Этот счётчик также используется для проверки входящего Time‑кода и принятия решения о том, следует ли распространять Time‑код. В узле распространение Time‑кода зависит от приложения (аппаратного или программного). В маршрутизаторе это ко всем выходным портам маршрутизатора или, по крайней мере, ко всем портам, настроенным для пересылки Time‑кодов.

Во время нормальной работы значение времени в Time‑коде увеличивается от одного Time‑кода к другому, вращаясь от 63 до 0, когда оно достигает максимально возможного значения времени. Когда Time‑код поступает на узел или маршрутизатор SpaceWire, его значение должно быть на единицу больше, чем текущее значение счётчика времени на этом узле или маршрутизаторе. Временное значение входящего Time‑кода сравнивается со значением счётчика времени. Если Time‑код на единицу больше, чем текущее значение счётчика времени, то Time‑код считается действительным. Затем счётчик времени увеличивается до значения Time‑кода, и указывается прибытие действительного Time‑кода.

Если значение времени Time‑кода не больше значения счётчика времени на единицу, то Time‑код недействителен. В этом случае счётчик времени устанавливается на значение только что полученного Time‑кода, но прибытие Time‑кода не отмечается.

5.4 Мастер времени

Один узел или маршрутизатор SpaceWire в системе отвечает за генерацию Time‑кодов. Этот «мастер времени» имеет активный сигнал TICK_IN, который периодически (например, каждую миллисекунду) устанавливается его хост-системой. Только мастер времени должен выставлять свой сигнал TICK_IN, все остальные узлы должны держать свои сигналы TICK_IN неподтверждёнными. Чтобы отправить Time‑код, мастер времени должен увеличить значение времени на входном порту времени кодека SpaceWire, а затем установить сигнал TICK_IN. Затем кодек SpaceWire считывает новое значение Time‑кода и передаёт запрошенный Time‑код, как только завершится отправка текущего символа.

Счётчик времени в узле или маршрутизаторе, действующий как мастер времени, может использоваться для генерации правильной последовательности Time‑кодов для передачи. Выход шестибитного счётчика времени подаётся на порт ввода Time‑кода. Когда должен быть передан следующий Time‑код, счётчик времени увеличивается и устанавливается сигнал TICK_IN. Это заставляет кодек SpaceWire отправлять требуемый Time‑код. Значения двух управляющих флагов, отправляемых во Time‑коде, зависят от приложения. Их значения должны обновляться при увеличении счётчика времени.

Time‑коды обычно периодически генерируются мастером времени, чтобы обеспечить регулярный такт времени для системы SpaceWire. Частота Time‑кода называется частотой тиков, а период между Time‑кодами называется тиковым интервалом.

5.5 Time-коды в канале

Когда один конец канала SpaceWire периодически отправляет действительные Time‑коды, интерфейс SpaceWire на другом конце канала получает Time‑коды, проверяет их действительность, обновляет счётчик времени новым значением времени и устанавливает сигнал TICK_OUT. Хост-система, подключённая к этому концу канала SpaceWire, получает периодические сигналы TICK-OUT вместе с шестибитным значением времени и двумя контрольными флагами. Сигнал TICK-OUT можно использовать для вызова прерывания или события в узле, управляемом программным обеспечением.

Если интерфейс SpaceWire получает Time‑код, не превышающий текущее значение его счётчика времени на единицу, то Time‑код недействителен и интерфейс не выдаёт сигнал TICK_OUT.

5.6 Действия маршрутизатора при получении Time-кода

Маршрутизатор содержит один счётчик времени. Когда интерфейс канала на маршрутизаторе получает Time‑код, он проверяет, что он на единицу больше, чем текущее значение счётчика времени маршрутизатора. Затем он увеличивает счётчик времени маршрутизатора и выдаёт сигнал TICK_OUT. Этот сигнал TICK_OUT распространяется на интерфейсы TICK_IN всех выходных портов маршрутизатора, чтобы все они выдавали Time‑код. Этот Time‑код совпадает со значением, полученным маршрутизатором, поскольку счётчик времени маршрутизатора был увеличен. Time‑код не передаётся по каналу, который первым получил Time‑код.

Если имеется циклическое соединение, то маршрутизатор получит Time‑код с тем же значением времени, что и счётчик времени маршрутизатора. В этом случае Time‑код игнорируется. Таким образом, время течёт вперёд через сеть, достигая всех узлов, но подавляется, если оно течёт назад из‑за кругового соединения.

5.7 Распределение Time-кода по сети

В этом разделе описывается распределение Time‑кодов по сети SpaceWire.

Начальное состояние сети показано на рисунке 66. N1 и N2 — узлы. R1 и R2 являются маршрутизаторами. Пунктирные линии представляют каналы SpaceWire между узлами и маршрутизаторами. N1 является Time-мастером и отправляет Time‑код всякий раз, когда его сигнал TICK_IN утверждается. Числа в полях узла и маршрутизатора представляют текущие значения их счётчиков времени.

Figure66-Initial-State-of-Network.svg
Исходное состояние сети

Когда TICK_IN устанавливается в узле N1, его счётчик времени увеличивается с 40 до 41 и передаётся Time‑код со значением времени 41. Это показано на рисунке 67.

Figure67-TICK_IN-Asserted.svg
Устанавливается TICK_IN

Переданный Time‑код принимается маршрутизатором R1, который проверяет, что значение времени на единицу больше, чем текущее значение счётчика времени, затем увеличивает значение своего счётчика времени и отправляет Time‑код по всем другим каналам. Смотрите рисунок 68

Figure68-Router-R1-Forwards-Time-codes.svg
Маршрутизатор R1 пересылает Time-коды

Маршрутизаторы R2 и R3 получают Time‑коды, отправленные от маршрутизатора R1, и оба эти маршрутизатора отправляют Time‑коды по всем остальным каналам, как показано на рисунке 69.

Figure69-Routers-R2-and-R3-Forward-Time-codes.svg
Маршрутизаторы R2 и R3 пересылают Time-коды

Узел N2 получает Time‑код от R3 и подтверждает, что входящий Time‑код имеет значение времени на единицу больше, чем счётчик времени узла. Затем он увеличивает счётчик времени и устанавливает TICK-OUT. Смотрите рисунок 70.

Время в N2 обновлено.

Figure70-N2-Receives-Time-code-and-Asserts-TICK_OUT.svg
N2 получает Time-код и подтверждает TICK_OUT

R3 также получит Time‑код от R2, который теперь не больше значения счётчика времени R3 на единицу, поэтому игнорируется, как показано на рисунке 71. Это предотвращает передачу Time‑кодов обратно по сети. Time‑коды перемещаются вперёд по сети, даже если в сети есть петли.

Figure71-Time-codes-Cannot-Go-Backwards.svg
Time-коды не могут идти назад

Узел N2 также получит Time‑код от R2, который не больше значения счётчика времени N2 на единицу, поэтому он игнорируется. Это предотвращает многократное срабатывание сигнала TICK_OUT, когда на узел поступают дублирующиеся копии Time‑кода, которые прошли через сеть SpaceWire разными путями. Смотрите рисунок 72.

Figure72-Other-Time-codes-Received-at-N2-are-Not-Valid.svg
Другие Time-коды, полученные на N2, недействительны

5.8 Потерянные Time-коды

Если полученный Time‑код не больше (по модулю 64) текущего отсчёта времени на принимающем канальном интерфейсе, то либо Time‑код, либо отсчёт времени должны считаться недействительными. Это может произойти в случае потери Time‑код или сброса или перезапуска канала после отключения.

Если Time‑код недействителен, то счётчик времени обновляется до нового значения, но Time‑код не передаётся в маршрутизатор, и TICK_OUT не устанавливается в узле. Это предотвращает распространение неверных Time‑кодов по сети. Ожидается, что при получении следующего Time‑кода счётчик времени совпадёт с Time‑кодом, и нормальная работа возобновится. Теперь будет рассмотрено восстановление отсутствующих или неверных Time‑кодов.

На рисунке 73 показана сеть SpaceWire, в которой Time‑код со значением времени 20 потерян между R1 и R2.

Figure73-Lost-Time-Code.svg
Потеря Time-кода

На следующем такте N1 отправляет Time‑код 21. Затем R1 пересылает этот Time‑код на R2. Это не то же самое, что и счётчик времени R2, и не более того, поэтому R2 обновляет свой счётчик времени, но не выдаёт Time‑код, как показано на рисунке 74.

Figure74-R2-Time-counter-Updated.svg
Счётчик времени R2 обновлён

На следующем такте Time‑код 22 отправляется с N1 на R1, который перенаправляет его на R2. На R2 счётчик времени теперь равен 21, поэтому входящий Time‑код на единицу больше, чем счётчик времени, следовательно, Time‑код теперь действителен, распространяется маршрутизатором и достигает N2. Смотрите рисунок 75. Когда Time‑код достигает N2, он не превышает отсчёт времени N2 (значение 19) на единицу, поэтому Time‑код считается недействительным. N2 обновляет счётчик времени до 22, но не выдаёт TICK_OUT.

Figure75-N2-Time-counter-Updated.svg
Счётчик времени N2 обновлён

Следующий такт приведёт к распространению Time‑код 23 по сети, а N2 создаст TICK_OUT, как показано на рисунке 76.

Figure76-N2-gets-Valid-Time-code.svg
N2 получает действительный Time-код

Для восстановления после первоначальной ошибки требуется несколько тиков, в зависимости от размера сети.

Обратите внимание, что если существует альтернативный путь от R1 к R2, Time‑код может успешно распространяться по альтернативному пути, так что R2 получает действительный Time‑код, даже если один из Time‑кодов на пути к R2 потерян. Это обеспечивает первый уровень отказоустойчивости для распределения Time‑кода.

Узлы, использующие функцию распределения Time‑кода, могут либо использовать сигнал TICK_OUT в качестве периодического сигнала синхронизации, либо использовать значение счётчика времени в качестве указания младших 6 битов системного времени.

Поскольку отсутствующий тик приводит к расхождению во времени, сигнал TICK_OUT не следует использовать для увеличения счётчика, ожидая, что этот счётчик всегда соответствует системному времени. Вместо этого следует использовать метод Time ‑ блокировки, при котором свободно работающий локальный счётчик времени обновляется, чтобы быть точным кратным частоте тиков системы каждый раз, когда утверждается сигнал TICK_OUT. Причина этого в том, что при использовании сигнала TICK_OUT в качестве периодического сигнала синхронизации Time‑код может быть пропущен, так что будет пропущен сигнал TICK_OUT. При этом сигналы SpaceWire, передаваемые по 10-метровому кабелю SpaceWire, имеют хорошую глазковую диаграмму и вряд ли приведут к каким-либо ошибкам.

5.9 Задержка Time-кода

Точность, с которой может быть распределено системное время, зависит от количества каналов, по которым оно распределяется, и скорости работы каждого из этих каналов. Задержка не менее 14 бит-периодов (ESC + символ данных = 4 + 10 бит) возникает для каждого канала, по которому проходит Time‑код, Из‑за времени, затрачиваемого каждым каналом-интерфейсом на пути к получению Time‑кода. Это приводит к временной асимметрии (скосу) в сети Tskew = 14×S/A, где S — количество пройденных каналов SpaceWire, а A — средняя скорость работы канала. Джиттер также появляется на каждом канальном интерфейсе из‑за разного времени, затрачиваемого на ожидание завершения передатчиком передачи текущего символа или управляющего кода. На каждом канальном интерфейсе может встречаться задержка от 0 до 10 битовых периодов. В сети это приводит к общему джиттеру Tjitter = 10×S/A. При средней скорости 100 Мбит/с и 10 пройденных каналах рассогласование во времени составляет 1,4 мкс, а джиттер — 1,0 мкс. Перекос и джиттер могут быть выше, чем указано выше, в зависимости от реализации интерфейса канала. Точность времени в сети, значительно превышающую 10 мкс, может быть трудно достичь при использовании стандартного механизма Time‑кода.

5.10 Применения Time-кода

5.10.1 Синхронизация

Периодически отправляемые Time‑коды могут использоваться для синхронизации работы сети SpaceWire, разделяя время на дискретные временные интервалы, в течение которых выполняются запланированные транзакции.

5.10.2 Распределение времени

С обеспечением этой базовой функции распределения времени протоколы прикладного уровня могут использоваться для распределения определённых значений времени с полным разрешением (не только 6-битным) и для выдачи команд, зависящих от времени, и другого. Два управляющих флага, которые распределяются с 6-битным битовый Time‑код может использоваться для передачи информации всем узлам и маршрутизаторам в сети. Однако эти два управляющих флага зарезервированы в стандарте SpaceWire, поэтому для соответствия стандарту они должны быть установлены равными нулю.

Узлы, использующие функцию распределения системного времени, могут либо использовать сигнал TICK_OUT в качестве периодического сигнала синхронизации, либо использовать значение счётчика времени в качестве указания младших 6 битов системного времени.

5.10.3 Сигнализация о событиях по каналу «точка-точка»

Time‑коды также могут использоваться для сигнализации о событиях или для передачи высокоприоритетного байта информации по каналу «точка-точка». Time‑код отправляется прозрачно в середине передаваемого в данный момент пакета. Нет необходимости завершать текущий пакет или ждать завершения его передачи перед отправкой Time‑кода. Этот метод не следует использовать при наличии маршрутизаторов в сети SpaceWire.

5.10.4 Несколько Time-кодов

Центр космических полётов имени Годдарда НАСА использовал четыре независимых счётчика Time‑кода в своих маршрутизаторах и интерфейсах, чтобы обеспечить четыре независимых набора Time‑кодов, определяемых четырьмя возможными значениями двух флагов в символе Time‑кода. Значение этих двух флагов определяло, какой из четырёх счётчиков Time‑кода использовался для проверки Time‑кода перед его пересылкой.

Такой подход позволяет передавать по сети SpaceWire четыре разных сигнала времени.

5.10.5 Схема прерывания

Профессор Юрий Шейнин из Санкт-Петербургского университета аэрокосмического приборостроения (ГУАП) разработал схему отправки прерываний по SpaceWire с использованием механизма, подобного Time‑коду. Используя одно из зарезервированных значений Time‑кодов, он позволяет передавать по сети SpaceWire 32 сигнала прерывания. Этот механизм работает параллельно с механизмом Time‑кода.

6 Протоколы SpaceWire

«Протоколы SpaceWire» и другие разделы будут добавлены в Руководство пользователя SpaceWire. Пожалуйста, проверьте https://www.star-dundee.com/ для последних обновлений.

Вот краткое описание того, что будет содержаться в разделе «Протоколы SpaceWire».

6.1 Идентификатор протокола

Схема идентификации протокола позволяет множеству различных протоколов работать одновременно в сети SpaceWire, не мешая друг другу. Каждому протоколу присваивается уникальный идентификатор. Устройства, получающие пакеты, обрабатывают их и отвечают на них в соответствии с протоколом, указанным идентификатором протокола в пакете. Если приходит пакет с определённым идентификатором протокола, который не поддерживается узлом, то он игнорируется.

Схема идентификации протокола указана в стандарте ECSS ECSS-E-ST-50-51C.

6.2 Протокол удалённого доступа к памяти (RMAP)

Гибкость SpaceWire означает, что его можно использовать разными способами для решения задач бортовой связи, например, настройка и управление прибором. Чтобы избежать ненужного дублирования усилий, рабочая группа SpaceWire49 изучила эти распространённые приложения SpaceWire и определила некоторые дополнительные протоколы, что сделало возможной дальнейшую стандартизацию бортовой системы передачи данных. Протокол удалённого доступа к памяти SpaceWire (RMAP)5051 является особенно успешным примером одного из этих протоколов, работающих через SpaceWire.

RMAP предоставляет общий механизм для чтения и записи в регистры и память удалённого устройства по сети SpaceWire. Его можно использовать для настройки устройств, считывания служебной информации, чтения данных из прибора или запоминающего устройства и записи данных в запоминающее устройство из прибора. Вместе RMAP и SpaceWire обеспечивают мощную комбинацию для обработки данных приборов космического аппарата. Центральный компьютер обработки полезной нагрузки может конфигурировать приборы с помощью RMAP. Когда данные доступны, их можно считать с прибора с помощью команды чтения RMAP. Для каждого прибора может быть предусмотрено единое пространство памяти со страницами для данных прибора, регистров конфигурации и регистров состояния обслуживания, что упрощает и стандартизирует операции управления прибором.

6.3 Протокол передачи пакетов CCSDS

Протокол передачи пакетов (PTP) Консультативного комитета по системам космических данных (CCSDS) предназначен для передачи космических пакетов CCSDS с одного устройства SpaceWire на другое. Он инкапсулирует космический пакет CCSDS в пакет SpaceWire и передаёт его от устройства, инициирующего передачу данных, к целевому устройству по сети SpaceWire. На целевом устройстве пакет CCSDS Space Pack извлекается из пакета SpaceWire и передаётся целевому пользовательскому приложению. Этот протокол не предоставляет никаких средств для обеспечения доставки пакета и не несёт ответственности за содержимое пакета, являющегося пакетом пространства CCSDS.

Footnotes

  1. S.M. Parkes, "SpaceWire: The Standard", Proceedings, DASIA 99, Data Systems In Aerospace, 17-21 May 1999, Lisbon, Portugal, pp 111-116, European Space Agency (ESA) publication no. SP-447, ISBN 92-9092-788-7.

  2. European Cooperation for Space Standardization, Standard ECSS-E-ST-50-12C, SpaceWire, Links, Nodes, Routers and Networks, Issue 1, European Cooperation for Space Data Standardization, February 2003 (formerly ECSS-E-50-12A February 2003).

  3. ESA SpaceWire Website, http://spacewire.esa.int, viewed on 1st December 2010.

  4. S.M. Parkes and A. Gillions, "DSP Technology Study Final Report", British Aerospace Space Systems Ltd, TP 9459, ESTEC Contract Number 8741/90/NL/JG(SC), September 1992.

  5. Inmos Transputer

  6. T9000 Transputer User Manual

  7. IEEE Computer Society, "IEEE Standard for Heterogeneous Interconnect (HIC) (Low ‑ Cost, Low ‑ Latency Scalable Serial Interconnect for Parallel System Construction)", IEEE Standard 1355 − 1995, IEEE, June 1996.

  8. S.M. Parkes et al, "Review of Standard and Status", Digital Interface Circuit Evaluation Study WP1000 Technical Report, Document No. UoD-DICE-TN-1000, ESA Contract No. 12693/97/NL/FM, University of Dundee, July 1998.

  9. Telecommunications Industry Association, "Electrical Characteristics of Low Voltage Differential Signaling (LVDS) Interface Circuits", ANSI/TIA/EIA-644-1995, March 1996.

  10. S.M. Parkes, "High-Speed, Low-Power, Excellent EMC: LVDS for On-Board Data-handling", DSP'98, 6th International Workshop on Digital Signal Processing Techniques for Space Applications, ESTEC, Noordwijk, The Netherlands, 23-25 September 1998, European Space Agency (ESA) publication no. WPP-144, paper P16.

  11. S.M. Parkes, C. McClements, G. Kempf, S. Fischer and A. Leon, "SpaceWire Router", in: ISWS International SpaceWire Seminar 2003 (Noordwijk, The Netherlands, 4-5 November (CD Rom) 2003) pp.180-187.

  12. GAIA, http://spacewire.esa.int/science/gaia, viewed on 1st December 2010.

  13. ExoMars, http://exploration.esa.int/science-e/www/object/index.cfm?fobjectid=46048, viewed on 1st December 2010.

  14. BepiColombo Mercury Polar Orbiter, http://www.esa.int/esaSC/120391_index_0_m.html, viewed on 1st December 2010.

  15. Sentinel 1, http://www.esa.int/esaLP/SEMBRS4KXMF_LPgmes_0.html, viewed on 1st December 2010.

  16. Sentinel 2, http://www.esa.int/esaLP/SEMM4T4KXMF_LPgmes_0.html, viewed on 1st December 2010.

  17. Sentinel 3, http://www.esa.int/esaLP/SEMTST4KXMF_LPgmes_0.html, viewed on 1st December 2010.

  18. Sentinel 5, http://www.esa.int/esaLP/SEM3ZT4KXMF_LPgmes_0.html, viewed on 1st December 2010.

  19. SWIFT, http://www.nasa.gov/mission_pages/swift/main/index.html, viewed on 1st December 2010.

  20. NASA, "Lunar Reconnaissance Orbiter website", http://www.nasa.gov/mission_pages/LRO/main/index.html, viewed on 1st December 2010.

  21. LCROSS, http://lcross.arc.nasa.gov/

  22. JWST, "James Webb Space Telescope website", http://www.jwst.nasa.gov/

  23. MMS, "Magnetospheric Multi-Scale mission website", http://mms.space.swri.edu/spacecraft.html

  24. GOES-R, "Geostationary Operational Environmental Satellite – R Series website", http://www.goes-r.gov/

  25. ​ D. Fronterhouse and J. Lyke, "Plug-and-Play Satellite(PnPSat) Demonstrating the Vision", Proceedings of 1st International SpaceWire Conference, Dundee, Scotland, Sept 2007.

  26. ​ P. Jaff, G. Clifford and J. Summers, "SpaceWire for Operationally Responsive Space as part of Tacsat ‑ 4", Proceedings of 1st International SpaceWire Conference, Dundee, Scotland, Sept 2007.

  27. BepiColombo Mercury Magnetospheric Orbiter, http://www.stp.isas.jaxa.jp/mercury/p_mmo.html

  28. Astro-H, http://astro-h.isas.jaxa.jp/

  29. SPRINT-A, http://www.jaxa.jp/article/interview/vol56/p2_e.html

  30. ASNARO, http://www.usef.or.jp/english/f3_project/asnaro/f3_asnaro.html

  31. NEC, NEXTAR,

  32. RosCosmos and SpaceWire

  33. ​ M. CHilderhouse, "NGP-N ASIC", Microelectronics Presentation Days 2010, ESTEC, 30th March 2010, http://microelectronics.esa.int/mpd2010/day1/NGP-N_for_MPD2010.pdf, viewed on 1st December 2010.

  34. ExoMars, http://exploration.esa.int/science-e/www/object/index.cfm?fobjectid=46048, viewed on 1st December 2010.

  35. ​ B. Dean, R. Warren, and B. Boyes, "RMAP over SpaceWire on the ExoMars Rover for Direct Memory Access by Instruments to Mass Memory", 2nd International SpaceWire Conference, Nara, Japan, Nov 2008.

  36. "SpaceWire – Remote memory access protocol", European Cooperation for Space Standardization, ECSS-E-ST-50-51C, Issue 1, January 2010.

  37. NASA, "Lunar Reconnaissance Orbiter website", http://www.nasa.gov/mission_pages/LRO/main/index.html, viewed on 1st December 2010.

  38. J.R. Marshall, "Evolution and Applications of System on a Chip SpaceWire Components for Spacebourne Missions", 2nd International SpaceWire Conference, Nara, Japan, Nov 2008.

  39. ASNARO, http://www.usef.or.jp/english/f3_project/asnaro/f3_asnaro.html

  40. European Cooperation for Space Standardization, Standard ECSS-E-ST-50-12C, SpaceWire, Links, Nodes, Routers and Networks, Issue 1, European Cooperation for Space Data Standardization, February 2003 (formerly ECSS-E-50-12A February 2003).

  41. ESA SpaceWire Website, http://spacewire.esa.int, viewed on 1st December 2010.

  42. Telecommunications Industry Association, "Electrical Characteristics of Low Voltage Differential Signaling (LVDS) Interface Circuits", ANSI/TIA/EIA-644-1995, March 1996.

  43. T9000 Transputer User Manual

  44. ESA SpaceWire Website, http://spacewire.esa.int, viewed on 1st December 2010.

  45. IEEE Computer Society, "IEEE Standard for Heterogeneous Interconnect (HIC) (Low ‑ Cost, Low ‑ Latency Scalable Serial Interconnect for Parallel System Construction)", IEEE Standard 1355 − 1995, IEEE, June 1996.

  46. ​ J. Ilstad, W. Gasti, P. Sinander, and S. Habinc, "SpaceWire Remote Terminal Controller", Proceedings of International SpaceWire Conference, Dundee, Sept 2007.

  47. European Cooperation for Space Standardization, Standard ECSS-E-ST-50-12C, SpaceWire, Links, Nodes, Routers and Networks, Issue 1, European Cooperation for Space Data Standardization, February 2003 (formerly ECSS-E-50-12A February 2003).

  48. S.M. Parkes, "The operation and uses of the SpaceWire time-code", in: ISWS International SpaceWire Seminar 2003 (Noordwijk, The Netherlands, 4-5 November (CD Rom) 2003) pp.223-230.

  49. SpaceWire working group website, http://spacewire.esa.int/WG/SpaceWire/, viewed on 1st December 2010.

  50. "SpaceWire – Remote memory access protocol", European Cooperation for Space Standardization, ECSS-E-ST-50-51C, Issue 1, January 2010.

  51. ​ S. Mills, S.M. Parkes and N. O'Gribin, "SpaceWire Data-handling with RMAP", Data Systems in Aerospace (DASIA), 2007, ISBN 92-9092-202-8.