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

Шина IEEE 1394 — FireWire

Состояние Standby

В новом энергосберегающем состоянии порта и узла — Standby, введенном в 1394b, PHY не обеспечивает взаимодействия своего узла с шиной. В режим Standby порт узла переходит по получении пакета Standby с идентификатором данного узла. Этот пакет посылает узел, управляющий энергопотреблением. Переход произойдет только при соблюдении ряда условий:

  • порт является единственным подключенным портом данного узла и работает в бета-режиме;
  • узел не является корневым;
  • LINK-уровень узла поддерживает бета-режим;
  • порту не запрещен переход в состояние Standby (флаг enable_standby = 1).

Узел, порт которого перешел в состояние Standby, получает статус «племянника» (nephew node). Этот узел теряет представление о событиях, происходящих на шине (даже таких, как сброс). Этот узел и сам не может стать инициатором сброса (запись в его регистр ibr игнорируется). «Интересы племянника» на шине представляет его «дядя» (uncle node) — узел-партнер его по связи. Порт «дяди», обращенный к «племяннику», также переводится в состояние Standby (по приему символа STANDBY, который посылает «племянник»). Если теперь произойдет сброс на шине, то «дядя» будет посылать пакеты самоидентификации не только за себя, но и за своего «племянника». Переход порта узла-«племянника» в нормальное рабочее состояние происходит либо по запросу шины от своего LINK-уровня, либо по пробуждающему тональному сигналу, принимаемому по линии от «дяди». При этом нормальную работу узел может начинать только после получения от «дяди» пакета восстановления Restore, содержащего идентификатор узла-племянника (он мог поменяться из-за сброса на шине), значение зазора (gap_count), указание фазы шины и уведомление о происшедшем сбросе (если он был). Этот пакет LINK-уровню не передается; в ответ на него порт должен выполнить действия в соответствии с функциями BOSS-арбитража (как на последний пакет в субакции). Многопортовый узел, который вернулся из состояния Standby по событию подключения к его другому порту, должен в этом случае послать маркер BUS_RESET, чтобы шина отработала подключение новых узлов.

Для того чтобы представлять интересы «племянников», узел должен сохранять пакеты самоидентификации, принимаемые им по каждому из портов. Тогда, получив символ STANDBY от какого-либо своего порта, он сможет представлять интересы своего появившегося «племянника». «Дядя» должен восстановить нормальную работу «племянника» по получении пакета Restore со своим идентификатором, в котором указан номер порта восстанавливаемого «племянника». По этому событию «дядя» посылает в данный порт тональный сигнал восстановления. Если восстановление инициируется «племянником», то он посылает тональный сигнал восстановления. Сгенерировав или получив тональный сигнал, «дядя» и «племянник» устанавливают взаимную синхронизацию своих портов. Затем «дядя», запросив и выиграв арбитраж на шине, посылает в порт «племянника» пакет восстановления (в остальные порты и в свой LINK он посылает нуль-пакеты). Пакет восстановления завершается символом DATA_END, по которому «племянник» становится «боссом» и переводит свой порт в активное состояние.