Информационные технологииStfw.Ru 🔍
🕛

FireWire Tree Identification.

При передаче сигналов по шине IEEE 1394 все устройства используют механизм арбитража, реализованный на аппаратном уровне. Таким образом достигается разделение между ними проводного канала св
При передаче сигналов по шине IEEE 1394 все устройства используют механизм арбитража, реализованный на аппаратном уровне. Таким образом достигается разделение между ними проводного канала связи по времени. Сигнал строба посылается передающим устройством через пару проводов ТРА а получается принимающим через ТРВ (напомним что пары проводов меняются местами внутри кабеля), аналогично данные передаются через ТРВ и принимаются через ТРА. Сигналы так же участвуют в процессе арбитража, о котором более подробно рассказывается в главе о передаче сигналов.
Tree Identification использует два арбитражных сигнала:
1. Parent notify
2. Child notify
Сигнал Parent notify подается путем установки ТРА в состояние "О" а ТРВ в состояние с высоким импедансом "Z" (так же называемое idle state). В отличие от этого Child notify устанавливает ТРА в состояние "1".
Parent notify - служит для подачи узлом шины (устройством) соседнему узлу о том что он намерен считать соседний узел своим родительским. Соответственно узел подает Child notify соседнему если он ранее получил от него сигнал Parent notify и в результате переговоров с другими узлами у него нет сомнений что соседний узел следует считать своим дочерним узлом.
Рассмотрим подробнее всю процедуру, приводящую к инициализации топологии шины, под "проинициализированной топологией" понимается такое состояние шины, когда:
1. Шина может быть представлена (возможно не единственным способом) как дерево с единственной вершиной
2. Из всех возможных вариантов один узел выбран в качестве вершины (Root node), узел выбранный в качестве вершины знает о своей роли в дереве
3. Каждый вершина знает к какому из его портов подключен его родительский узел (узел расположенный ближе к вершине дерева), к каким портам подключены дочерние узлы и какие порты свободны.
Каждый узел, который обнаруживет только один единственный подключенный к нему соседний узел подает ему сигнал Parent notify и начинает ожидать от него подтверждения в виде сигнала Child notify. Поскольку используется аппартный арбитраж, то если 2 узла собрались одновременно послать друг другу сигнал, один из них "захватит" шину раньше другого и соответственно его опередит. Если какой-либо узел на шине обнаружит что все его соединенные с соседями порты кроме одного получили сигнал Parent notify, то этот узел может послать на эти порты подтверждение Child notify и устройства на этих портах станут его дочерними узлами!
Узлы у которых остался единственный не идентифицированный таким способом подключенный порт, могут попытаться послать через него соседнему устройству сигнал Parent notify. В тот момент когда один из таких сигнал захочет послать Parent notify возможно соседний узел захочет послать такой же сигнал навстречу. Но опять один из двух узлов окажется быстрее, подобно тому как это случается с героями вестернов. Аналогию с кино можно продлить еще дальше: когда два узла пытаются одновременно предъявить друг другу сигнал Parent notify, они пытаются установить уровни "О" для ТРА и "Z" для ТРВ (вспомним еще раз что пары меняются в кабеле местами), в результате входные компараторы обоих узлов увидят сигнал "О" как ТРА на так и на ТРВ. Обнаружив это условие (называемое ROOTCONTEND) оба узла могут случайным образом выбрать подождать ли им короткое время (около 0.25 микросекунд) или подождать чуть подольше (порядка 0.6 микросекунд)
перед тем как повторить попытку. Как тут не вспомнить Голливудское: "У тебя слишком большая фора, Билл!". При следующей попытке условие может повториться, однако после нескольких ходов своеобразной "Русской рулетки" всеже определится победитель.
Вообще следует заметить что в силу того, что шина FireWire может не иметь выделенного управляющего центра, каковым для USB является компьютер, порядок в котором в ней происходят е процессы передачи управляются сигналами арбитража и таймаутами. Часто именно длительность используемых различными узлами таймаутов определяет основные характеристики происходящих процессов (в частности разделения полосы пропускания между различными типами передачи - асинхронными и изохронными). Использование таймаутов для определения приоритетов передачи данных знакомо нам из описаний работы протоколов Ethernet, используемых сетевыми картами локальных компьютерных сетей.
Активное программное обеспечение одного из узлов (вероятно компьютера) может захотеть попытаться принудительно выбрать один из узлов, пригодных в данной топологии шины, на роль вершины дерева (root node). В этом случае имеется возможность послать этому узлу пакет физического уровня (PHY) с соответствующим флажком и устанвить внутри этого узла параметр root delay в диапазоне от 83 до 167 микросекунд. Тогда после программной переинициализации шины шансы этого узла стать вершиной существенно увеличиваются.
Если в процессе tree identification в течении интервала времени более 167 микросекунд узлы не могут пределить своих родителей - это означает что в топологии есть петли и в узлах, обнаруживших это условие обнаруживается флажок loop, тогда локальные приложения в этих узлах (будь те узлы видеокамерами или PC) могут сообщить пользователю о том, что шина не может быть сконфигурирована из за этих петель.
Рисунки иллюстрируют что при описаном способе определения топологии условие когда как минимум 2 узла не могут определить своих родителей возникают именно при наличии петель.
В случае если возникнет «кольцевая топология", как на рисунке:
узлы 1 и 4 так и не смогут послать сигнал «parent notify" до истечения таймаута, в результате процесс tree identification так и не сможет завершиться, а за ним в свою очередь и sefl identification. В итоге шина работать не сможет!

Также по теме:
Новые программы для Windows, Linux и Android.