link280 link281 link282 link283 link284 link285 link286 link287 link288 link289 link290 link291 link292 link293 link294 link295 link296 link297 link298 link299 link300 link301 link302 link303 link304 link305 link306 link307 link308 link309 link310 link311 link312 link313 link314 link315 link316 link317 link318 link319 link320 link321 link322 link323 link324 link325 link326 link327 link328 link329 link330 link331 link332 link333 link334 link335 link336 link337 link338 link339 link340 link341 link342 link343 link344 link345 link346 link347 link348 link349 link350 link351 link352 link353 link354 link355 link356 link357 link358 link359 link360 link361 link362 link363 link364 link365 link366 link367 link368 link369 link370 link371 link372 link373 link374 link375 link376 link377 link378 link379 link380 link381 link382 link383 link384 link385 link386 link387 link388 link389 link390 link391 link392 link393 link394 link395 link396 link397 link398 link399 link400 link401 link402 link403 link404 link405 link406 link407 link408 link409 link410 link411 link412 link413 link414 link415 link416 link417 link418 link419

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

Шина 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 — значение, используемое для сравнения переданного и принятого пакетов.