Шина IEEE 1394 — FireWire

Базовый механизм арбитража

Узел, желающий передать пакет, посылает вверх по дереву сигнал запроса арбитража TX_REQUEST. Узел имеет право на передачу пакета запроса или ответа, когда он получит «сверху» сигнал предоставления RX_GRANT. Если несколько узлов запрашивают шину одновременно, то доступ получит то устройство, которое пошлет сигнал арбитража раньше. Запрос арбитража узел имеет право послать, лишь наблюдая состояние покоя шины (Bus Idle) в течение некоторого промежутка времени — зазора арбитража. Таким образом, более приоритетным окажется узел, использующий для задержки запроса арбитража меньшее значение зазора и находящийся ближе к корню — его запрос дойдет быстрее. В связи с этим мастер циклов должен находится в корне дерева, чтобы иметь приоритет посылки пакетов начала цикла по отношению к асинхронным пакетам других узлов. Для шины IEEE 1394 различают две длительности зазора:

  • изохронный зазор (Isochronous gap), длительность которого лежит в пределах 40–50 нс;
  • зазор асинхронных транзакций (subaction gap) — более длительный (0,3–10,6 мкс), величина которого подбирается так, чтобы не слишком затягивать арбитраж и не конфликтовать с задержками посылок пакетов квитирования. Длительность зазора должна быть не меньше, чем время оборота по шине для самой удаленной друг от друга пары узлов.

Немедленный и изохронный арбитраж используют одинаковую (самую маленькую) длительность зазора — 40–50 нс. Однако это не вызывает проблем с приоритетом изохронных пакетов: немедленный арбитраж выполняется только для пакетовквитанций, которыми узлы отвечают только на асинхронные пакеты запросов-ответов. Пакеты запросов-ответов требуют приоритетного или справедливого арбитража, так что они могут передаваться только после всех изохронных пакетов данного цикла. Следовательно, немедленный арбитраж никогда не происходит в изохронной части цикла.

Справедливый арбитраж для асинхронных передач предохраняет шину и ее узлы от возможных перегрузок. Для этого на шине устанавливается интервал справедливости (fairness interval) — период времени, в течение которого узел имеет право выполнить лишь одну субакцию — послать один асинхронный пакет запроса или ответа. Длительность интервала справедливости зависит от числа активных узлов (у которых включен уровень LINK) и от загруженности шины изохронным трафиком. Справедливость обеспечивает PHY, у которого имеется специальный бит разрешения арбитража. Физический уровень будет посылать запрос арбитража только при установленном бите разрешения. Этот бит изначально устанавливается после самоидентификации устройств. Далее, как только физический уровень (по запросу от канального) посылает запрос арбитража, бит сбрасывается. Повторно он установится только после того, как PHY будет видеть шину в покое в течение интервала arb_reset_gap — зазора сброса арбитража (по умолчанию 21 мкс). Этот интервал гораздо больше изохронного и асинхронного зазора; такое длительное «молчание» всех устройств означает, что у них больше нет асинхронных пакетов, разрешенных к передаче в этом интервале справедливости. Таким образом, интервал справедливости — это время между соседними зазорами сброса арбитража, и его длительность неопределенна (см. рисунок).

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