Специальные регистры последовательной шины (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 (см. рисунок ниже) позволяет принудительно вводить ошибки передачи пакетов:
Память конфигурации для узлов шины 1394 соответствует спецификации ISO/IEC 13213 со специфическими полями для последовательной шины. Эта память в шинных транзакциях допускает только чтение, поэтому она называется ROM (ReadOnly Memory). В данном случае применение термина ПЗУ (постоянное запоминающее устройство) как синонима ROM некорректно, поскольку память конфигурации узла может быть изменена его локальным ПО в процессе работы устройства. Каждое такое изменение отражается инкрементом поля gen (generation), входящим в блок параметров последовательной шины, находящийся в этой же памяти.
Память конфигурации может иметь минимальный размер 32 бита или нормальный размер 1 Кбайт. В CSR-архитектуре предусмотрена возможность расширение объема памяти конфигурации (при косвенной адресации содержимого), но в IEEE 1394 эта возможность не используется. Память конфигурации организована в виде иерархической системы каталогов (см. рисунок 1). Форматы содержимого памяти приведены на втором рисунке, где серым цветом выделены обязательные элементы.
Рисунок 1
Рисунок 2
В минимальном формате память конфигурации содержит только 24-битный идентификатор производителя vendor_id (рис. 2, а). В общем формате (рис. 2, б) память содержит следующие элементы:
Информационный блок последовательной шины (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) |