Шина IEEE 1394 — FireWire

Пакеты PHY

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

  • самоидентификации узлов шины;
  • физического конфигурирования узлов;
  • удаленного управления узлами;
  • тестирования портов на образование петель в топологии (1394b).

Пакеты PHY-уровня по формату отличаются от пакетов транзакций и потоков: PHY-пакеты имеют длину 64 бита, первые 32 несут информацию, а в следующих 32 битах содержится инверсное значение информационных бит. Такой способ контроля позволяет отличить PHY-пакет от изохронного пакета с нулевой длиной данных: CRC-контроль для пакета PHY позволит сформировать сигнал об ошибке, что в совокупностью с длиной в 64 бита и является признаком PHY-пакета. Несоответствие контрольных бит информационным заставляет получателя игнорировать пришедший пакет. Адресация PHY-пакетов тоже иная — здесь используется только 5-битный идентификатор узла (PHY-пакеты за пределы шины не выходят). Назначение PHY-пакета определяется по первым двум битам.

Форматы пакетов самоидентификации приведены на рисунке 1. В 1394–1995 допускалось до четырех пакетов (0, 1, 2 и 3), что позволяло описывать свойства до 27 портов одного узла. В 1394a сократили число портов до 16, в результате остались только пакеты 0, 1 и 2. Назначение полей пакетов самоидентификации приведено ниже:

  • phy_ID — идентификатор узла;
  • L (Link Active) — признак активности LINK-уровня;
  • gap_cnt — счетчик для определения зазоров арбитража;
  • sp (PHY Speed) — скорость, поддерживаемая PHY-уровнем данного узла (может быть и выше, чем поддерживает уровень LINK): 00 — S100, 01 — S200, 10 — S400, 11 — скорость определяется по регистру PHY;
  • brdg (bridge) — поле зарезервировано для IEEE 1394.1 (мосты между шинами). В 1394 на этом месте было поле del (PHY Delay) — максимальная задержка повторителя: 00 — ≤ 144 нс, остальные значения зарезервированы;
  • c (contender) — претендент на роль диспетчера;
  • pwr (Power Class) — отношение к питанию;
  • p0…p6 (Port status, 2 бита на порт) — состояние порта: 11 — активен (или в состоянии Standby), подключен к c-узлу, 10 — активен (или в состоянии Standby), подключен к p-узлу, 01 — неактивен (запрещен, не подключен, приостановлен), 00 — нет порта;
  • i (Initiated reset) — признак того, что текущий сброс на шине вызвал этот узел;
  • m (More packets) — признак наличия последующих пакетов самоидентификации;
  • r — зарезервированные поля (на рисунке заштрихованы).

Форматы управляющих пакетов физического уровня приведены на рисунке 2.

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

  • для выборов нового корня (R = 1, T = 0) пакет посылается с указанием в поле root__ID идентификатора узла, которому надлежит стать корнем после грядущего сброса. Этот узел должен установить бит RHB (задержка при идентификации дерева), остальные узлы — его сбросить;
  • для оптимизации зазоров арбитража (R = 0, T = 1) пакет посылается с указанием phy_ID корневого узла. В пакете указывается значение gap_cnt, рассчитанное для текущей топологии.

Длительность зазора арбитража и зазора сброса арбитража определяется через значение gap_cnt по формулам:

TSubaction_gap=(29+16×gap_cnt)/98,304 (мкс), диапазон значений 0,3–10,6 мкс; TArb_reset_gap=(51+32×gap_cnt)/98,304 (мкс), диапазон значений 0,5–21 мкс. По сбросу, связанному с изменением топологии шины (и по включению питания), принимается максимальное значение gap_cnt=63. В зависимости от топологии шины диспетчер шины может вычислить минимально допустимое значение gap_cnt и сообщить его всем узлам. Это новое значение будет действовать до следующего изменения топологии (PHY способен определить, связан ли сброс с подключением/отключением устройства; если не связан — значение gap_cnt сохраняется).

Пакет Link_On является директивой включения питания LINK-уровня (и вышестоящих) узлу, адресованному полем phy_ID.

