Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шины.PCI,.USB.и.FireWire

.pdf
Скачиваний:
59
Добавлен:
19.03.2016
Размер:
6 Mб
Скачать

для скоростей FS/LS задержка, вводимая одним кабельным сегментом, по срав$ нению с битовым интервалом (bt) невелика. Исходя из этого в USB 1.0 для расче$ та допустимых задержек принимается следующая модель. На каждый кабельный сегмент отводится допустимая задержка 30 нс, на хаб — 40 нс. Таким образом, пять промежуточных хабов со своими кабелями вносят во время двойного обо$ рота задержку 700 нс, что на FS соответствует примерно 8,5 bt. Для FS$устрой$ ства задержка ответа не должна превышать 6,5 bt (а с учетом его кабеля — 7,5 bt). Исходя из этого спецификация предписывает передатчикам на FS использовать счетчик тайм$аута на 16–18 bt;

на скорости HS задержка в кабельном сегменте много больше битового интер$ вала, и в USB 2.0 модель расчета несколько иная. Здесь на каждый кабельный сегмент отводится по 26 нс, а на хаб — по 4 нс плюс 36 bt. Таким образом, дву$ кратное прохождение 6 кабельных сегментов (2×6×26 = 312 нс ≈ 150 bt) и пять хабов (2×5×4 = 40 нс ≈ 19 bt плюс 2×5×36 = 360 bt) занимает до 529 bt. Задержка ответа устройства допустима до 192 bt, а полная задержка с учетом кабелей и ха$ бов будет до 721 bt. Исходя из этого спецификация предписывает передатчи$ кам на HS использовать счетчик тайм$аута на 736–816 bt.

У хост$контроллера с каждой конечной точкой всех устройств связан свой счет$ чик ошибок, обнуляемый при планировании каждой транзакции. Этот счетчик считает все протокольные ошибки (включая и ошибки по тайм$ауту), и если число ошибок превышает порог (3), то канал с данной конечной точкой останавливает$ ся, о чем уведомляется его владелец (драйвер устройства или USBD). До превы$ шения порога хост отрабатывает ошибки для неизохронных передач попытками повтора транзакций, без уведомления клиентского ПО. Изохронные передачи не повторяются, об обнаружении ошибок хост сообщает сразу.

Подтверждения, управление потоком и сигнализация ошибок устройства

Для подтверждений приема, управления потоком и сигнализации ошибок исполь$ зуются пакеты квитирования (handshake packets). Из этих пакетов хост контрол лер может посылать устройству только пакет ACK, подтверждающий безошибоч$ ный прием пакета данных. Устройство для ответа хосту использует следующие пакеты квитирования:

ACK — подтверждение (положительное) успешного выполнения транзакции вывода или управления;

NAK — отрицательное подтверждение, является признаком неготовности уст$ ройства к выполнению данной транзакции (нет данных для передачи хосту, отсутствует место в буфере для приема, не завершена операция управления). Это является нормальным ответом, о котором не узнает никто, кроме хост$кон$ троллера, вынужденного повторить данную транзакцию позже. В транзакциях ввода ответ NAK устройство дает вместо пакета данных, если они не готовы;

STALL — сообщение о серьезной ошибке, которое означает, что без специально$ го программного вмешательства работа с данной конечной точкой становится

невозможной. Этот ответ доводится до сведения и драйвера USBD, отменяю$ щегодальнейшиетранзакциисэтойточкой,идоклиентскогодрайвера,откоторого иожидаетсяпрограммноевмешательство,разблокирующееточку.В управляющих транзакциях (Control) ответ STALL означает невыполнимость данного запроса; разблокирования точки при этом не требуется.

Управление потоком при выводе данных, основанное только на возможности отве$ та NAK в случае неготовности устройства, весьма неэффективно расходует про$ пускную способность шины: чтобы убедиться в неготовности устройства, по шине впустую передается большой пакет данных. В USB 2.0 этой неприятности в тран$ закциях Bulk OUT и Control избегают, применив протокол проб (Ping Protocol). Хост может опросить готовность устройства к приему пакета максимального размера, послав ему маркер$пробник PING. На этот маркер устройство может ответить под$ тверждением ACK (при готовности) или NAK (если не способно принять пакет максимального размера). Отрицательный ответ заставит хост повторить пробу позже, положительный разрешит ему выполнить транзакцию вывода данных. На транзакцию вывода после положительного ответа на пробу ответы устройства бо$ лее разнообразны:

