PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

Кафе для поминок от залов с поминальным поминальная трапеза кафе.

Шина IEEE 1394 — FireWire

Конфигурирование шины и узлов IEEE 1394

Специальные регистры последовательной шины

Специальные регистры последовательной шины (Serial Bus Dependent Registers) расположены во втором 512-байтном блоке, специально отведенном в CSR под шинно-зависимые регистры.

Регистры синхронизации изохронных передач Cycle_Time (200h) и Bus_Time (204h) задают время, измеряемое в секундах, циклах (125 мкс) и тиках (частота 24,576 МГц). Запись в эти регистры влияет только на поле second_count_hi, автоматически инкрементируемое каждые 128 с.

Регистры мониторинга питания (необязательные) позволяют осуществлять предупреждение об угрозе пропадания питания. Узел, обнаруживший угрозу пропадания питания, посылает широковещательное сообщение — выполняет запись в регистр POWER_FAIL_IMMINENT (208h, рис. 1, а). В этом сообщении единица в pfi_flag указывает на действительность остальных полей. Поле pfi_delay содержит ожидаемое время до пропадания (в сотнях микросекунд); поле pfi_source — идентификатор узла, пославшего сообщение. Регистр POWER_SOURCE (20Ch, рис. 1, б) в поле power_source содержит идентификатор узла, сообщения от которого принимаются во внимание.

Регистр тайм-аута повторов по занятости целевого узла BUSY_TIMEOUT (210h) определяет предел времени или количество попыток повторов. По сбросу устанавливается время ожидания 25 мс и 0 попыток повторов.

Регистр идентификатора диспетчера шины BUS_MANAGER_ID (21Ch) должен присутствовать у любого узла, претендующего на роль диспетчера изохронных ресурсов. В нем у выбранного диспетчера изохронных ресурсов будет значение идентификатора диспетчера шины (в младших 6 битах) или признак отсутствия диспетчера — 3Fh (значение, устанавливаемое по начальному сбросу). Этот регистр должен поддерживать блокированную транзакцию (условную запись) для выбора диспетчера шины.

Регистры доступной пропускной способности BANDWIDTH_AVAILABLE (220h) и каналов CHANNELS_AVAILABLE (224h и 228h) должны быть у диспетчера изохронных ресурсов. Эти регистры должны поддерживать блокированную транзакцию (условную запись) для выделения изохронных ресурсов.

Служебные регистры MAINT_CONTROL (22Ch) и MAINT_UTILITY (230h) служат для отладочных целей. Запись в регистр MAINT_UTILITY не вызывает никаких побочных действий в узле, чтение возвращает результат последней записи. Для проверки связи и протоколов обработки ошибок можно обращаться к этому регистру любого узла, проверяя достоверность обмена (сравнивая данные чтения и записи) и вводя различные ошибки. Регистр MAINT_CONTROL (см. рисунок ниже) позволяет принудительно вводить ошибки передачи пакетов:

  • e_hcrc — искажение CRC заголовка;
  • e_dcrc — искажение CRC поля данных;
  • no_pkt — запрет генерации следующего пакета;
  • f_ack — подмена нормального ответа (квитанции) на поле ack;
  • no_ack — запрет посылки пакета квитанции;
  • ack — подставляемое значение кода ответа (если f_ack = 1).

Память конфигурации

Память конфигурации для узлов шины 1394 соответствует спецификации ISO/IEC 13213 со специфическими полями для последовательной шины. Эта память в шинных транзакциях допускает только чтение, поэтому она называется ROM (ReadOnly Memory). В данном случае применение термина ПЗУ (постоянное запоминающее устройство) как синонима ROM некорректно, поскольку память конфигурации узла может быть изменена его локальным ПО в процессе работы устройства. Каждое такое изменение отражается инкрементом поля gen (generation), входящим в блок параметров последовательной шины, находящийся в этой же памяти.

