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

Рассмотрим процесс управления шиной FireWire более подробно.

В отличие от USB шина IEEE 1394 не имеет заранее выделенного управляющего узла и функции такового после того как шина окажется сконфигурированной могут быть распределены между несколькими ус
В отличие от USB шина IEEE 1394 не имеет заранее выделенного управляющего узла и функции такового после того как шина окажется сконфигурированной могут быть распределены между несколькими устройствами на шине. Важно отметить то, что в случае отсутствия устройств,
способных выполнять некоторый функции сама шина останется работоспособной, но эти функции останутся недоступными. Так же важен то факт что любое подключение или отключение устройства способно разрешить или наоборот запретить выполнение той или иной функции каким-либо из подключенных устройств. Поэтому шина должна автоматически перераспределить функции управления ей самой между имеющимися устройствами. Все эти действия происходят в процессе самоинициализации шины. В общих чертах этот процесс состоит состоит из следующих этапов:
1. Bus initialization
2. Tree identification
3. Self identifivcation
Во время Bus initialization все устройства получают уведомления о том, что происходит процесс инициализации шины. При этом каждое устройство должно перейти в состояние idle state, шина ожидает в течении некоторого заранне предопределенного времени чтобы все устройства успели перейти в это состояние. В связи с тем что к шине могут быть подключены устройства, поддерживающие различные максимальные скорости весь процесс конфигурации использует только минимальную скорость передачи 100Mb/sec.
Tree identification состоит в том, автоматически выбирается устройство, которое будет выполнять роль корневого узла (root node). Подробнее этот процесс описан в следующих разделах. В картце его можно описать следующим образом: сначала устройства, которые имеют лишь только одно соединение с соседним устройством помечают это соединение как направленное в сторону корневого узла, а соответствующие им устройства ставшие их родительскими помечают соединение как "уже определенное". После чего оказывается (если собрана допустимая схема взаимного подключения устройств) что хотя бы у одного из найденных родительских узлов всего лишь одно соединение является "еще не определенным", тогда оно так же как дочерние узлы самого нижнего уровня на первом шаге помечает его как направленное в сторону корневого узла и весь процесс повторяется. В конце концов оказывается один или несколько устройств "кандидатов" на роль корневого узла. Из этих узлов выбирается один, который и станет корневым узлом шины FireWire. Понятно что если топология подключения устройств содержит кольца, то шина не сможет определить корневой узел и соответственно не будет работать.
Последний этап Self identifivcation состоит в том, что корневой узел, производит последовательны обход всех ветвей дерева и назначает каждому узлу (устройству) свой адрес, по которому будет происходить обращение к нему в процессе работы шины.
После завершения этих этапов из имеющихся устройств (в зависимости от наличия подключенных устройств, подходящих для выполнения той или иной функции) выбираются устройства, отвечающие за ту или иную часть управления шиной, а именно: 1 .Cycle Master - устройство отвечающее за начало изохронных транзакций через равные 125 миллисекундные интервалы времени.
2. Isochronous Resource Manager - устройство, которое отвечает за выделение по требованию других узлов изохронных каналов передачи с требуемой шириной полосы.
3. Bus Manager - устройство, отвечающее за поддержание актуальной схемы текущей топологии шины (для предоставления ее другим устройствам в случае необходимости), управляющее подачей питания к устройствам на шине, управляет резервированием полосы для асинхронной передачи.
Совершенно не обязательно что корневой узел будет сочетать в себе функции всех этих трех узлов.
Скорость передачи необходимая для работы различных устройств может быть различна (100Mb/sec,200Mb/sec,400Mb/sec и.т.д.) поэтому для достижения максимальной производительности при подключении устройств следует следить за тем, чтобы на пути передачи данных между двумя устройствами все промежуточные устройства поддерживали скорость передачи не меньше чем требуется для связи выбранных двух устройств. Понятно
так же что если речь идет об изохронной передаче, то в случае недостаточной пропускной способности промежуточных узлов такая передача работать не будет.
Управление питанием FireWire существенно сложнее чем в USB, устройства могут отдавать часть энергии своего внутреннего источника питания в шину для питания других устройств. При этом так как некоторые кабели могут не иметь проводов для передачи питающего напряжения - вся сеть устройств, подключенных к шине может распасться на несколько доменов с раздельным питанием.
Определение топологии шины USB
Передача любых пакетов в шине USB происходит только "по команде сверху" (устройство, получившее Token-пакет от хоста может передать данный в шину), поэтому даже для обнаружения таких асинхронных событий как подсоединение и отсоединение устройств и используется опрос центральным узлом (хостом, роль которого обычно выполняет PC) всех HUB-устройств имеющихся на шине. Для единообразия считается что хост содержит так называемый корневой HUB (root HUB), управление которым происходит примерно так же как и HUB-устройствами, подключенными снаружи.