ACK означает успешный прием и готовность принять следующий полноразмер$ ный пакет;

NYET означает успешный прием, но неготовность к следующему пакету;

NAK — неожиданный ответ (он противоречит успеху пробы), но он возможен, если устройство внезапно стало временно не готово.

Высокоскоростное устройство в дескрипторах конечных точек сообщает о возмож$ ной интенсивности посылок NAK: поле bInterval для конечных точек типа Bulk и Control указывает число микрокадров, приходящееся на один NAK (0 означает, что устройство никогда не ответит NAK’ом на транзакцию вывода).

Обеспечение надежной доставки

Передачи массивов, прерываний и управления обеспечивают надежную доставку данных. После успешного приема пакета приемник данных посылает подтвержде$ ние — пакет квитирования ACK. Если приемник данных обнаружил ошибку, пакет игнорируется и никакого ответа на него не посылается. Источник данных считает, что очередной пакет передан успешно, когда получает от приемника подтвержде$ ние ACK. Если подтверждение не приходит, то в следующей транзакции источник повторяет посылку того же пакета. Однако пакет подтверждения может быть по$ терян из$за помехи; чтобы в этом случае повторная посылка пакета приемником не воспринималась как следующая порция данных, пакеты данных нумеруются. Нумерация ведется по модулю 2 (1$битный номер): пакеты делятся на четные (с идентификатором DATA0) и нечетные (DATA1). Для каждой конечной точки (кроме изохронных) у хоста и в устройстве имеются биты переключатели (Toggle Bit), их начальные состояния тем или иным способом согласуются. В транзакци$ ях IN и OUT передаются и ожидаются пакеты данных с идентификаторами DATA0

или DATA1, соответствующими текущему состоянию этих бит. Приемник данных переключает свой бит в случае безошибочного приема данных с ожидаемым иден$ тификатором, источник данных — по приему подтверждения. Если приемник по$ лучает безошибочный пакет с неожидаемым идентификатором, он посылает под$ тверждение ACK, но данные пакета игнорирует, поскольку этот пакет — повторная посылка уже принятых данных.

Протоколы транзакций для различных типов передач

Транзакции для различных типов передач имеют протокольные различия, обус$ ловленные гарантированием или не гарантированием пропускной способности, времени отклика, надежности доставки и синхронизированности ввода и вывода. В зависимости от этих характеристик в транзакциях используются те или иные из вышеописанных протокольных механизмов. Отметим, что обнаружение ошибок передачи работает во всех транзакциях, так что данные, принятые с ошибкой, все$ гда игнорируются. Какие именно протокольные механизмы используются в теку$ щей транзакции, «знает» и хост$контроллер (по ранее полученному дескриптору конечной точки), и устройство USB, в котором эта конечная точка реализована.

Транзакции изохронных передач

Изохронные транзакции обеспечивают гарантированную скорость обмена, но не обеспечивают надежности доставки. По этой причине в протоколе отсутствуют подтверждения, поскольку повтор пакета приведет к сбою в планах доставки дан$ ных. Управление потоком, основанное на подтверждениях, отсутствует — устрой$ ство обязано выдерживать темп обмена, заявленный в дескрипторе изохронной конечной точки. Вопросы синхронизации источников и приемников изохронных данных подробнее рассмотрены в главе 11.

Транзакции изохронного вывода состоят из двух пакетов, посылаемых хост$кон$ троллером, — маркера OUT и пакета данных DATA. В транзакции ввода хост по$ сылает маркер IN, на который устройство отвечает пакетом данных, возможно, и с нулевой длиной поля данных (если нет готовых данных). Любой другой ответ устройства (как и «молчание») хостом расценивается как ошибка, приводящая к остановке данного канала.