Расширенные физические пакеты были введены в 1394a для удаленного доступа к PHY-регистрам, посылки пробного пакета и пакета возобновления:

  • пробный пакет (Ping, рис. 3, а) заставляет узел с идентификатором phy_ID послать пакет(ы) самоидентификации. Диспетчер шины посылает эти пакеты всем узлам шины и измеряет время отклика, что позволяет ему рассчитать допустимое (минимальное) значение зазоров арбитража;
  • пакет удаленного доступа (Remote Access Packet, рис. 3, б) позволяет прочитать PHY-регистр удаленного узла. Пакет удаленного ответа (Remote Access Reply, рис. 3, в) возвращает считанные данные;
  • пакет удаленной команды (Remote Command Packet, рис. 3, г) позволяет подать команду узлу. В ответ на него узел через короткий интервал ack_gap посылает пакет подтверждения выполнения, в котором передается и текущее состояние (Remote Confirmation Packet, рис. 3, д);
  • пакет возобновления (Resume Packet, рис. 3, е) предназначен для инициирования возобновления работы всех приостановленных портов адресованного устройства или всех устройств (может передаваться с широковещательным адресом 3Fh). Этот пакет не предполагает подтверждений.

Форматы расширенных физических пакетов 1394a приведены на рис. 3, назначение полей приведено ниже:

  • phy_ID — идентификатор узла;
  • type — тип команды: 0 — пробный пакет, 1 — чтение одного из базовых регистров, 5 — чтение страничного регистра, 8 — удаленная команда, код команды в поле cmd, Ah — удаленное подтверждение, Fh — возобновление;
  • page — номер страницы;
  • port — номер порта;
  • reg — адрес регистра;
  • cmd — код удаленной команды: 0 — NOP (нет операции), 1 — передать уведомление TX_DISABLE_NOTIFY и запретить порт, 2 — инициировать приостановку порта (Suspend Port), 4 — сбросить биты отказа порта (Fault и Standby_Fault), 5 — разрешить порт, 6 — инициировать возобновление работы порта (Resume Port); 7 — расширенная команда (код в поле e_cmnd);
  • e_cmnd (в 1394b) — расширенная команда: 0 — NOP (нет операции), 1 — инициировать переход в Standby для партнера; 2 — инициировать выход из Standby для партнера, 3–7 — резерв;
  • s (standby_fault, 1394b) — состояние одноименного бита страницы состояния порта;
  • f (Fault) — состояние одноименного бита страницы состояния порта;
  • c (Connected) — состояние одноименного бита страницы состояния порта;
  • b (bias) — состояние одноименного бита страницы состояния порта;
  • d (disabled) — состояние одноименного бита страницы состояния порта;
  • ok — состояние команды: 1 — принята, 0 — отвергнута.

В IEEE 1394b для восстановления из состояния Standby используется пакет физического конфигурирования, который передается только от «дяди» к «племяннику» (рис. 4, а). При этом назначение полей становится следующим:

  • phy_ID — идентификатор узла (возможно, изменившийся);
  • R = 1 (игнорируется);
  • бит T содержит копию переменной gap_count_reset_disable «дядиного» узла. Переменная gap_count_reset_disable — запрет сброса счетчика зазора в исходное значение, устанавливается по приему пакета физического конфигурирования, задающего длительность зазора;
  • gap_cnt — новое значение зазора;
  • MLP — восстанавливаемое значение max_Legacy_path_speed;
  • L — признак наличия корня в локальном B-облаке;
  • B (B_bus) — признак отсутствия старых узлов на шине;
  • Q — копия бита R из R0 передающего узла;
  • P — копия бита PS из R0 передающего узла;
  • A — текущая асинхронная фаза: 1 — нечетная, 0 — четная;
  • N — признак сбросов шины, происшедших с момента перехода в состояние Standby.

Пакет тестирования на петли (Loop Test Packet, рис. 4, б), введенный в 1394b, содержит следующие поля:

  • m (mode) — режим: 0 — тест, 1 — идет процесс подключения;
  • G (Generation) — номер генерации, чередующиеся 0 и 1 указывают на изменение значения test_value
  • test_value — значение, используемое для сравнения переданного и принятого пакетов.

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