Figure 5-5L USB Physical Bus Topology
Отличием корневого HUB, может быть в частности то, что он может логически объединять в себе корневые узлы нескольких шин USB (соответственно с максимально возможным числом подключаемых к каждой шине устройств равным 127). Для каждой такой шины назначение 7-битных адресов устройствам происходит раздельно. Однако с точки зперния прикладного ПО (которое редко интересуется точным значением физического адреса конкретного устройства) все это вместе может выглядеть как "одна большая USB
шина". Интересно отметить что, объединенных таким образом шины нередко даже поддерживают разные версии стандарта (USB1.0 и USB2.0), что не мешает прикладным программам и драйверам при необходимости воспринимать их как единое целое.
Рисунок (Топология, включающая USB1.0 и USB2.0 устройства)
Каждому вновь подключенному устройствухост назначает уникальный в рамках одной физической шины 7-битный адрес, в дальнейшем все пакеты, направляемые этому устройству будут идентифицироваться именно этим адресом.
Рассмотрим этот процесс назначения адресов подробнее: Обращение к каждому устройству происходит путем отправки и приема данных между хостом и логическими концевыми точками устройств, называемыми endpoint. Устройства могут содержать в себе несколько endpoint-ов. С каждым из них хост может установить логический канал связи pipe.
Каждый endpoint аналогичен телефонному аппарату, а каждый pipe телефонному проводу, с той лишь разницей, что каналы pipe не обязательно могут быть двунаправленными.
Сейчас для нас важно то, что каждое устройство всегда имеет двунаправленный канал с номером 0 (default pipe 0) и что именно он используется хостом в процессе конфигурирования устройств, в частности для назначения им адресов. В отличие от Fire Wire устройства не могут обмениваться друг с другом информацией напрямую, все логические каналы могут соединять устройства лишь с хостом. Поэтому процедура управления шиной для USB в целом выглядит существенно проще чем для ШЕЕ 1394.
Для обмена данными с управляющим каналом USB устройства (default pipe 0), хост использует специальную разновидность асинхронной передачи данных, называемую control transfer. Для нее характерно наличие строго определенного формата передаваемых в обе стороны данных. Для обнаружения подключения и отключения устройств к HUB-ам, образующим разветвления в топологии шины используется передача данных по прерыванияю (interrupt transfer), которая кратко обсуждалась во вводной части.
Каждое устройство (в том числе и HUB), которое хочет использовать interrupt transfer в процессе его конфигурирования хостом заявляет о наличии у него концевой точки типа interrupt endpoint и сообщает хосту как часто необходимо опрашивать. Таким образом каждое хост периодически опрашивает каждое HUB-устройство и если соответствующий interrupt endpoint возвращает через свой логический канал связи (interrupt pipe) сообщение о том, что произошли изменения в числе подключенных к данному HUB устройств, хост
автоматически считывает через default pipe 0 из внутренних регистров HUB информацию о том, что же именно произошло.
Если произошло подключение нового устройства, то следующим шагом является назначение адреса этого нового устройства. Вновь подключенное устройство поумолчанию имеет адрес 0, поэтому хост должен просто послать новому устройству через его default pipe О команду назначения адреса!
В случае отключения устройства хост помечает, использовавшийся этим устройствам, адрес как свободный и сообщает компонентам программного обеспечения, использовавшим данное устройство о его физическом отключении.
Поскольку к шине могут подключаться устройства, поддерживающие различные скорости передачи данных, следует обсудить подробнее, то как это отражается на процессе инициализации шины и назначения адресов.
В настоящее время устройства могут быть разделены на следующие типы: определенные спецификацией USB1.0 устройства low speed devices (1.5Mbit/sec) и full speed devices (12Mbit/sec), а так же USB2.0 устройства bight speed devices (480Mbit/sec). При чем HUB-ы всегда работают со скоростью full или high.
Первые два типа устройств различаются на уровне электрического протокола, в частности low speed устройства имеют резистор положительного смещения подключенным к сигнальному проводу "D-", в свою очередь full speed устройства имеют таковой подключенный к "D+". Что же касается hight speed устройств, в целях достижения аппаратной совместимости USB1.0 и USB2.0 в процессе инициализации шины они выглядит как full speed устройства. Однако в процессе конфигурирования такие устройства сообщают хосту, что способны работать на скорости 480Mbit/sec и впоследствии хост может использовать при обращении к ним именно эту скорость.
Для исключения возможности неправильной интерпретации более медленными устройствами пакетов, предназначенных для более быстрых устройств используется "принцип разделения по скоростям", состоящий в том, HUB-устройства, зная с какими максимальными скоростями могут работать устройства подключенный к их портам, передают пакеты относящиеся к той или иной скорости передачи только тем устройствам, для которых данная скорость является допустимой.
HUB-устройства, способные работать на скорости 480Mbit/sec используют ее для обмена пакетами с хостом, в то время как для подключенных к ним low/full speed устройств данные специально транслируются HUB-ом на болнн низкой скорости.
Для двух основный версий USB на электрическом уровне так же различается допустимая длительность таймслотов: длительность фрейма USB1.0 всегда составляет 1 миллисекунду, более быстрые USB2.0 устройства используют 125 микросекундный микрофрейм. Микрофреймы передаются только high speed устройствам.
Если какое-либо быстрое устройство окажется подключенным к хосту через медленный HUB, очевидно что оно как минимум не сможет использовать возможности передачи данных с высокой скоростью, этот факт следует принимать во внимание при использовании HUB-OB.
Благодаря тому, что в процессе инициализации шины устройства сообщают хосту уникальные для каждой модели устройств параметры VendorlD и ProductID (характеризующие соответственно производителя и саму модель устройство), ОС хоста имеет возможность произвести автоматический поиск драйвера, поддерживающего работу с данным типом устройства.
Ниже приводятся таблицы, описывающие структуры запросов передаваемых хостом через default pipe 0 а так же получаемых в ответ от устройств дескрипторов, общих для всех устройств, а так же специфичных для HUB-устройств.

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