При изохронном обмене имеется контроль достоверности (отбрасывание пакетов с ошибками) и целостности данных (обнаружение факта пропажи пакета). Конт$ роль целостности основан на строгой детерминированности темпа обмена — в со$ ответствии со своим дескриптором точка ожидает транзакцию с периодом 2bInterval–1 микрокадров. Для обычной изохронной конечной точки в микрокадре возможна лишь одна транзакция, и ошибка при приеме пакета выражается в отсутствии принятых данных в микрокадре, в котором они ожидаются. Таким образом, нумерация паке$ тов (переключатель Toggle Bit) не требуется. Полноскоростные устройства и хост$

контроллеры должны посылать пакеты только типа DATA01. Для широкополосных изохронных конечных точек (USB 2.0) в каждом микрокадре возможна передача до трех пакетов данных. Любой из этих пакетов может потеряться, и для обнару$ жения этой ситуации требуется нумерация пакетов внутри микрокадра. Для этой нумерации введено два новых типа пакетов данных: DATA2 и MDATA. Многооб$ разие типов пакетов кроме нумерации позволяет еще и информировать партнера по связи о своих планах на данный микрокадр. В транзакциях IN идентификато$ ром пакета устройство указывает, сколько еще пакетов оно собирается выдать в том же микрокадре, что позволяет хосту не делать лишних попыток ввода. Так, если в микрокадре передается один пакет, то это будет DATA0; если два — последова$ тельность будет DATA1, DATA0; три — DATA2, DATA1, DATA0. В транзакциях OUT для вывода не последнего пакета в микрокадре используется пакет MDATA (More Data), а идентификатор последнего пакета показывает, сколько было до него пере$ дано пакетов. Так, при одной транзакции вывода используется пакет DATA0, при двух — последовательность MDATA, DATA1, при трех — MDATA, MDATA, DATA2. Во всех транзакциях, кроме последней в микрокадре, должны использоваться па$ кеты максимального размера. Отметим, что между широкополосными транзакци$ ями в микрокадре могут вклиниваться другие транзакции.

Транзакции прерываний и передач массивов

Транзакции прерываний и передач массивов на шине выглядят одинаково. Здесь используются все механизмы управления потоком, надежной доставки и сигнали$ зации, описанные выше. Инициализация переключателей (Toggle Bit) в устрой$ стве и конечной точке контроля последовательности пакетов выполняется следу$ ющим образом:

для конечных точек передачи массивов любое связанное с ней событие конфи$ гурирования (установка конфигурации, интерфейса, обработка ошибки) уста$ навливает переключатели в положение DATA0. Подача нового запроса переда$ чи (IRP) инициализации переключателей не вызывает;

в транзакциях прерываний для обычных конечных точек используются только пакеты DATA0, поскольку для них в микрокадре возможна передача лишь од$ ного пакета, а период опроса известен;

в транзакциях прерываний для широкополосных конечных точек в микрокадре первым идет пакет данных DATA0, последующие пакеты в том же микрокадре идут с чередованием типов DATA1$DATA0.

Отметим, что по спецификациям USB транзакции прерываний могут использо$ ваться как для ввода данных, так и для их вывода по запросу. Правда, случаи выво$ да по прерываниям рассматриваются не так подробно, как это имеет место для бо$ лее привычного ввода. Ввод/вывод через транзакции Interrupt привлекателен возможностью получения и почти гарантированной скорости (не принимая в рас$ чет ошибок передачи), и гарантированной доставки.

1 Хотя, согласно спецификации, принимать должны как DATA0, так и DATA1.

Транзакции управляющих передач

Управляющие передачи предназначены для подачи команды (Write Control) или запроса (Read Control) устройству с индикацией результата выполнения. Переда$ чи состоят из двух или трех стадий и выполняются с помощью нескольких тран$ закций:

стадия установки, Setup Stage, предназначена для передачи управляющего со$ общения от хоста к устройству. Это сообщение описывает команду (запрос), которую должно выполнить устройство. Команда может быть связана с переда$ чей или приемом данных;

