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

USB

USB

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

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

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

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

Таблица 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 кбайт.

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

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

 

Таблица 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
4 4 28% 3 12 4 12% 8 32
8 8 30% 3 24 8 14% 6 48

 

Таблица 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 123 9% 10 1280 не дост.   
256 256 18% 5 1280
512 512 35% 2 1024
1023 1023 69% 1 1023

 

Таблица 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
1024 8192 14% 7 57344 8192 14% 6 49152
20481 16384 28% 3 49152 16384 28% 3 49152
30721 25576 41% 2 49152 25576 42% 2 49152

1 — Для широкополосной конечной точки строки относятся к двум-трем транзакциям в микрокадре, в каждой из которых длина поля данных не превышает 1024 байт.



Приемопередатчики

Для передачи сигналов используются два провода D+ и D–. На каждой стороне интерфейса (порте хаба и подключенного устройства, см. рисунок ниже) имеются:

  • дифференциальный приемник, выход которого используется при приеме данных;
  • управляемый (отключаемый) дифференциальный FS/LS-передатчик — источник напряжения, позволяющий кроме дифференциального сигнала формировать и «линейный 0» (SE0), а также отключаться для обеспечения полудуплексного обмена;
  • линейные приемники, сообщающие текущее состояние каждого сигнального провода;
  • резисторы, подтягивающие уровни сигналов для обнаружения подключения устройства:
          — Rd1, Rd2 (15 кОм) у хаба;
          — Ruf (у FS/HS-устройства) или Rul (у LS-устройства);
  •  Дополнительные элементы для работы на высокой скорости (только для устройств HS):
          — коммутатор, отключающий резистор Ruf при выборе высокой скорости;
          — последовательные резисторы Rz1 и Rz2 на выходах дифференциального передатчика, обеспечивающие согласование с линией и нагрузку;
          — управляемый дифференциальный источник тока;
          — детектор амплитуды сигнала;
          — детектор отключения (только на нисходящих портах хабов).

Уровни сигналов передатчиков FS/LS в статическом режиме должны быть ниже 0,3 В (низкий уровень) или выше 2,8 В (высокий уровень). Приемники должны выдерживать входное напряжение в пределах –0,5...+3,8 В. Чувствительность дифференциальных приемников — 200 мВ при синфазном напряжении 0,8–2,5 В. Линейные приемники должны обладать гистерезисом с нижним порогом 0,8 В и верхним порогом 2 В.

Состояния устройств

Устройство USB должно поддерживать все состояния, определенные спецификацией:

  • «Подключено» (Attached State) — устройство подключено к хабу, но питание от шины не подано, устройство не может никак себя проявить и не управляемо хостом. Если питание от шины не используется (даже для SIE), то это состояние отсутствует;
  • «Запитано» (Powered State) — устройство подключено к порту и ему подано питание, устройство может заявить о себе, подтягивая резистором линию D+ или D- к шине питания. Это промежуточная ступенька к «дежурному» состоянию;
  • «Дежурное» состояние (Default State) по включению питания, подключению к порту или по сбросу от порта: устройство имеет нулевой адрес (USB Default Address) и отзывается только на обращения к EP0, потребляет от шины не более 100 мА;
  • «Адресовано» (Addressed State) — запросом Set_Address ему назначен уникальный адрес на шине (1–127), но отзывается только на обращения к EP0, потребляет от шины не более 100 мА;
  • «Сконфигурировано» (Configured State) — запросом Set_Configuration выбрана конфигурация, устройство отзывается на обращения ко всем точкам, описанным в данной конфигурации, и может потреблять от шины заявленный ток. При необходимости можно изменять альтернативные установки интерфесов запросом Set_Interface;
  • «Приостановлено» (Suspended Mode) — устройство подключено, запитано (хотя бы по минимуму), но приостановлено (прекращение активности порта, к которому оно подключено). Ему до приостановки мог быть назначен адрес и установлена конфигурация, однако хост не может использовать функции этого устройства, пока не будет выполнено возобновление (resume), которое вернет устройство в состояние, бывшее до приостановки. В этом состоянии устройство может подать сигнал удаленного пробуждения, если оно обладает этой возможностью и хост разрешил ее использовать.

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



