Шина IEEE 1394 — FireWire

Шина IEEE 1394 — FireWire

Общая информация о физическом уровне

Физический уровень PHY (Physical Layer) IEEE 1394 обеспечивает связь узлов в единую шину. Физический уровень стандарта определяет механические характеристики соединительных разъемов, а также требования к их характеристикам передачи сигналов. В стандарте определено несколько типов разъемов, соответствующих применяемым кабелям. В 1394b в физическом уровне введено дополнительное разделение: введен подуровень PMD (Physical Medium Dependent), зависящий от используемой среды передачи (разновидностей медных и оптических кабелей).

В современной редакции стандарта IEEE 1394 фигурирует два типа сигнализации — традиционная DS-сигнализация шин 1394 и 1394a и бета-сигнализация, введенная в IEEE 1394b. Эти типы используют разные схемы сигнального кодирования — DS-кодирование и кодирование 8B10B; бета-сигнализация допускает и разнообразие типов среды передачи (электрические и оптические кабели). Все эти различия в основном сосредоточены на физическом уровне.

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

Физический уровень узла обеспечивает функционирование шины (включая трансляцию сигналов и отработку автоконфигурирования) без участия и даже при отключенном LINK-уровне (и вышестоящих). Узел может и не иметь LINK-уровня — его многопортовый PHY будет выполнять функции кабельного сетевого концентратора-повторителя.

Физический уровень отвечает за кабельное питание — его подачу или потребление. На физическом уровне может быть организована гальваническая развязка узлов. Для DS-сигнализации эта развязка реализуется в интерфейсе PHY-LINK, для бета-сигнализации развязка возможна в сигнальных цепях кабеля.

Первый вариант физического интерфейса шины был определен в IEEE 1394–1995 и в дополнениях 1394a–2000 не претерпел существенных изменений. В этом варианте каждое кабельное соединение состоит из двух пар сигнальных электрических проводов и, дополнительно, пары проводов для подачи питания. Обе сигнальные пары используются для двунаправленной передачи сигналов, дифференциальных и линейных. При передаче данных по одной паре узел передает данные в последовательном коде, по другой — стробы. Этот режим получил название DS-Mode (DataStrobe), он обеспечивает простой механизм синхронизации приемника и передатчика при любой скорости обмена. Для служебной сигнализации (например, об обнаружении подключения/отключения узла) используется сигнализация постоянным током. Кроме того, требуется различать несколько уровней напряжения для сигнализации скорости. Из-за этого гальваническая развязка узлов на уровне кабельного интерфейса оказывается невозможной.

В IEEE 1394b введен режим сигнализации Beta-Mode, в котором используются две встречные однонаправленные сигнальные линии. Примененный метод сигнального кодирования 8B/10B избавляет от постоянной составляющей сигнала; избыточность кодирования позволяет использовать «лишние» символы для специальной сигнализации. Приемнику не требуется распознавать несколько уровней сигнала. Это позволяет использовать как электрическую, так и оптическую передачу, а для электрической передачи возможна полная гальваническая развязка приемников и передатчиков через импульсные трансформаторы. Порты 1394b могут быть универсальными «двуязычными» (bilingual), поддерживающими оба режима, или чисто бета-портами.

Интерфейс с канальным уровнем

Физический уровень (PHY) обеспечивает LINK-уровню возможность обращения к шине для посылки и приема пакетов и исполнения некоторых служебных действий. Физический уровень имеет свои регистры, служащие для управления выполнением функций и определения состояния шины и узлов. К этим регистрам имеется возможность локального доступа — приложение узла через LINK-уровень может общаться с регистрами PHY. Содержимое некоторых регистров может изменяться по приему пакетов физического конфигурирования. В 1394a появилась возможность удаленного обращения к регистрам чужого узла на данной шине. Физический уровень не только обеспечивает передачу и прием пакетов для LINKуровня, но и сам является источником и получателем служебных пакетов.

Интерфейс с канальным уровнем

Физический и канальный уровни (PHY и LINK) в стандарте IEEE 1394 отделимы друг от друга. Это обеспечивает модульность построения устройств и возможность гальванической развязки основной (прикладной) части устройства от кабельного интерфейса. В устройствах физический и канальный уровни могут реализоваться раздельными микросхемами, причем даже разных производителей. Интерфейс между ними был описан в приложении к стандарту 1394, но в рекомендательной (необязательной) форме. В 1394a этот интерфейс (с небольшими изменениями) объявлен стандартом. Cвязь физического и канального уровней обеспечивается интерфейсом PHY-LINK. По этому интерфейсу канальный уровень получает сервисы доступа к шине для передачи и приема пакетов данных, а также доступ к внутренним регистрам PHY.