стадия передачи данных, Data Stage, предназначена для посылки дополнитель$ ной управляющей информации (в передаче Write Control) или приема инфор$ мации от устройства (в передаче Read Control). Эта стадия может отсутствовать, если не требуется ввод информации, а выводимая информация умещается в со$ общении стадии установки;

стадия передачи состояния, Status Stage, предназначена для уведомления хоста о факте и результате (успешно или нет) завершения исполнения команды.

Стадия установки выполняется в виде одной транзакции, начинающейся с маркера Setup. Далее хост посылает 8$байтный пакет данных (DATA0) с сообщением$зап$ росом, имеющим стандартную структуру (см. главу 13). Устройство подтверждает успешный прием этого пакета ответом ACK и приступает к отработке команды$ запроса. Отсутствие ответа заставит хост повторить запрос.

Стадия передачи данных (только для трехстадийных передач) выполняется хос$ том при помощи одной или нескольких транзакций IN (передача Read Control) или OUT (передача Write Control), обеспечивая управление потоком и надежную дос$ тавку с помощью повторов и чередования номеров. Первая транзакция фазы дан$ ных начинается с пакета DATA1.

Переход к стадии передачи состояния хост сигнализирует транзакцией, в которой направление передачи данных противоположно тому, что было на предыдущей стадии (Setup или DATA). Если стадии данных не было или выполнялась передача Write Control, хост выполняет транзакцию IN. Если выполнялась передача Read Control, хост выполняет транзакцию OUT (выводит пакет DATA1 с нулевой дли$ ной данных) или посылает маркер PING (в USB 2.0). На этой стадии интерес пред$ ставляет только ответ ПУ:

если устройство еще не завершило выполнение команды, оно будет отвечать пакетом NAK. Хост должен будет повторять эту транзакцию до получения ино$ го ответа;

если устройство успешно выполнило команду, оно на транзакцию IN ответит пакетом DATA1 нулевой длины, а на транзакцию OUT (или маркер PING) отве$ тит подтверждением ACK;

если устройство завершило выполнение команды, но с ошибкой, то оно ответит пакетом STALL. Для управляющих точек данный ответ является обычным, не вызывает блокировки канала и не требует специальных действий для продол$ жения работы.

До получения ответа, указывающего на завершение выполнения команды, хост не имеет права обращаться к данной конечной точке с новой командой. Таким обра$ зом обеспечивается сериализация выполнения команд: устройство не «захлебнет$ ся» потоком команд, которые оно не в состоянии быстро исполнить; вводимые дан$ ные будут отвечать состоянию устройства на момент подачи команды$запроса, которой могли предшествовать управляющие записи. Такая упорядоченность (син$ хронизация) потоков ввода и вывода для устройств USB непосредственно не обес$ печивается никакими другими типами передач. Управляющие передачи во всех устройствах USB поддерживают нулевые точки (EP0); поддержка управляющих передач для клиентских конечных точек бывает далеко не всегда.

Пропускная способность USB и изохронные передачи

Шина USB предназначена для подключения устройств с разными требованиями к пропускной способности интерфейса и задержкам доставки данных. Шина по$ зволяет передавать асинхронный трафик одновременно с изохронным, обеспечи$ вая возможность работы аудио$ и видеоустройств. В данной главе рассматривают$ ся вопросы пропускной способности шины и устройств для различных скоростей и типов передач, а также вопросы синхронизации при изохронных обменах.

Скорость обмена данными

Скорость последовательной передачи (1,5, 12 и 480 Мбит/с для LS, FS и HS соот$ ветственно) является только отправной точкой для определения реальной произ$ водительности обмена с конкретным устройством и всеми устройствами на шине в целом. Пропускная способность шины в целом определяется еще и соотношени$ ем накладных расходов и передаваемых полезных данных. Ниже рассматривают$ ся источники накладных расходов, доля накладных расходов в общем трафике и за$ грузка шины транзакциями разных типов с разным размером блока данных. Для оценки возможной скорости обмена данными с конкретным устройством, подклю$ ченным к USB, отметим ряд моментов:

c обычной конечной точкой периодических передач (изохронные и прерывания) в каждом n$м микрокадре производится лишь одна транзакция (n определяется параметром bInterval дескриптора конечной точки);

с широкополосной конечной точкой в микрокадре может производиться до трех транзакций. В табл. 11.4 широкополосные точки представлены размером поля данных 1024–3072 байт, и загрузка шины, которую они дают, относится ко всем (от 1 до 3) их транзакциям в микрокадре. Пропускная способность Vmax точки с периодической передачей определяется делением размера поля данных паке$

та максимальной длины Dmax на длительность периода обслуживания T: Vmax = = Dmax/T. Период обслуживания T определяется следующим образом:

для изохронных конечных точек T = Tk×2bInterval–1, где Tk — период посылки маркеров SOF (1 мс для полной скорости и 125 мкс для высокой); bInterval лежит в диапазоне 1–16. Таким образом, для FS период обслуживания мо$ жет быть в пределах 1–32768 мс, для HS — 0,125–4096 мс;

дляFS/LSконечныхточекпрерываний T =1×bInterval (мс), bIntervalлежит в диапазоне 1–255 (период обслуживания может быть в пределах 1–255 мс);

для HS$конечных точек прерываний T = 0,125×2bInterval–1 (мс); bInterval лежит в диапазоне 1–16, период обслуживания может быть в пределах 0,125– 4096 мс.

при передаче массивов число транзакций с конечной точкой в одном микрокад$ ре не определено, но его максимум не превосходит указанного в таблицах. Драй$ вер USB может использовать и простую политику обслуживания очередей, при которой для каждой точки в микрокадре будет выполняться не более одной транзакции. В каждом микрокадре при самом плотном изохронном потоке есть место для 1–2 транзакций передач массивов, но когда на такие передачи пре$ тендует множество устройств, средняя скорость передачи для каждого из них, очевидно, будет невысокой.

Накладные расходы и загрузка шины

К накладным расходам при передаче по последовательной шине относятся:

затраты на служебную информацию (пакеты маркеров и подтверждений, слу$ жебные поля пакетов данных);

затраты на вставку бит: 6 последовательных единиц в любых полях кадра вле$ кут за собой передачу по шине дополнительного вставленного бита. Доля этих накладных расходов может быть в пределах 0–15% от объема полезных данных. Из$за неопределенности этой доли данные затраты в нижеприведенных табли$ цах не учтены;

задержки распространения сигналов в кабелях и хабах;

внутренние задержки устройств при ответах на транзакции;

затраты на повторы транзакций в случае ошибок приема и неготовности уст$ ройства.

Накладные расходы на каждую транзакцию зависят от ее типа; наиболее выгод$ ные — изохронные (нет подтверждения), самые ресурсоемкие — управляющие трех$ стадийные. Число байт накладных расходов на каждую транзакцию, отнесенное к числу байт полезных данных для полной и высокой скорости, приведено в табл. 11.1 (низкую скорость в «соревнованиях» не рассматриваем). В таблице приведе$ на и эффективность использования пропускной способности шины во время ука$ занных транзакций. Большие накладные расходы на высокой скорости объясня$

ются большим влиянием задержек распространения: на полной скорости время оборота (см. главу 12) «поглощает» до двух байт, а на высокой — до 90 (поскольку битовый интервал около 2 нс много меньше допустимых задержек распростране$ ния).

Таблица 11.1. Накладные расходы на одну транзакцию и максимальная эффективность использования шины

Скорость

FS

HS

Тип

Накладные расходы/Размер данных — Эффективность

Изохронные

9/1023 — 99%

38/1024 — 96%

Прерывания

13/64 — 83%

55/1024 — 95%

Передача массивов

13/64 — 83%

55/512 — 90%

Управление (3 стадии)

45/64 — 59%

173/64 — 27%

 

 

 

Очевидно, что с точки зрения уменьшения доли накладных расходов шины выгод$ но использовать транзакции с пакетами данных максимальной длины. Однако та$ кие транзакции занимают слишком много времени в микрокадре, оставляя мало места для других. Теоретически за каждый кадр (1 мс) на полной скорости (12 Мбит/с) по шине может быть передано 12 000 бит (вместе со вставленными)

