Контроллер асинхронной передачи работает с двумя контекстами:
Контекстная программа асинхронной передачи является списком команд, являющихся для контроллера инструкциями по сборке отправляемых пакетов. Каждый передаваемый асинхронный пакет описывается непрерывным списком команд, называемым блоком дескрипторов. Начальные адреса и длина этих списков фигурируют в регистре CommandPtr. В каждом блоке дескрипторов содержится адрес перехода (branchAddress), связывающий данный блок со следующим в цепочке. Контекстная программа асинхронной передачи является линейной (неветвящейся). В контекстах асинхронной передачи используются команды следующих типов:
Для того чтобы послать асинхронный пакет, программа хоста должна в соответствующем контексте асинхронной передачи сформировать блок команд. Возможны следующие варианты блока:
Отрабатывая команды OUTPUT_MORE-Immediate или OUTPUT_LAST-Immediate, контроллер подсчитывает и автоматически вставляет в пакет CRC-код заголовка. Отрабатывая команду OUTPUT_LAST, контроллер вставляет в пакет CRC, подсчитанный для всех фрагментов поля данных. По отработке команды контроллер помещает состояние выполнения (из регистра управления соответствующим контекстом) в дескриптор последней команды.
Назначение полей в дескрипторах команд асинхронной передачи приведено далее:
Форматы данных, которые подготавливает программа хоста для посылки асинхронных пакетов, соответствуют форматам пакетов транзакций IEEE 1394, но с некоторыми особенностями:
Стандарт для высокопроизводительной последовательной шины (High Performance Serial Bus), получивший официальное название IEEE 1394, был принят в 1995 году. Стандарт основан на шине FireWire, используемой фирмой Apple Computer еще с 1986 года в качестве дешевой альтернативы SCSI в своих компьютерах. Название FireWire («огненный провод») теперь применяется и к реализациям IEEE 1394, оно сосуществует с кратким обозначением: «1394». Другое название того же интерфейса — iLink, а иногда и Digital Link — используется фирмой Sony применительно к устройствам бытовой электроники. MultiMedia Connection — имя, используемое в логотипе 1394 High Performance Serial Bus Trade Association (1394TA).
К устройствам с интерфейсом IEEE 1394 относится большое количество спецификаций, описывающих не только собственно интерфейс последовательной шины, но и использование этой шины для транспортировки прикладных данных разного назначения, наборы команд и форматы данных. Основной источник информации по технологии, стандартам и продуктам — сайт ассоциации High Performance Serial Bus Trade Association (http://www.1394ta.org). Спецификация IEEE 1394 официально доступна через http://www.ieee.org (платно).
Документ IEEE 1394-1995 Standard for a High Performance Serial Bus определяет архитектуру шины, основанную на трехуровневой модели, и протоколы, обеспечивающие автоматическое конфигурирование, арбитраж и передачу изохронного и асинхронного трафика. В стандарте определены три возможные скорости передачи сигналов по кабелям: 98,304, 196,608 и 393,216 Мбит/с, которые округляют до 100, 200 и 400 Мбит/с и обозначаются как S100, S200 и S400 соответственно. Стандартизованы кабель и 6-контактный разъем, позволяющий передавать сигналы и питание.
В дополнении IEEE 1394a-2000 IEEE Standard for a High Performance Serial bus (Supplement) введен ряд усовершенствований:
Новых скоростей в этом стандарте не появилось; изменения вводились с учетом обеспечения обратной совместимости с устройствами, отвечающими исходному стандарту.
Дополнения IEEE 1394b (2002 год) в основном касаются повышения скорости и дальности передачи:
Совместимость с 1394 и 1394a обеспечивается «двуязычными» уровнями PHY, способными работать с разными методами сигнализации на своих разных портах. При этом возможно построение гибридной шины, состоящей из одного или нескольких «облаков» узлов с бета-сигнализацией, связанных друг с другом фрагментами с традиционной сигнализацией.
Проект стандарта P1394.1 относится к сетям, состоящим из нескольких шин IEEE 1394. Основа построения сети — двухпортовый мост, способный передавать трафик между соединяемыми шинами. При этом мост для процессов сброса и автоконфигурирования, прерывающих передачу полезного трафика на длительное время, изолирует шины друг от друга. Возможны и многопортовые мосты, которые с протокольной точки зрения являются комбинацией двухпортовых.
В основу IEEE 1394 положен протокол запросов-ответов архитектуры регистров управления и состояния для микрокомпьютерных шин, описанной в стандарте ISO/IEC 13213:1994 Control and Status Register Architecture for Microcomputer Busses (CSR-архитектура). Ревизия этого стандарта предполагается в проекте P1212r.
Ревизия касается возможностей бесконфликтного расширения форматов содержимого памяти конфигурации, а также регистров CSR. Планируется привести спецификацию CSR в соответствие с практикой ее использования.
К управлению энергопотреблением IEEE 1394 относится спецификация 1394 TA Power Spec, состоящая из трех частей:
Уровень транзакций взаимодействует с прикладным драйвером четырьмя примитивами сервисов:
Передавая запрос канальному уровню, уровень транзакций добавляет еще метку транзакции и код повтора.
Информационный блок последовательной шины (bus_info_block) занимает 4 квадлета (см. рисунок ниже). Назначение его полей:
Корневой каталог содержит элементы, состоящие из двух полей:
Элементы корневого каталога приведены в таблице. Для всех узлов шины обязательны первые три элемента из приведенных в таблице. Структура элемента, содержащего уникальный 64-битный идентификатор узла, приведена на рисунке. Этот идентификатор, называемый EUI-64 (Extended Unique Identifier), состоит из идентификаторов производителя узла и идентификатора микросхемы LINKуровня. Он может использоваться для идентификации программного драйвера данного узла. В CSR определен еще и 88-битный глобальный идентификатор GUI (Globally Unique Identifier), в котором к EUI-64 в качестве старших 24 бит добавлен идентификатор Company_Id. Идентификатор GUI уникально определяет узел во всем мире всех шин, отвечающих CSR-архитектуре.
Ключ | Смещение или значение |
03h | Module_Vendor_Id, значение идентификатора производителя модуля (может совпадать с идентификатором производителя узла) |
0Ch | Node_Capabilities, значение свойств узла (см. рисунок после этой таблицы): spt — признак наличия регистра SPLIT_TIMEOUT, должен быть единичным у узла, способного участвовать в транзакциях ms — признак наличия регистров Messaging Passing int — признак наличия регистров Interrupt_Traget и Interrupt_Mask ext — признак наличия регистра TEST_ARGUMENT bas — признак наличия регистров TEST_START и TEST_STATUS prv — признак наличия приватного пространства узла 64 — признак поддержки 64-битной адресации (в IEEE 1394 всегда установлен) fix — признак фиксированной (а не расширенной) адресации (в IEEE 1394 всегда установлен) lst — признак наличия бита Lost в регистрах State_Clear и State_Set drq — признак наличия бита Dreq в регистрах State_Clear и State_Set elog — признак наличия регистра Error_Log и бита Elog в регистрах State_Clear и State_Set atn, off — признак наличия одноименных битов в регистрах State_Clear и State_Set ded — узел поддерживает состояние Dead init — узел поддерживает состояние Initializing |
8Dh | Node_Unique_Id_offset — смещение элементалиста с уникальным идентификатором узла. Смещение (в квадлетах) задается относительно положения данного ключа в памяти конфигурации. Формат элемента приведен на рисунок выше |
82h | Bus_Dependent_Info_Offset — смещение элемента информации, относящейся к шине |
C2h | Bus_Dependent_Info_Offset — смещение каталога информации, относящейся к шине |
04h | Module_Hw_Version, значение версии аппаратных средств модуля |
05h | Module_Spec_Id, значение идентификатора спецификации модуля |
07h | Module_Sw_Version, значение версии программных средств модуля |
87h | Module_Dependent_Info_Offset — смещение элемента информации, относящейся к модулю |
C7h | Module_Dependent_Info_Offset — смещение каталога информации, относящейся к модулю |
08h | Node_Vendor_Id, идентификатор производителя узла |
09h | Node_Hw_Version, значение версии аппаратных средств узла |
0Ah | Node_Spec_Id, значение идентификатора спецификации узла |
0Bh | Node_Sw_Version, значение версии программных средств узла |
90h | Node_Dependent_Info_Offset — смещение элемента информации, относящейся к узлу |
D0h | Node_Dependent_Info_Offset — смещение каталога информации, относящейся к узлу |
D1h | Unit_Directory_Offset — смещение каталога информации, относящейся к блоку |
F0h | Node_Power_Directory_Offset — относительное смещение каталога управления потреблением, относящегося к узлу (введено в 1394a) |
В IEEE 1394a введены понятия уровней потребления (Power States), относящиеся к узлу в целом и отдельным его блокам. Узел и блок могут поддерживать до четырех уровней (0…3), из которых нулевой (обязательный) соответствует функционированию в самом полном объеме.
Уровни потребления узла (Node Power States) N0…N3 определяют состояния уровней PHY и LINK:
Уровни потребления блока (Unit Power States) D0…D3 отражают функциональность и потребление блока:
Возможные состояния уровней потребления узла и входящих в него блоков связаны между собой: номер уровня потребления узла должен быть не больше, чем наименьший номер уровня потребления его блоков. Например, если в узле два блока и их текущие уровни потребления D1 и D2, то узел может находиться на уровне N0 или N1. Попытка (запрос) перевода уровня узла с N0 на N2 или N3 приведет к переводу только на уровень N1.
Для каждого поддерживаемого уровня потребления узла в памяти конфигурации имеются исчерпывающие описания условий питания и потребляемой (отдаваемой) мощности. Кроме того, введены регистры CSR, отражающие текущие уровни потребления для узла и блоков и управляющие их сменой. Смену уровней запрашивает диспетчер энергопотребления, который может выполнять удаленное управление любыми узлами шины и их блоками (как и своим собственным узлом и его блоками).