Память конфигурации может иметь минимальный размер 32 бита или нормальный размер 1 Кбайт. В CSR-архитектуре предусмотрена возможность расширение объема памяти конфигурации (при косвенной адресации содержимого), но в IEEE 1394 эта возможность не используется. Память конфигурации организована в виде иерархической системы каталогов (см. рисунок 1). Форматы содержимого памяти приведены на втором рисунке, где серым цветом выделены обязательные элементы.

 

Рисунок 1

 

Рисунок 2

В минимальном формате память конфигурации содержит только 24-битный идентификатор производителя vendor_id (рис. 2, а). В общем формате (рис. 2, б) память содержит следующие элементы:

  • заголовок (1 квадлет), содержащий три поля:
          -----info_length — длина информационного блока последовательной шины квадлетах (01 — признак минимального формата);
          -----crc_length — длина блока памяти (в квадлетах), защищаемого CRC (255 — весь объем памяти, 1020 байт после заголовка);
          -----rom_crc_value — значение CRC тела памяти (объявленного числа квадлетов после заголовка);
  • bus_info_block — информационный блок последовательной шины;
  • root_directory — корневой каталог, содержащий элементы описаний узла или ссылки на эти описания;
  • unit_directories — каталоги блоков;
  • root_leaves и unit_leaves — элементы-«листья», на которые ссылаются каталоги;
  • vendor_dependent_information — специфическая информация (по усмотрению разработчика).

Информационный блок последовательной шины и корневой каталог

Информационный блок последовательной шины

Информационный блок последовательной шины (bus_info_block) занимает 4 квадлета (см. рисунок ниже). Назначение его полей:

  • bus_name — имя шины («1394» в ASCII)
  • irmc — признак способности к роли диспетчера изохронных ресурсов;
  • cmc — признак способности к роли мастера циклов;
  • isc — признак способности к изохронным передачам;
  • bmc — признак способности к роли диспетчера шины;
  • pmc — признак способности к управлению питанием (введено в 1394a);
  • cyc_clk_acc — точность генерации интервалов циклов (в миллионных долях, ppm, допустимо 0–100), только для узлов с cmc = 1;
  • max_rec — указатель максимального размера поля данных, равного 2max_rec + 1. Допустимо max_rec = 1…13 (длина пакета 4, 8, 16… 16 384 байт);
  • node_vendor_id — идентификатор производителя (то же, что и vendor_id в минимальном формате);
  • chip_id_hi, chip_id_lo — две составные части 40-битного идентификатора микросхемы LINK-уровня, который в совокупности с node_vendor_id дает глобально уникальный идентификатор узла;
  • gen — номер генерации содержимого памяти, инкрементируется с каждой его модификацией (введено в 1394a). Позволяет конфигурационному ПО сократить объем запрашиваемой информации, если считанное значение номера после сброса совпадает с предыдущим;
  • link_speed — максимальная скорость, поддерживаемая LINK-уровнем; может не совпадать со скоростью PHY, сообщаемой в пакете самоидентификации (введено в 1394a).

 

Корневой каталог

Корневой каталог содержит элементы, состоящие из двух полей:

  • key (8 бит) — ключ элемента, в котором можно выделить:
         -----key_type (2 бита) — тип ключа: 0 — непосредственный параметр, 1 — смещение (в начальном пространстве регистров), по которому находится параметр; 2 —смещение (в памяти конфигурации), по которому находится структура данных (лист); 3 — смещение, по которому находится каталог;
         -----key_value (6 бит) — значение ключа, по которому определяется назначение элемента.
  • value или offset (24 бита) — значение элемента или смещение ячейки памяти, с которой начинается данный элемент. Смещение указывается в квадлетах относительно положения данного элемента каталога.

Элементы корневого каталога приведены в таблице. Для всех узлов шины обязательны первые три элемента из приведенных в таблице. Структура элемента, содержащего уникальный 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)