В IEEE 1394b в связи с особенностями бета-режима подход к организации интерфейса связи с физическими портами изменился. Здесь появился новый промежуточный интерфейс PIL-FOP, который позволяет соединять микросхему, в которой LINK интегрирован с однопортовым PHY, с многопортовым разветвителем. Таким образом, в 1394b имеются два варианта интерфейса:

  • параллельный интерфейс B PHY-LINK, являющийся развитием своего традиционного предшественника и обеспечивающий работу с портами на скоростях от S100 до S800 как в традиционном, так и в бета-режиме;
  • последовательный интерфейс PIL-FOP, по сигналам соответствующий электрическому интерфейсу порта в бета-режиме, подключающий многопортовый PHY-разветвитель (называемый FOP) к однопортовому PHY, интегрированному с LINK-уровнем (эта комбинация называется PIL). Последовательный интерфейс поддерживает все режимы и скорости (от S100 до S3200).

Общая информация об «открытом» хост-контроллере IEEE 1394 — OHCI

«Открытый» хост-контроллер (OHC 1394) представляет собой реализацию канального уровня (LINK) шины IEEE 1394 с дополнительными средствами поддержки уровней транзакций и управления шиной. Для высокопроизводительного обмена данными OHC содержит контроллеры прямого доступа к памяти (DMA). Контроллер поддерживает все типы пакетов, передаваемых по шине 1394. Данное описание основано на спецификации 1394 Open Host Controller Interface Specification, версия 1.1, 2000 год .

Со стороны шины 1394 хост — узел с контроллером OHC — выглядит как обычный узел шины, способный выполнять функции мастера циклов и диспетчера изохронных ресурсов. Контроллер позволяет хосту быть инициатором любых транзакций шины 1394 и отвечать на любые транзакции, адресованные узлу хоста.В адресном пространстве этого узла расположены архитектурные регистры CSR и память конфигурации; большая часть пространства доступна для обращений в виде обычных транзакций шины. Часть пространства узла может отображать пространство физических адресов памяти хоста. Часть обращений к хосту может отрабатываться исключительно аппаратными средствами контроллера; остальные обращения хост отрабатывает программно. Принимаемые пакеты запросов для программной отработки OHC своими каналами DMA помещает в буферы, размещенные в памяти хоста. Пакеты ответов программа размещает в других буферах, из которых OHC организует их передачу в шину, опять же с помощью каналов DMA.

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

Для изохронных операций OHC может исполнять роль мастера циклов, синхронизируясь от внутреннего генератора синхронизации или (необязательно) от внешнего источника. Если OHC не исполняет роль мастера циклов, то он поддерживает синхронизацию внутреннего таймера циклов с таймером узла-мастера циклов (по приему пакетов начала цикла). Для изохронных операций OHC имеет два контроллера DMA — для приема и для передачи данных. Каждый из этих контроллеров может поддерживать до 32 каналов DMA, называемых контекстами DMA. Передающий контроллер в каждом цикле может передавать данные из каждого контекста для связанного с ним изохронного канала. Принимающий контроллер способен в каждом цикле принимать данные в каждый контекст из связанного с ним канала. Кроме того, один из принимающих контекстов может быть настроен на прием данных из множества каналов.

По обнаружении сброса на шине OHC автоматически очищает все очереди асинхронных пакетов для передачи; прием пакетов не прерывается, но в потоке пакетов запросов появляется маркер, индицирующий факт сброса. Новый физический идентификатор узла (PHY_ID), получаемый от PHY, контроллер записывает в соответствующий регистр. Контроллер возобновит асинхронные передачи только по указанию программы, при этом повторное использование старых запросов в общем случае невозможно: физический идентификатор узла назначения может измениться. Изохронный прием и передача по сбросу не прекращаются — они возобновляются сразу по завершении инициализации.

Организация и топология шины

Стандарт IEEE 1394 описывает шину с последовательным интерфейсом, по которой информация передается пакетами. Источник пакетов должен получить право передачи пакета, используя механизм арбитража, в котором задействуются все устройства, подключенные к шине. Арбитраж предоставляет узлам право доступа в соответствии с запрошенным типом передачи. Для асинхронных транзакций арбитраж обеспечивает справедливое распределение полосы пропускания, для изохронных передач — гарантированную (предварительно согласованную) полосу пропускания для каждого канала. Коллизии (столкновения пакетов от нескольких устройств) в исправной шине отсутствуют.

