Организация и аттестация лнк www.oaorosek.ru. Рекомендуем дисковые массивы в Москве с доставкой по всей России на сайте cleverkey.ru.
Скорость последовательной передачи (1,5, 12 и 480 Мбит/с для LS, FS и HS соответственно) является только отправной точкой для определения реальной производительности обмена с конкретным устройством и всеми устройствами на шине в целом. Пропускная способность шины в целом определяется еще и соотношением накладных расходов и передаваемых полезных данных. Ниже рассматриваются источники накладных расходов, доля накладных расходов в общем трафике и загрузка шины транзакциями разных типов с разным размером блока данных. Для оценки возможной скорости обмена данными с конкретным устройством, подключенным к USB, отметим ряд моментов:
К накладным расходам при передаче по последовательной шине относятся:
Накладные расходы на каждую транзакцию зависят от ее типа; наиболее выгодные — изохронные (нет подтверждения), самые ресурсоемкие — управляющие трехстадийные. Число байт накладных расходов на каждую транзакцию, отнесенное к числу байт полезных данных для полной и высокой скорости, приведено в табл. 1 (низкую скорость в «соревнованиях» не рассматриваем). В таблице приведена и эффективность использования пропускной способности шины во время указанных транзакций. Большие накладные расходы на высокой скорости объясняются большим влиянием задержек распространения: на полной скорости время оборота «поглощает» до двух байт, а на высокой — до 90 (поскольку битовый интервал около 2 нс много меньше допустимых задержек распространения).
Скорость | 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 полоса высокоскоростной шины экономится за счет применения расщепленных транзакций (что требует существенного усложнения хабов).
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 |
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 |
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 байт.
Спецификация USB позволяет к одной шине подключать устройства, работающие на существенно различающихся скоростях передачи. Для их нормального сосуществования в плане распределения времени микрокадров для каждой из скоростей приняты соответствующие ограничения на максимальную длину поля данных пакета:
Приемопередатчики (да и соединительные кабели) низкоскоростных устройств не способны работать с сигналами полной скорости, на которой передаются все маркеры SOF и пакеты обмена с полноскоростными устройствами. Поэтому хаб USB не транслирует трафик на свои нисходящие порты, к которым подключены низкоскоростные устройства, до тех пор, пока хост-контроллер не передаст специального маркера — преамбулы низкоскоростного обмена (PRE). Этот маркер игнорируется всеми устройствами, кроме хабов. Пакетом-преамбулой хост-контроллер гарантирует, что следующий пакет будет им передан на низкой скорости. Этим пакетом будет маркер, определяющий тип транзакции с LS-устройством, а в транзакциях вывода — и пакет данных (перед которым требуется своя преамбула). Хаб разрешает транслировать на свой нисходящий порт с LS-устройством только один пакет, следующий за преамбулой; по концу пакета (увидев EOP на низкой скорости) он снова запрещает трансляцию. Чтобы хаб успел переключить режим своего приемопередатчика, между преамбулой и последующим пакетом вводится зазор (4 битовых интервала FS). Для ответа LS-устройства никаких преамбул не нужно — хабы способны прозрачно передавать восходящий трафик на обеих скоростях (LS и FS). Хост-контроллер, естественно, должен принимать пакеты и на FS, и на LS. Очевидно, что низкоскоростные транзакции расходуют время кадра весьма неэффективно, но в USB 1.x с этим мирятся ради возможности подключения дешевых устройств и упрощения хабов, которые являются просто повторителями сигналов. Заметим, что маркеры SOF не транслируются на низкоскоростные порты, так что изохронный обмен, для которого они необходимы, для LS-устройств невозможен и не поддерживается.
Эффективное сосуществование трех скоростей в USB 2.0 реализуется сложнее и обходится дороже. Во-первых, хост-контроллер USB 2.0 содержит фактически два контроллера — EHC, работающий только на высокой скорости, и контроллеркомпаньон (возможно, и не один) USB 1.x (UHC или OHC) для полной и низкой скорости. Корневой хаб может иметь равноправные порты, но в процессе автоконфигурирования, в зависимости от свойств подключенного к нему устройства (или хаба), каждый порт соединяется с соответствующим контроллером. Существуют системные платы с фиксированным распределением портов по контроллерам: часть портов отводится под USB 2.0 и подключена к EHC, часть — под USB 1.1 и подключена к UHC или OHC. Ради повышения пропускной способности применяют и индивидуальные контроллеры (UHC или OHC) для каждого порта USB 1.x.
Во-вторых, хабы USB 2.0 имеют более сложную структуру: кроме повторителя он имеет еще и транслятор транзакций. Когда восходящий и нисходящие порты хаба работают на одинаковой скорости (FS или HS), хаб работает в режиме повторителя. При этом транзакция с устройством, подключенным к хабу, занимает весь канал от хост-контроллера до устройства на все время своего выполнения. Если же к порту хаба USB 2.0, работающего на HS, подключается устройство или хаб 1.1, то применяются расщепленные транзакции. Здесь по части канала от хоста до хаба (его транслятора транзакций) обмен проходит на скорости HS, а между транслятором транзакций и устройством (или хабом) USB 1.x обмен идет уже на его «родной» скорости FS или LS. Эти обмены разнесены во времени, между ними могут вклиниваться любые транзакции на высокой скорости (в том числе и расщепленные). Таким образом, расщепленные транзакции позволяют не расходовать попусту пропускную способность высокоскоростной шины: транзакции с хабом на высокой скорости занимают в 40 (для FS) и даже в 320 (для LS) раз меньше времени шины, чем транзакции с самим целевым устройством. От старых (USB 1.x) устройств и хабов все тонкости расщепленных транзакций скрываются, чем и обеспечивается обратная совместимость.
Порт хаба имеет возможность аппаратно определить, какую скорость поддерживает подключенное устройство. Все HS-устройства по включению работают в режиме FS, и только после взаимного согласования с портом хаба перейдут в режим HS. Если HS-устройство подключается к хабу USB 1.x, который этого согласования не поддерживает, устройство останется в режиме FS, возможно, с усеченной функциональностью. В системе с USB 2.0 у устройства можно спросить (запросом дескрипторов), что изменится в его функциональности, если его подключить на другой скорости (изменив топологию соединений).
Вполне понятно, что устройство USB 2.0 сможет реализовать высокую скорость, только если по пути от него к хост-контроллеру (тоже 2.0) будут встречаться только хабы 2.0. Если это правило нарушить и между ним и контроллером 2.0 окажется старый хаб, то связь может быть установлена только в режиме FS. Если такая скорость устройство и клиентское ПО устроит (к примеру, для принтера и сканера это выльется только в большее время ожидания пользователя), то подключенное устройство работать будет, но появится сообщение о неоптимальной конфигурации соединений. По возможности ее (конфигурацию) следует исправить, благо переключения кабелей USB можно выполнять на ходу. Устройства и ПО, критичные к полосе пропускания шины, в неправильной конфигурации работать откажутся и категорично потребуют переключений. Если же хост-контроллер старый, то все преимущества USB 2.0 окажутся недоступными пользователю. В этом случае придется менять хост-контроллер (менять системную плату или приобретать PCI-карту контроллера USB 2.0).
Контроллер и хабы USB 2.0 позволяют повысить суммарную пропускную способность шины и для старых устройств. Если устройства FS подключать к разным портам хабов USB 2.0 (включая и корневой), то для них возможно повышение суммарной пропускной способности шины USB по сравнению с 12 Мбит/с во столько раз, сколько используется портов высокоскоростных хабов. Конечно, при этом суммарная пропускная способность для всех устройств, включая и HS-устройства, не может превышать общую пропускную способность HS-шины (нужно учитывать и накладные расходы). Кроме того, нужно учитывать архитектурные особенности хост-контроллера и хабов. Хост-контроллер может умножать пропускную способность FS/LS на число своих встроенных контроллеров USB 1.x. «Умножительные способности» хаба зависят от реализации его транслятора транзакций.
Изохронная передача данных связана с синхронизацией устройств, объединяемых в единую систему. Возьмем пример использования USB, когда к компьютеру подключен микрофон USB (источник данных) и колонки USB (приемник данных), и эти аудиоустройства связаны между собой через программный микшер (клиентское ПО). Каждый из этих компонентов может иметь собственные «понятия» о времени и синхронизации: микрофон, к примеру, может иметь частоту выборки 8 кГц и разрядность данных 1 байт (поток 64 Кбит/с), стереоколонки — 44,1 кГц и разрядность 2×2 байта (176,4 Кбит/с), а микшер может работать на частоте выборок 32 кГц. Микшер в этой системе является связующим элементом, и его источник синхронизации будем считать главным (master clock). Программный микшер обрабатывает данные пакетами, сеансы обработки выполняются регулярно с определенным периодом обслуживания (скажем, в 20 мс — частота 50 Гц). В микшере должны быть конверторы частот выборок (SRC — sample rate converter), которые из n входных выборок делают m выходных, используя интерполяцию («сочиняя» промежуточные выборки). Эти конверторы позволят микшеру принимать данные от микрофона с его частотой (в нашем случае 8000 выборок/с) и отсылать на колонки с другой (44 100 выборок/с). Естественным решением задачи обеспечения взаимодействия этих компонентов было бы установление между ними синхронного соединения, обеспечивающего передачу как потока данных, так и сигнала синхронизации. Универсальная шина USB, обеспечивающая одновременное подключения множества устройств, синхронного интерфейса устройствам не предоставляет. Синхронное соединение на USB основано на изохронных передачах. При этом приходится иметь дело со следующими частотами:
В системе без общего источника синхронизации между парами синхросигналов возможны отклонения следующих типов:
В цифровой системе передачи данных эти отклонения выливаются в то, что у источника или приемника может образовываться излишек или недостаток данных, колеблющийся или прогрессирующий во времени. Согласование скоростей выполняется с использованием механизма прямого объявления скорости (feed forward) или механизма обратной связи (feedback). Какой из механизмов используется, зависит от типа синхронизации, поддерживаемого изохронной конечной точкой данного устройства.
В USB по типу синхронизации источников или получателей данных с системой различают асинхронный, синхронный и адаптивный классы конечных точек, каждому из которых соответствует свой тип канала USB. Тип синхронизации задается битами [3:2] байта атрибутов в дескрипторе изохронной конечной точки:
Обратная связь, позволяющая согласовать значения частот устройств с частотой шины, может быть явной (explicit feedback) или неявной (implicit feedback). Механизм обратной связи рассмотрим на примере асинхронного приемника; для адаптивного источника механизм работает аналогично. Асинхронный приемник должен явным образом сообщать хост-контроллеру требуемую частоту передачи данных относительно частоты микрокадров Fs/Fb. Здесь предполагается, что одна выборка представляется одним байтом данных, для иного размера выборки требуется соответствующий пересчет (для устройства и его клиентского ПО), чтобы Fs/Fb представляло число байт, передаваемых за один микрокадр. Отношение Fs/Fb может оказаться не целым числом, тогда его целая часть определяет постоянный объем передач (размер поля данных) с данной конечной точкой в каждом микрокадре, а дробная часть — это накапливающийся остаток, который будет вызывать периодическое увеличение объема передач в некоторых микрокадрах. Отношение Fs/Fb в данном случае должен вычислять приемник на интервале усреднения не менее 1 с. Это отношение может меняться во времени (хотя бы из-за погрешности округления), так что хост должен периодически запрашивать у устройства отношение Fs/Fb, что и будет данными явной обратной связи (explicit feedback data).
Частота Fs задается с точностью до 1 Гц. Учитывая максимальный размер передачи в кадре (1023 байта) и частоту кадров (1 кГц), на полной скорости и для целой и для дробной части Fs/Fb достаточно по 10 бит. На высокой скорости в микрокадре может передаваться до 3072 байт — для целой части нужно 12 бит; частота микрокадров 8 кГц требует уже 13-битной дробной части. Исходя из этого, данные обратной связи представляются:
Заметим, что поток информации обратной связи всегда имеет направление, противоположное управляемому им потоку данных (на то эта связь и обратная). Данные явной обратной связи устройства берутся с конечной точки, имеющей такой же номер, что и у точки, используемой для основной передачи данных. Эта точка тоже изохронная, в ее дескрипторе установленные биты [5:4] байта атрибутов указывают на ее использование для обратной связи (у точки для передачи данных эти биты сброшены). В дескрипторе задается и интервал опроса (bInterval), с которым хост должен запрашивать данные обратной связи, чтобы своевременно отследить изменения. Это позволит хост-контроллеру постоянно корректировать число передаваемых байт за каждый микрокадр, не допуская переполнения или опустошения буфера устройства-приемника. Если с прошлого опроса изменений нет, точка может ответить на опрос пакетом данных нулевой длины.
Аналогично адаптивный источник должен воспринимать информацию обратной связи от хоста, чтобы за каждый (микро)кадр генерировать ровно столько данных, сколько требуется хост-контроллеру. Здесь тоже поток данных и поток обратной связи имеют встречные направления, так что для явной обратной связи используется конечная точка с таким же номером, что и у источника данных.
Для точек, требующих обратной связи, в некоторых случаях можно избежать выделения в устройстве специальной точки обратной связи, используя неявную обратную связь (implicit feedback). Это возможно, если в устройстве есть группа функционально связанных изохронных точек, работающих от общего генератора синхронизации, и среди них есть точка с направлением, противоположным точке, требующей обратной связи. Если требуется обратная связь для асинхронного приемника, то информация неявной обратной связи берется из скорости передачи данных синхронизированного с ним передатчика. Аналогично для адаптивного источника информация неявной обратной связи берется из скорости синхронизированного с ним приемника. Конечная точка данных, которую можно использовать как источник неявной обратной связи, в байте атрибутов. имеет значение бит [5:4] = 10. Связи по синхронизации в группе устанавливаются на основе номеров точек. Для того чтобы найти источник неявной обратной связи для какой-либо точки, ищется изохронная точка противоположного направления с таким же или меньшим номером, имеющая в байте атрибутов биты [5:4] = 10.
Шина USB позволяет устройству и хосту расставлять метки времени в непрерывном потоке изохронных передач для любой конечной точки. Для этого хост посылает устройству специальный управляющий запрос Synch Frame, в котором указывает номер кадра (ожидаемого в обозримом будущем) и номер конечной точки, к которой относится данная метка времени. Устройства и хост имеют общее представление о времени по номеру кадра, передаваемому в маркере SOF. Для HS-устройств подразумевается синхронизация по нулевому микрокадру указанного кадра. Метка времени может использоваться, например, для указания момента начала изохронной передачи (хост-контроллеру OHC в дескрипторе изохронной передачи указывается номер стартового кадра; для UHC драйвер сам размещает дескрипторы изохронных транзакций в списке кадров). Таким образом, устройство может заранее подготовиться к началу изохронного обмена.
Хост-контроллер USB имеет возможность подстройки частоты кадров. Например, в UHC имеется регистр SOF_Modify, через который ПО может изменять коэффициент деления частоты 12 МГц для получения частоты кадров 1 кГц в пределах ±0,5%. Естественно, хост-контроллер может подстроиться под частоту внутренней синхронизации только одного устройства.