Расщепление периодических транзакций

Периодические транзакции (изохронные и прерывания) критичны к времени выполнения, что накладывает отпечаток на их исполнение в расщепленном виде.

Изохронные транзакции на FS синхронизируются с кадрами (1 мс), в то время как на HS — с микрокадрами (125 мкс). Поскольку за время микрокадра на полной скорости может быть передано всего 187,5 байт данных, при расщеплении транзакций на стороне FS можно без ущерба равномерности уменьшить размер передаваемого пакета за один микрокадр (ради облегчения планирования загрузки микрокадров). Исходя из этого, одна транзакция FS, несущая до 1023 байт данных, фрагментируется — разбивается на 1–6 транзакций HS, несущих до 188 байт данных каждая.

Проще всего расщепляются транзакции изохронного вывода, поскольку здесь не требуется получения от устройства ответа или данных. Одна FS-транзакция изохронного вывода реализуется в виде цепочки из 1–6 HS-транзакций, в каждой из которых после маркера SS посылается маркер OUT, адресующийся к конечной точке целевого устройства, и пакет DATA0 с очередным фрагментом данных. Здесь (и только здесь) в маркере SS поля S (Start) и E (End) определяют местоположение пакета данных в полноскоростной транзакции: [S:E] = 10 — стартовый, [S:E] = 01 — последний, [S:E] = 00 — промежуточный, [S:E] = 11 — в пакете все данные транзакции.

Транслятор транзакций, успешно приняв стартовый пакет (с единичным битом S), может начинать транзакцию вывода, полагая, что последующие данные будут хостом доставлены своевременно. Отработав пакет с признаком последнего фрагмента, транслятор формирует нормальное окончание пакета (CRC код и EOP). Если промежуточные фрагменты приходят с ошибкой, транслятору придется «испортить» выводимый пакет, введя ошибку вставки бит. Таким образом, целевой приемник данные этой транзакции проигнорирует, как некорректные. Транслятор транзакций после приема фрагмента с ошибкой будет игнорировать все расщепленные транзакции, адресованные к данной конечной точке, у которых нет признака начального фрагмента. Последующую транзакцию со стартовым фрагментом транслятор будет отрабатывать как новую.

Транзакции изохронного ввода расщепляются несколько сложнее, поскольку требуют передачи к хосту данных, которые от целевого устройства будут получены с задержкой. Одна FS-транзакция изохронного ввода реализуется в виде цепочки, состоящей из транзакции запуска, содержащей маркер SS и маркер IN, и нескольких транзакций завершения, в каждой из которых за маркером CS следует тот же маркер IN и ожидается от хаба пакет с очередным фрагментом данных или пакет квитирования. Здесь также данные одной FS-транзакции разбиваются на 1–6 фрагментов (HS-транзакций). Данные всех фрагментов, кроме последнего, возвращаются пакетами MDATA, вынуждающими повторить транзакцию завершения в следующем микрокадре. Последний фрагмент приходит в пакете DATA0. Вместо пакета данных контроллер может ответить пакетом NYET, если к концу микрокадра он принял от целевого устройства менее трех байт данных. Хост в этом случае повторит транзакцию завершения в следующем микрокадре, если текущий микрокадр не является последним в кадре. Ответ NYET в последнем микрокадре кадра трактуется хостом как ошибка, по которой транзакцию следует завершить и сообщить об этом клиентскому драйверу. Если транслятор транзакций принимает от целевого устройства данные с ошибкой, он ответит пакетом ERR, что тоже вынудит хост прекратить транзакцию с сообщением об ошибке.

Транзакции прерываний имеют небольшой размер пакета (до 8 байт данных на LS и до 64 на FS), поэтому для них не нужна фрагментация вывода, а их выполнение укладывается в 1–2 микрокадра.

Транзакция запуска вывода по прерыванию (Interrupt OUT) состоит из последовательности маркеров SS и OUT, за которыми следует пакет данных DATA0 или DATA1. Транзакция завершения состоит из последовательности маркеров CS и OUT, на которую транслятор отвечает пакетом подтверждения:

  • пакеты ACK, NAK и STALL — это обычные ответы целевой конечной точки;
  • NYET — признак незавершенности транзакции транслятором; при этом хост должен повторить транзакцию завершения в следующем микрокадре. Если этот ответ получен в седьмом (последнем) микрокадре, данная ситуация считается ошибкой и обрабатывается обычным образом;
  • ERR — сигнализация об ошибке фазы подтверждения на вторичной шине.