Все устройства соединяются друг с другом кабелями на основе любой топологии (древовидной, цепочечной, звездообразной). Каждое устройство (узел сети) обычно имеет несколько равноправных соединительных разъемов, представляющих его порты. Некоторые устройства имеют только один разъем, что ограничивает возможные варианты их месторасположения. В современной редакции стандарт допускает до 16 портов (разъемов) на одном устройстве, чаще встречаются 1–4-портовые устройства. Многопортовые узлы позволяют соединять множество узлов IEEE 1394 без использования вспомогательного оборудования (хабов). Внутри многопортового узла имеется повторитель, транслирующий пакеты и управляющие сигналы между портами.

Устройства на шине могут передавать данные на разных скоростях. Базовой скоростью, поддерживаемой любым устройством, является S100. На этой общедоступной скорости передаются все служебные пакеты, в том числе и пакеты самоидентификации. Если устройство поддерживает высокую скорость (например, S400), то оно обязано поддерживать и все более низкие скорости вплоть до базовой. Пакеты транзакций могут передаваться на любой скорости, доступной узлам, связанным кабельным сегментом. При этом перед посылкой пакета на скорости, отличной от базовой (S100), передающий узел посылает сигнал выбранной скорости. Пакет, приходящий на один порт устройства на высокой скорости, узел не будет транслировать на порт, для которого установлена более низкая скорость. Таким образом, скорость, на которой возможно прохождение пакета между произвольной парой узлов, зависит от скоростных возможностей этих узлов и промежуточных узлов, лежащих на пути между ними. Отсутствие ответа на пакет, посланный на высокой скорости, служит поводом для повторной попытки посылки на более низкой скорости. Заранее узнать доступную скорость можно по карте скоростей — двухмерной матрице, в которой для каждой пары узлов шины указывается максимальная возможная скорость передачи. Эта карта доступна только при наличии диспетчера шины.

Кабельная шина допускает большую свободу выбора топологии физических соединений при соблюдении следующих ограничений:

  • на шине может быть не более 63 узлов;
  • между любой парой узлов может быть не более 16 кабельных сегментов (в 1394a допускается до 24 сегментов);
  • длина сегмента стандартного кабеля не должна превышать 4,5 м;
  • суммарная длина кабеля не должна превышать 72 м;
  • топология не должна содержать петель. В первых редакциях стандарта за это отвечал только пользователь, в IEEE 1394b имеются средства автоматического исключения петель.

В IEEE 1394b введены новые варианты среды передачи, допускающие большую длину сегментов при соединении узлов друг с другом. Здесь используется иная сигнализация, не совместимая с традиционной сигнализацией IEEE 1394 и IEEE 1394a. Однако в 1394b есть и «двуязычные» узлы, способные частью своих портов работать со старыми узлами 1394/1394a, а другой — с узлами 1394b. С помощью таких узлов можно строить смешанные сети и преодолевать вышеуказанные ограничения по расстоянию.

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

В IEEE 1394 кроме кабельной сети определены и спецификации использования последовательной шины в качестве кросс-шины (Backplane Environment) для объединения узлов в пределах одного устройства. Здесь используется несколько иной физический уровень (PHY) — всегда однопортовый, с некоторыми отличиями в регистрах. Конфигурация шины при этом фиксирована, механизм автоконфигурирования упрощен, физические идентификаторы узлов назначаются программно (записью в регистр PHY). При идентификации скорости формально указывается S100, но реально это соответствует скоростям S50 или S25.

Асинхронные транзакции

Асинхронные транзакции на шине IEEE 1394 реализуют подмножество операций
протокола запросов-ответов, соответствующего стандарту архитектуры регистров управления и состояния CSR (Control and Status Register) для микропроцессорных шин. Асинхронные передачи обеспечивают три типа транзакций:

  • чтение (Read);
  • запись (Write);
  • блокированные операции «чтение-модификация-запись» (Lock).

В каждой асинхронной транзакции участвуют два устройства: запросчик (requester) и ответчик (responder). Протокол запросов-ответов для этих типов транзакций иллюстрирует рисунок. Каждая асинхронная транзакция состоит из двух субакций (subaction) — шагов исполнения:

  • запрос (request) — передается тип, адрес транзакции и, возможно, данные;
  • ответ (response) — передается состояние выполнения (успех-неуспех) транзакции и, возможно, данные.

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

Яндекс.Метрика