— 1,5 Кбайт, хотя реально это число меньше из$за задержек распространения и от$ ветов. На высокой скорости (480 Мбит/с) в микрокадре (125 мкс) передается 60 000 бит — 7,5 кбайт.

В табл. 11.2–11.4 приводятся параметры пропускной способности для разных ти$ пов передач в зависимости от размера поля данных. В этих таблицах приняты сле$ дующие обозначения: D — размер поля данных, VEP — достижимая скорость для конечной точки, KF — доля времени микрокадра, занимаемая транзакцией; VBUS — максимальная пропускная способность шины с пакетами указанной длины.

Оценить возможность сочетания различных транзакций в микрокадре можно сло$ жением занимаемых долей кадра (результат не должен превышать 100%). Из табл. 11.2, 11.3 и 11.4 видно, что низкоскоростные устройства при малой пропускной способности расходуют значительную часть времени шины. В USB 1.x с этим ми$ рятся (ради простоты), а в USB 2.0 полоса высокоскоростной шины экономится за счет применения расщепленных транзакций (что требует существенного услож$ нения хабов).

Таблица 11.2. Пропускная способность транзакций на низкой скорости

D

VEP,

KF

N

VBUS,

VEP,

KF

N

VBUS,

 

Кбайт/с

 

 

Кбайт/с

Кбайт/с

 

 

Кбайт/с

 

 

 

 

 

 

 

Управляющие передачи

 

Прерывания

 

 

1

1

26%

3

3

1

11%

9

9

2

2

27%

3

6

2

11%

8

16

 

 

 

 

 

 

 

 

 

D

VEP,

KF

N

VBUS,

VEP,

KF

N

VBUS,

 

Кбайт/с

 

 

Кбайт/с

Кбайт/с

 

 

Кбайт/с

 

 

 

 

 

 

 

Управляющие передачи

 

Прерывания

 

 

4

4

28%

3

12

4

12%

8

32

8

8

30%

3

24

8

14%

6

48

 

 

 

Таблица 11.3. Пропускная способность транзакций на полной скорости

 

 

 

 

 

 

 

 

 

 

 

D

VEP,

KF

N

VBUS,

VEP,

KF

N

VBUS,

 

Кбайт/с

 

 

Кбайт/с

Кбайт/с

 

 

Кбайт/с

 

 

 

 

 

Изохронные передачи

 

Передача массивов и прерывания

1

1

1%

150

150

1

1%

107

107

2

2

1%

136

272

2

1%

100

200

4

4

1%

115

460

4

1%

88

352

8

8

1%

88

704

8

1%

71

568

16

16

2%

60

960

16

2%

51

816

32

32

3%

36

1152

32

3%

33

1056

64

64

5%

20

1280

64

5%

19

1216

128

128

9%

10

1280

Не дост.

 

 

 

256

256

18%

5

1280

 

 

 

 

512

512

35%

2

1024

 

 

 

 

1023

1023

69%

1

1023

 

 

 

 

 

 

Таблица 11.4. Пропускная способность транзакций на высокой скорости

 

 

 

 

 

 

 

 

 

 

D

VEP,

KF

N

VBUS,

VEP,

KF

N

VBUS,

 

Кбайт/с

 

 

Кбайт/с

Кбайт/с

 

 

Кбайт/с

 

 

 

 

 

Изохронные передачи

 

Передача массивов и прерывания

1

8

1%

192

1536

8

1%

133

1064

2

16

1%

187

2992

16

1%

131

2096

4

32

1%

178

5696

32

1%

127

4064

8

64

1%

163

10432

64

1%

119

7616

16

128

1%

138

17664

128

1%

105

13440

32

256

1%

107

27392

256

1%

86

22016

64

512

1%

73

37376

512

2%

63

32256

128

1024

2%

45

46080

1024

2%

40

40960

256

2048

4%

25

51200

2048

4%

24

49152

512

4096

7%

13

53248

4096

8%

13

53248

продолжение