Транзакция запуска ввода по прерыванию (InterruptIN) состоит из последовательности маркеров SS и IN. Данные от устройства хост получит в пакетах 1–2 транзакций завершения. Транзакция завершения состоит из последовательности маркеров CS и IN, на которую транслятор отвечает пакетом данных или подтверждения (NAK, NYET, STALL или ERR с вышеописанными значениями). Если транслятор принял еще не все данные от целевого устройства, они придут в пакете MDATA (если принято менее трех байт, транслятор пошлет NYET), на что хост должен повторить транзакцию завершения в следующем микрокадре. Последняя порция данных придет в пакете DATA0 или DATA1.

Расщепление непериодических транзакций

Непериодические транзакции (управление и передача массивов) не критичны к времени выполнения; малый размер блока данных (до 64 байт) позволяет их расщеплять, используя по одной транзакции запуска и завершения.

Транзакции запуска вывода состоит из последовательности маркеров SS и OUT для массивов (Bulk OUT) или SS и SETUP для управления (Сontrol), за которыми следует пакет данных DATA0 или DATA1. Транслятор подтверждает запуск ответом ACK, после которого хост должен выполнить транзакцию завершения, или отвергает его пакетом NAK, после которого хост должен повторить запуск. Транзакция завершения состоит из маркеров CS и OUT, на что транслятор отвечает подтверждениями ACK, NAK, STALL (это обычные ответы целевой конечной точки) или NYET — транзакция еще не завершена, хосту следует позже повторить транзакцию завершения.

Транзакции запуска ввода состоит из последовательности маркеров SS и IN, транслятор своим ответом подтверждает (ACK) или отвергает (NAK) запуск. Транзакция завершения состоит из маркеров CS и IN, на что транслятор отвечает пакетом данных (DATA0 или DATA1) или подтверждениями NAK, STALL или NYET с вышеописанным значением.

Хост-контроллер

Хост-контроллер является аппаратным посредником между устройствами USB и хостом. В настоящее время имеется три спецификации хост-контроллеров, каждой из которых соответствует свой комплект драйверов хост-части:

  • UHC (Universal Host Controller) — универсальный хост-контроллер для шины USB 1.x, разработанный Intel;
  • OHC (Open Host Controller) — «открытый» хост-контроллер для шины USB 1.x, разработанный Compaq, Microsoft и National Semiconductor;
  • EHC (Enhanced Host Controller) — расширенный хост-контроллер для поддержки высокой скорости шины USB 2.0.

Все эти варианты контроллеров выполняют одни и те же задачи: организуют физические транзакции с устройствами по шине USB в соответствии с описаниями (дескрипторами) этих транзакций, помещенными в системное ОЗУ драйвером хост-контроллера. При этом транзакции разных типов обрабатываются по-разному. В плане обработки ошибок проще всего устроены изохронные транзакции, где ошибки не требуют повторов. Транзакции передач с гарантированной доставкой в случае ошибок требуют повторов до победного конца или признания неудачи (исчерпания допустимого числа повторов). С точки зрения планирования следует выделить периодические транзакции, которые должны выполняться строго по графику, остальные — как получится, и их ставят в очереди. Из-за особенностей планирования и возможных повторов порядок завершения обработки дескрипторов транзакций (успешных или нет) будет отличаться от порядка их помещения в память1, что прибавляет забот хост-контроллеру и его драйверу. Три варианта хостконтроллеров решают эти задачи по-разному и используют разные стратегии планирования транзакций, что иллюстрирует таблицы ниже.

 План распределения времени в кa)адре: a — UHC; б — OHC; в — EHC (в микрокадре)

а)

SOF Изохронные транзакции Транзакции прерываний Транзакции управления Транзакции передач массивов Свободное время

б)

SOF Непереодические транзакции (Т1) Переодические транзакции Непереодические транзакци

В)

SOF Непереодические транзакци Переодические транзакции

 



Подкатегории