25 лет назад сфера применения USB-интерфейса и его перспективы определялись очень четко: это был простой и недорогой способ подключения низкоскоростных устройств. Более требовательные устройства, по замыслу производителей, должны были использовать совсем другие разработки — например, FireWire. Однако суровая реальность внесла свои коррективы — о чем мы уже писали и повторяться не будем. Главное, что вот уже много лет именно USB является стандартным периферийным интерфейсом «ближнего действия», массово применимым не только в компьютерах, но и вообще в быту. Впрочем, за эти годы грань между «компьютерной» и «бытовой» техникой стала очень размытой, так что и не удивительно , сообщает  ixbt.com.

Интерфейс "USB". Виды и устройство. Характеристики и особенности

Разумеется, «сегодняшний» стандарт USB давно уже не тот, что был 25 лет назад — сменилось несколько версий спецификаций, радикально выросла пропускная способность, даже логика работы контроллеров стала совсем другой. При этом сильным местом интерфейса всегда считалось сохранение совместимости между версиями — иногда это достигалось не самыми тривиальными способами, но все-таки достигалось. Но разобраться, как всё будет работать, в итоге не всегда просто. Особенно в последние годы: если в «нулевые» было понятно, что USB 2.0 — «круче», чем 1.1, но хуже, чем 3.0, то сейчас... Не всякий человек, не заглядывая в справочник, сможет сказать, что́ лучше хотя бы потенциально: USB 3.2 Gen1 или USB 3.1 Gen2? А ведь конкретный режим работы будет определяться не одним устройством (точнее, поддерживаемыми им спецификациями), а двумя. Да еще и кабель в некоторых случаях может внести свои коррективы.

Принципиальных сложностей, впрочем, нет — просто не всегда есть тот самый «справочник», в который можно быстро заглянуть и разобраться. Во многом такая ситуация сложилась потому, что интерфейс, как уже было сказано, развивался до современного состояния более 20 лет, устройства выпускались все эти годы, подходы к маркировке менялись. Попытки же USB Implementers Forum навести в них хоть какой-то порядок, естественно, относятся лишь к тому, что производится прямо сейчас. И всё равно иногда вместо порядка получается усиление путаницы, как в примере выше с USB 3.2 Gen1 и USB 3.1 Gen2. Если знать, как и что примерно устроено и как развивалось — разобраться несложно, но для этого придется углубиться в историю. Впрочем, это и само по себе интересно.

Спецификации и скоростные режимы

Первое, что стоит помнить: на самом деле, ни контроллеры, ни конечные устройства не оперируют номерами спецификаций, а работают в одном из режимов, различающихся не только скоростью, но иногда и логикой работы. Для сохранения совместимости обычно поддерживают несколько таких режимов, откуда и возникает иногда путаница, поскольку «внутри» они очень разные (хотя от пользователя разработчики это всегда старались скрыть, апеллируя к универсальности интерфейса). При этом каждая последующая спецификация не отменяла, а дополняла предыдущие, полностью включая их в себя. Полная документация, соответственно, постоянно увеличивалась в объеме, информация же для массового потребителя давалась (и дается) в сокращенном виде. В итоге, например, для некоторых покупателей в свое время было шоком, что соответствующее спецификациям USB 2.0 устройство при подключении к соответствующему спецификациям USB 2.0 контроллеру на практике работало не лучше и не хуже аналогичной связки в рамках USB 1.1. С технической точки зрения это нормально. Но неожиданно, если ограничиваться лишь краткими выдержками из стандарта, согласно которым скорость USB 2.0 может достигать 480 Мбит/с, а скорость USB 1.1 ограничена 12 Мбит/с. Именно эти цифры всегда использовались в рекламе, хотя в случае скорости 480 Мбит/с речь шла лишь о старшем из трех скоростных режимов USB 2.0, отсутствующем в предыдущих версиях. А вот два младших и в них, и в последующих версиях USB абсолютно одинаковые — и одинаково же работают.

На данный момент количество режимов работы USB-устройств достигло уже восьми, а пройди инициатива Intel об объединении USB и Thunderbolt — было бы под полтора десятка. Однако получилось, как в анекдоте про похороны преферансиста: и двух восьми хватило. Для ясности внесем их в таблицу, указав также максимальную пропускную способность и версию спецификаций, начиная с которой поддержка такого режима изначально появилась.

Режимы работы USB
РежимПиковая пропускная способностьСтартовая версия спецификаций
Low Speed 1,5 Мбит/с USB 1.1
Full Speed 12 Мбит/с USB 1.1
High Speed 480 Мбит/с USB 2.0
SuperSpeed 5Gbps / USB3 Gen1 5 Гбит/с USB 3.0
SuperSpeed 10Gbps / USB3 Gen2 10 Гбит/с USB 3.1
SuperSpeed 20Gbps / USB3 Gen2×2 20 Гбит/с USB 3.2
USB4 20Gbps / USB4 Gen2×2 20 Гбит/с USB4
USB4 40Gbps / USB4 Gen3×2 40 Гбит/с USB4


На первый взгляд всё выглядит просто и логично: интерфейс рос и развивался, попутно наращивая скорость. С точки зрения пользователя, так и есть. Однако если копнуть поглубже, оказывается, что USB — это не что-то простое и единое с линейным развитием, а конгломерат разных контроллеров, реализующих разные скоростные режимы и работающих под управлением разных программных протоколов. Точнее, так оно было до внедрения USB 3.0, где решено было покончить с бардаком как в организации, так и в системе наименований. Но благими намерениями известно куда дорога вымощена — в одном порядок навели, в другом беспорядок создали. Причем в ближайшее время нас ожидает новый виток, поскольку USB4 готовится к массовому выходу на рынок. И в рамках его внедрения разработчики опять попытались навести порядок, но в чем-то степень энтропии только увеличили. Как такое могло получиться? А вот это и разберем подробнее.

Low Speed и Full Speed: основа всех основ

В принципе, эти два скоростных режима были всегда — даже когда USB еще в формальном смысле не было: разделение было проведено в предварительных спецификациях 0.7. Окончательная версия 1.0 появилась в январе 1996 года, первые попытки ее аппаратной реализации показали, что не такая уж она и «окончательная», поэтому в середине 1998 года в стандарте появились необходимые исправления и дополнения. В итоге первой массовой версией стала 1.1, формально появившаяся в сентябре 1998 года. Почему «формально»? А потому что на практике именно ее поддерживали и более ранние продукты разных производителей. Например, чипсет i430TX, вышедший на рынок в феврале 1997 года, уже полностью соответствовал спецификациям USB 1.1. USB 1.0 же поддерживалась более ранним i430VX, но поддерживалась так, что добиться нормальной работы всех устройств на платах с ним никому не удавалось. Впрочем, в конце 90-х это больших проблем не создавало, поскольку и устройств-то тогда практически не было, а многие пользователи компьютеров даже два-три года спустя считали эти разъемы бесполезными. Зато можно было ни о каких режимах и стандартах не упоминать, поскольку тогда это было еще «просто» USB. По планам, таким интерфейс и должен был остаться. Для мышей, клавиатур, игровой периферии, модемов для телефонных линий и прочего, что в 90-е и ранее обходилось COM-портом или специализированными примитивными интерфейсами, то есть низкоскоростной периферии, предназначался режим Low Speed. Принтерам и прочему оборудованию, использующему параллельный порт (дешевые сетевые адаптеры, некоторые накопители и т. п.), то есть среднескоростным (по меркам того времени) устройствам полагался USB Full Speed. «Полная» скорость USB, таким образом, должна была навсегда (или очень надолго) остаться равной 12 Мбит/с, а для высокоскоростной периферии предполагалось использование FireWire.

 

Если интерфейс предполагается использовать только для подключения периферийных устройств, причем только низкоскоростных и относительно простых, его следует сделать простым и недорогим, да и устройства максимально удешевить. Для последнего, в частности, было реализовано и питание подключаемых устройств — 5 В 500 мА максимум, то есть 2,5 Вт. Этого как раз хватало на многие простые устройства, а для «непростых» разрабатывалась FireWire или сохранялись схемы с отдельными блоками питания и т. п.

 

Логически шина представляла собой типичное дерево, корнем которого является хост-контроллер. Согласно изначальным предположениям (позднее тоже модифицированным), в системе он может быть только один на всех. Это специальное устройство — все другие являются подчиненными и никакой самостоятельностью не отличаются. Делятся они на хабы и оконечные устройства. Хаб вообще никаким интеллектом не обладает — это всего лишь разветвитель портов: делит один входящий на два или более исходящих. Пассивный хаб точно так же делит на всех полученное электропитание, активный же, имея собственный БП, на каждом исходящем порту обеспечивает стандартные 5 В 500 мА. На самом верху иерархии находится корневой хаб, подключенный непосредственно к хост-контроллеру. К его исходящим портам подключаются либо хабы более низкого уровня, либо конечные устройства. И так далее по нисходящей, пока не будет исчерпан лимит либо на 127 устройств (128-м является сам хост), либо на пять соединенных подряд хабов. Такая организация сразу же накладывает несколько серьезных ограничений:

  • В сети не может быть двух хостов, что автоматически запрещает простое использование USB для связи двух компьютеров.
  • Устройство может быть либо хостом (и тогда его нельзя подключить к компьютеру — следствие первого пункта), либо конечным устройством (и тогда оно не может послужить «корнем» другой сети — например, к первым КПК нельзя было подключить накопитель или принтер).
  • Скорость контроллера делится на все подключенные устройства, и если одно из них «забьет» всю шину, остальным ничего не достанется. Решена была эта проблема крайне неэлегантно: никакое устройство так поступить не может никогда. Даже если оно никому не мешает.

Третий пункт не совсем очевиден, так что расшифруем его. Как уже было сказано выше, все устройства являются подчиненными и самостоятельно инициировать обмен данными не могут. А для того, чтобы они вообще могли работать, контроллер постоянно их опрашивает по кругу — своеобразная «карусель». Разделение по времени является самой простой схемой организации одновременной работы нескольких устройств на общей шине. Самая простая — значит, и самая дешевая, но, к сожалению, и самая неоптимальная тоже. Именно поэтому в большинстве шинных протоколов от нее отказались, введя прерывания, приоритеты и прочее. А вот USB в конце 90-х получила именно такую архаичную схему, унаследованную еще из 60-х годов прошлого века. Собственно, для низкоскоростных устройств ничего большего и не нужно. Однако как только на шине появляется скоростное устройство, начинаются проблемы. Допустим, мы подключили внешний винчестер и пытаемся записать на него 1 ГБ информации. Это долгая операция, поэтому если допустить захват шины одним устройством, оно работало бы с максимальной скоростью, но все остальные были бы заморожены — механизма прерываний-то нет. А кому нужен компьютер, на котором во время копирования информации мышь не двигается и клавиатура символы теряет? Для решения данной проблемы как раз используется «карусель», однако она же вызывает другие проблемы: в этом случае мы не можем писать данные на винчестер с максимальной скоростью, поскольку ему будет доставаться лишь часть времени. Остальное время тратится на то, чтобы контроллер опрашивал прочие устройства (а он вынужден делать это постоянно). И чем устройств на шине больше, тем больше времени будет уходить впустую, даже если все остальные устройства на самом деле не используются — дело в том, что понять это можно, только опросив их, поскольку сами они «безголосые».

 

В мобильных компьютерах, кстати, такая организация приводила еще к одной проблеме, связанной с экономией энергии: никакое устройство не может само уйти в «глубокий сон». Если оно так сделает, то контроллер сочтет, что его больше нет на шине, и отключит его. Соответственно, какая-то часть любого USB-устройства должна всегда бодрствовать и сообщать «я здесь» на каждом обороте «карусели». Ну а потери производительности будут в любом компьютере. Почему так было сделано? Опять же: для младших скоростных режимов ничего более сложного и не требовалось, там потери на опрос устройств невелики, поскольку невелики и скорости. И поскольку старшие скоростные режимы изначально не планировались, шину решено было удешевить. Потом это, конечно, аукнулось.

Аналогичная ситуация и с полудуплексным режимом работы. Дело в том, что в каждый момент времени контроллер может либо передавать, либо получать данные. Проблема в том, что большинство реальных операций требует делать и то, и другое. Например, все операции с носителями информации в конечном итоге сводятся к чтению и записи отдельных секторов. А чтобы прочитать сектор, нам надо передать накопителю его номер. На практике это выглядит так: включаемся в режим записи, передаем номер сектора, переходим в режим чтения — упс, а временной квант-то для винчестера уже и кончился. Пора опрашивать клавиатуру и другие устройства, а запрошенный сектор данных мы получим только на следующем обороте «карусели».

Нельзя сказать, что разработчики об этих проблемах не знали изначально — знали, но не придавали им значения. Да и не нужно это было, поскольку планировалось лишь два небыстрых режима. Причем два их было только потому, что для многих планируемых потребителей шины, таких как мыши или клавиатуры, и 12 Мбит/с было много. «Карусель» для среднескоростных устройств вращается с частотой 1 кГц, что гарантированно не позволяет иметь время доступа меньше 1 мс. Чтобы низкоскоростные устройства совсем уж сильно не мешали всем остальным, официально им положено «требовать к себе внимания» не чаще, чем на одном обороте «карусели» из десяти. На практике в Windows (да и во многих других системах) используется делитель 8, который в свое время еще и удавалось легко изменить, на базе чего работали различные методики «разгона» USB-мышей. Разгон прекратился, когда производители тех же мышей решили побороться с данной практикой для улучшения продаж более дорогих игровых моделей: таковые, как правило, рассчитаны на Full Speed, так что в тюнинге не нуждаются (хоть это и противоречит изначальным задумкам разработчиков USB), а дешевым моделям поддерживаемую частоту опроса ограничили жестко на уровне контроллера. Главное же — что при скоростях 12 или, тем более, 1,5 Мбит/с накладные расходы на опрос устройств или переключение направления передачи по шине невелики, а более сложные механизмы удорожили бы шину.

И, кстати, потребовали бы как минимум использовать более дорогие кабели. Это тоже оказалось одной из проблем стандарта FireWire, но не USB, где удалось ограничиться всего четырьмя проводами: одна пара для питания и одна для передачи данных, сразу всех — и пользовательских, и команд со стороны контроллера и т. п. Из-за всего этого реальная скорость передачи информации по USB оказывалась более низкой, чем некоторые пользователи предполагали, разделив 12 на 8 и получив 1,5 МБ/с. На деле для кодирования одного байта использовалось 10 бит, а накладные расходы при выбранной схеме работы составляли примерно 20%, так что на практике «оригинальная» версия USB обеспечивает скорость порядка 1 МБ/с. Естественно, это касается только Full Speed, но заботиться о совместимости между первыми двумя режимами не нужно: они появились одновременно — и используются до сих пор, поскольку многие USB-устройства с тех пор практически не изменились. Зато со временем понадобилось подключать новые устройства, поддержка которых изначально не предполагалась.

High Speed: отменяем ограничения, добавляем проблемы

Старт FireWire в те же годы был неудачным по большому количеству причин. Стандарту USB повезло намного больше: его поддержку интегрировали во все чипсеты, порты начали встречаться во всех новых ПК, а возможности оказались достаточными для производителей периферии. В том числе такой периферии, использование которой в рамках «экосистемы» USB изначально не предполагалось — например, именно тогда начался «расцвет» USB-флэшек, радикально нарушающих изначальное правило подключения полноскоростных устройств «только кабелем». Да и производители более емких и быстрых накопителей «устали ждать» распространения FireWire — и начали внедрять USB. И не только они.

В таких условиях у разработчиков FireWire и USB (разделить их сложно: фактически составы «1394 Trade Association» и «USB Implementers Forum» в те годы пересекались почти полностью) было два пути: либо продолжать попытки продавить FireWire, либо... перестать сдерживать USB. Разброд и шатания кончились выбором второго варианта — это сделать было проще, поскольку интерфейс уже пошел в массы. Соответственно, решено было модифицировать USB, но с сохранением полной совместимости с первыми версиями.

 

Формально это вылилось в добавление третьего режима High Speed, пропускная способность в котором могла достигать 480 Мбит/с. Скачок сразу в 40 раз — большая редкость по меркам индустрии, однако упрощало его то, что изначальные версии были ограничены искусственно. Правда, добавление высокоскоростного режима потребовало усложнить логику его работы — а вот тут уже выбранный изначально вариант с полудуплексной передачей данных по однобитному интерфейсу начал мешать. К тому же, возможны были проблемы совместимости со старыми устройствами, на новшества не рассчитанными. Поэтому от изначальной концепции немного отошли: количество корневых хабов в системе виртуально удвоилось, хотя оба подключались к одним и тем же портам. Но «используемый» в каждый момент времени хаб зависел от того, какое устройство подключалось с другой стороны, что определялось на этапе его инициализации. Если устройство было старое, то в дело вступал тот же UHCI- или OHCI-контроллер (реализующий протоколы для работы с режимами Low/Full Speed — проще говоря, соответствующий спецификациям USB 1.1), что и ранее. Соответственно, для таких устройств вообще ничего не менялось. А вот «новые» быстрые устройства логически подключались к EHCI-контроллеру с измененным протоколом работы. Изменен он был не радикально — в частности, так и осталась та же «карусель» с разделением времени. Только для быстрых устройств она была своей собственной и вращалась в восемь раз быстрее: частота опроса составила уже 8 кГц. Кроме того, было реализовано такое новшество, как изохронный режим работы — потоковая передача данных на заранее «оговоренной» контроллером и устройством стабильной скорости. Этот режим был нужен в мультимедийных приложениях и полностью подрывал позиции FireWire в области цифрового видео. Фактически этой шине удалось плотно закрепиться только в камерах с кассетами Mini-DV, но в 2004 году свет увидела Panasonic NV-GS400 (а позднее еще несколько моделей этого производителя), снабженная и USB 2.0, и FireWire. Для подключения к компьютеру оба интерфейса могли использоваться одинаково, благо типовой поток Mini-DV составлял 25 Мбит/с, что в рамках изохронного режима USB High Speed реализовать было несложно.

Даже если не рассматривать усовершенствования логики работы, скоростные возможности USB улучшились радикально. Сохранение архаичной схемы с разделением времени и старой схемы кодирования, конечно, их ограничивало, но за счет увеличения «сырой» пропускной способности и уменьшения задержек «отмасштабировать» скорость удалось практически линейно. Было 12 Мбит/с, реально обеспечивающие 1 МБ/с, а стало 480 Мбит/с в теории и до 40 МБ/с на практике. Правда, это всё равно было именно «до»: получить 40 МБ/с в конкретной связке «контроллер—устройство» удавалось далеко не всегда, поскольку при таких скоростях многое уже начинало зависеть от конкретных реализаций. И не всегда «виновниками» более низких скоростей оказывались конечные устройства: многие USB-контроллеры (в том числе и встроенные в массовые чипсеты Intel, например) больше ≈30 МБ/с на практике «не тянули». А это, естественно, вызывало возмущение пользователей, решивших, что 480 Мбит/с — это 60 МБ/с, и никак иначе.

К этому добавились и первые выкрутасы со стороны производителей. Как уже было сказано, формально спецификации USB 2.0 включали в себя все три скоростных режима. В итоге на рынке быстро появились устройства с гордой маркировкой «USB 2.0 Full Speed». По форме правильно — по существу издевательство, поскольку в данном случае речь не шла не только о 60 или 30 МБ/с: скорость, естественно, была равна тому же 1 МБ/с, что и ранее.

 

Еще одну проблему добавили... кабели. Стараясь сохранить полную совместимость, разработчики не учли, что на рынке к тому моменту был завал кабелей, не отвечающих требованиям стандарта. Это тоже являлось следствием экономии на спичках: USB 1.x со своими искусственно ограниченными скоростями относилась к сечению проводников крайне лояльно. В итоге вместо 3-5 метров, «обещанных» стандартом, на практике для устройств, имеющих собственное питание, можно было собрать «сложную конструкцию» из удлинителей до 10 м. И всё работало. А при внедрении USB 2.0 работать перестало — даже в случае одного кабеля длиной пару метров. Оказалось, что ходовые (на тот момент) недорогие кабели 28 AWG «не добивают» и до метра, а дорогие «качественные» 26 AWG позволяют получить порядка полутора метров. В общем, совместимость нашли, но осадочек остался.

Тем не менее, в целом спецификации USB 2.0 оказались существенным, логичным и вообще нужным шагом вперед. К тому же, идея использования «виртуальных» контроллеров в 2000-е позволила решить еще одну «родовую» проблему USB: низкую скорость в рамках всей шины. Например, возьмем контроллер USB 2.0, встроенный в последние южные мосты Intel без поддержки USB 3.0 (пятое и шестое семейства). Обычно его называют именно контроллером, поддерживающим 14 портов USB 2.0. На практике чуть сложнее: «контроллер» состоит из семи (!) UHCI-контроллеров (поддерживающих режимы Low Speed и Full Speed) с семью же двухпортовыми корневыми хабами и двух EHCI-контроллеров (поддерживающих только High Speed) с двумя корневыми хабами на восемь и шесть портов соответственно. Абсолютно не похоже на изначальный проект однокорневого дерева на 127 оконечных устройств, зато работает. Низко- и среднескоростные контроллеры крутятся в своих «песочницах», не вмешиваясь в жизнь высокоскоростных. Да и через последние может одновременно и независимо друг от друга работать пара устройств — главное подключить их к двум разным корневым хабам. Суммарная пиковая пропускная способность шины в такой реализации составляет 2 × 480 + 7 × 12 = 1044 Мбит/с, то есть более одного гигабита в секунду — будь контроллер действительно единым (и единственным), получить такое было бы невозможно. В своей линейке южных мостов тех лет компания AMD пошла еще дальше, реализовав три EHCI-контроллера, семь UHCI и еще один восьмой UHCI совсем «в сторонке» от них, так что суммарно удалось превысить 1,5 Гбит/с.

Живуч миф о том, что 480 Мбит/с для USB 2.0 — это именно суммарный пиковый предел на все устройства (для других версий стандарта — соответственно). Но к действительности этот миф отношения не имеет: ограничена пропускная способность на один корневой хаб, а их стало много, хотя четверть века назад действительно предполагался только один. Другой вопрос, что это именно суммарная пропускная способность, да еще и пиковая, а между тем возникла необходимость повысить скорость, доступную одному устройству. Это было сделано около 15 лет назад.

SuperSpeed: совершенно новый USB, каким его никто не видел

Мощность компьютерных систем продолжала расти, параллельно усложнялись и периферийные устройства. Назрела необходимость существенного увеличения пропускной способности интерфейса USB, благо он уже стал основным проводным «ближнего действия». Сделать это, сохраняя архаичную систему с корневыми хабами, разделением времени и полудуплексным режимом передачи данных, было невозможно — даже пытаться никто не стал. Для сохранения совместимости в очередной раз использовалась виртуализация контроллеров, которые стали уже достаточно сложными, но остались недорогими благодаря общему прогрессу в микроэлектронике.

Что изменилось в SuperSpeed-режиме? Да практически всё. Во-первых, этот режим не полудуплексный, а дуалсимплексный с выделенным каналом управления — контроллер может принимать и отправлять данные одновременно, то есть исчезли задержки на переключение направлений шины. Иногда даже говорят о полном дуплексе, чего, вообще-то, нет: полнодуплексный канал на 5 Гбит/с позволил бы передавать по 5 Гбит/с в обоих направлениях одновременно, а на деле это суммарная пропускная способность. Впрочем, она даже в теории на порядок выше, чем 480 Мбит/с режима High Speed, а на практике можно «выжать» и еще немного «сверху».

Во-вторых, устройства, работающие в режиме SuperSpeed, не нужно постоянно опрашивать: для них (но только для них) реализован полноценный механизм прерываний! Следовательно, и этот источник задержек устранен. Более того, в процессе работы устанавливается соединение между хостом и конкретным устройством, то есть фактически реализуется соединение «точка—точка», как у FireWire. Кстати, позаботились и о полноценном управлении питанием: в новой схеме совершенно официально появились статусы Idle, Sleep и Suspend. Таким образом, SuperSpeed-устройства вовсе не обязаны постоянно «болтаться» на шине, когда нужно и когда не нужно. В общем, это не дополнительный скоростной режим старой шины — это совершенно новый и несовместимый со старым интерфейс. Он даже аппаратно совместим со старой версией интерфейса лишь ограниченно: версия USB 2.0 обходилась одной парой проводов для передачи данных в обоих направлениях, а в 3.х нужно минимум две. Вот две и добавили, но сохранив на месте «старую» пару. Именно она используется на этапе инициализации, а далее (если и устройство, и контроллер поддерживают соответствующие режимы и соединены соответствующим кабелем) уже «включается» SS-режим с отдельными линиями (в обе стороны) для передачи данных. Потоки команд и прочей служебной информации им не мешают, используя «унаследованную» пару кабелей — в частности поэтому пропускную способность интерфейса новый режим использует более полно.

 

Но удвоение количества проводов в кабеле, естественно, потребовало переработать разъемы. Это удалось сделать с частичным сохранением совместимости. Точнее, основной для хост-систем «прямоугольный» разъем Type-A внешне не изменился, просто контактов в нескольких местах добавилось. А вот разъемы для подключения устройств пришлось переделывать существенно, так что старые-то кабели к новым разъемам подходят, но новые к старым — нет. Это сильно мешало лет пять назад: приходилось либо использовать один кабель с разъемом Micro-USB и для телефона, и для внешнего SSD, но на скоростях USB 2.0, либо получать полную скорость с несколькими кабелями. Позднее эта проблема была решена элегантным образом, но «унаследованной» технике это решение никак не помогло.

Соединение «точка—точка» позволило упорядочить и работу со старыми устройствами в старых режимах. Сделать это было необходимо, поскольку программные протоколы UHCI/OHCI (до 12 Мбит/с) и EHCI (480 Мбит/с) разрабатывались еще в конце 90-х и были рассчитаны на 32-разрядную адресацию в соответствующем режиме работы процессора. Но к концу нулевых вовсю шел уже переход на 64-разрядные системы, так что, по-хорошему, весь пласт «унаследованного» ПО нужно было либо переписать, либо просто упразднить. Выбран был второй вариант: всё необходимое низкоскоростным режимам было внесено в «суперскоростной» протокол XHCI. В итоге появилась возможность ограничиться одним XHCI-контроллером на все порты, причем вне зависимости от их скоростных режимов. Для унаследованных устройств ничего не менялось: они продолжали считать, что крутятся на своей карусели, и получали старые же команды. Только карусель «крутилась» уже всего для одного потребителя, организовываясь для него контроллером на соответствующем порту. А новые устройства на скоростных портах работали уже в новом режиме, полностью реализуя свои возможности. Программный драйвер можно было оставить один — только для XHCI.

Казалось бы, что может пойти не так? Но кое-что пошло. Первое время производителей интересовала совместимость со старыми системами, так что ограничиваться поддержкой только XHCI они не стали. В первых чипсетах Intel с поддержкой USB 3.0 (седьмой серии) XHCI-контроллер добавился к старым UHCI и EHCI. Минимальной поддерживаемой операционной системой для XHCI была выбрана Windows 7, так что пользователи Windows XP и Vista поддержку SuperSpeed-режима не получили. А вот работоспособность режимов USB 2.0 сохранилась, поскольку эти драйверы уже были написаны ранее. Потом были восьмая и девятая серии чипсетов Intel, где количество скоростных портов увеличили с четырех до шести, но организацию виртуального USB-контроллера не трогали. А в 2015 году вместе со Skylake появились чипсеты сотой серии, с полной реализацией задумок USB-форума: все 14 портов (в старших чипсетах) обслуживал один единственный XHCI-контроллер. Что это дало пользователям Windows 7 и более новых версий ОС? Например, ускорение работы режима High Speed: старый EHCI-контроллер (не менявшийся с нулевых) обеспечивал реальную скорость работы до 28-30 МБ/с, а новый XHCI с тем же устройством мог «разогнаться» и до 40 МБ/с. Учитывая, что подобные устройства до сих пор еще встречаются и даже выпускаются, а в прошлом десятилетии их было намного больше, это было ценное приобретение. Но оно работало только для пользователей Windows 7/8/10. Причем установка Windows 7 «с нуля» немного затруднилась: в оригинальном дистрибутиве нужного XHCI-драйвера нет, так что если не интегрировать его заранее, то на этапе установки USB-периферия работать не может. А под управлением более старых версий Windows заставить ее работать можно только нетривиальными методами. Таковые, правда, позднее появились, поскольку некоторые любители Windows XP оказались очень упорными, но, естественно, массовому пользователю подобные костыли и бубны в принципе не подходили.

В свое время это была нашумевшая проблема, но со временем ее, как и все подобные, забыли. А вот на реальные побочные эффекты внедрения SuperSpeed не все сначала обратили внимание. Основное: ранее мы имели пропускную способность на контроллер, а по новому стилю — на порт. Казалось бы, это серьезное улучшение: ведь устройства больше не дерутся друг с другом, и каждое может получить свои 5 Гбит/с гарантированно. Да. Но нет. Проблема никуда не делась — просто она «переехала» на другую сторону контроллера. Теперь значение стал иметь интерфейс его подключения к системе. Во времена USB 2.0 пачку портов можно было добавить простой и недорогой PCI-платой, но с USB 3.0 такие фокусы не проходят: даже пара SuperSpeed-портов первой версии уже выходят за рамки возможностей этой шины. И вообще, для полноценной реализации хотя бы одного такого порта нужна как минимум одна линия PCIe 2.0 — на момент принятия спецификаций USB 3.0 самого быстрого интерфейса, которого во многих компьютерах еще просто не было. Разумеется, реальные устройства зачастую сами работают на более низких скоростях, да и теорию массового обслуживания никто не отменял, так что первые контроллеры USB 3.0 с двумя и даже четырьмя портами подключались к системе при помощи PCIe 2.0 x1 и умудрялись сносно работать даже на PCIe 1.1 x1, но понятно было, что со временем проблемы будут нарастать.

 

И даже внутри чипсетов порты USB перестали скороговоркой перечисляться в числе прочих, а начали, наряду с Ethernet, SATA и PCIe, конкурировать за внутренние ресурсы. Именно поэтому, например, в той же сотой серии чипсетов Intel было до 14 USB-портов, лишь до 10 из которых скоростные. На деле у производителей плат был выбор: либо четыре USB 2.0 и 10 USB 3.0, либо 8 USB 2.0, но 6 USB 3.0 плюс дополнительные четыре линии PCIe 3.0 (по отдельности или как дополнительный слот PCIe x4, например).

Зато период с 2008 по 2013 год оказался непривычно спокойным в плане прозрачности наименований. Рубя совместимость со старым миром, было принято решение, что сертификацию на соответствие USB 3.0 получат только SuperSpeed-устройства, а все более медленные так и останутся жить под зонтиком USB 2.0. Короче говоря, «USB 3.0 Full Speed» в принципе невозможен. Это прекрасно и удивительно — и очень необычно для разработчиков. Но те немного позднее вернулись в привычное для себя состояние.

USB 3.1 и USB 3.2: продолжение плясок на граблях

Основная революция, как видим, случилась в рамках USB 3.0, дальше концепцию можно было только улучшать. Например, раз у нас всё равно есть порты разного сорта и от этого никуда не деться, то кроме медленных и скоростных портов могут появиться и «сверхскоростные». На практике благодаря прогрессу микроэлектроники за пять лет стало возможно «упаковывать» в стандартный канал не 5, а 10 Гбит/с. И появился режим SuperSpeed+, который решено было в окончательном виде переименовать в SuperSpeed 10Gbps, а старый SuperSpeed облагородить довеском «5Gbps». Фантазии разработчикам было не занимать, вот только пользователям она была непонятна. Они предпочли бы ориентироваться просто по номерам версий, но такой возможности им не дали. USB 3.1 полностью вобрал в себя USB 3.0 с переименованием: «старые» устройства теперь можно было сертифицировать как USB 3.1 Gen1, а новые «сверхскоростные» — как USB 3.1 Gen2. Ко вторым, правда, первое время подключать было практически нечего — разве что внешние массивы RAID0 из пары SSD, при помощи которых новые возможности и демонстрировались. Чтобы решить эту проблему, смежникам потребовалось лет пять.

Прочих дополнений в рамках стандарта было немало, но производительности они не касались. Зато был предложен компактный симметричный разъем Type-C, постепенно становящийся всё более актуальным в качестве универсального. Впрочем, разъемы — это отдельная тема, к которой мы еще вернемся. А применительно к режимам работы просто скажем, что разъем с двумя наборами контактов (что необходимо для симметричности подключения) очень пригодился разработчикам в 2017 году, когда была принята спецификация USB 3.2 и с ней новые «сдвоенные» скоростные режимы Gen1×2 и Gen2×2. Первый был мертворожденным, поскольку обеспечивал лишь те же 10 Гбит/с, что и простой Gen2, но более сложным и дорогим образом. А вот второй до последнего времени был максимумом для USB: целых 20 Гбит/с.

Но не добавить ложку дегтя разработчики не могли, заодно переименовав предыдущие режимы еще раз. То есть давно выпущенное на рынок устройство USB 3.0 таковым и остается. Позднее начали продаваться устройства, сертифицированные как USB 3.1 Gen1, но и это на самом деле тоже USB 3.0. После 2017 года появляются устройства USB 3.2 Gen1 — и это тоже просто USB 3.0. А современному хост-контроллеру USB 3.2 никто не запрещает ограничиваться лишь портами Gen1 — и чем это отличается от USB 3.0 (2008 года)? Правильно: ничем. Нет разницы между Понтием и Пилатом. И быть не может — поскольку это один и тот же человек. Что еще смешнее, контроллер-то может быть «нормальным», но производитель конкретной платы для экономии может разводить его порты исключительно как Gen1. Такое сплошь и рядом встречается на бюджетных моделях плат для AMD AM4 на чипсетах А320, В450 и даже В550, хотя даже первый из этих чипсетов может обеспечить системе один порт Gen2, а последний позволяет получить до шести таких портов (два «своих» и еще четыре при использовании процессоров Ryzen 3000 и выше). И ладно еще бюджетные платы, выбираемые самостоятельно — но в таком же положении можно до сих пор оказаться, покупая ноутбук или моноблок на самых что ни на есть современных платформах типа Intel Tiger Lake.

В общем, подытоживая, после революции USB 3.0 началась эволюция еще лет на 10. Она принесла немало полезного: появились новые скоростные режимы, удобные разъемы, переработан подход к питанию устройств (что тоже заслуживает отдельного разговора) и многое другое. Однако в плане бардака переименования оказались еще хуже, чем «включения» двадцатилетней давности. Вот если бы по мановению волшебной USB-палочки переименовывались и все существующие к определенному моменту устройства… Но такой палочки, естественно, не существует. Да, USB 3.2 позволяет устройствам работать в четыре раза быстрее, чем USB 3.0 — но соответствующим устройствам и на соответствующих портах. Даже создание нового универсального разъема оказалось полезно лишь для разработки новых устройств, а для старых остался всё тот же зоопарк кабелей и переходников, накопившийся за 20 лет.

Заранее пугающий USB4

В рамках новейшей (принята летом 2019 года) версии спецификаций тоже планировалась революция: объединение протоколов USB и Thunderbolt. Однако объединение осталось опциональным, так что сохраняется достигнутое еще во времена USB 3.1 и Thunderbolt 3 положение: разъемы одинаковые, а совместимость возможна, но не обязательна.

При этом некоторые особенности Thunderbolt все-таки стали обязательными — в частности, все хост-порты USB4 обязаны поддерживать вывод видеосигнала, то есть инкапсулируют DisplayPort. Это важное усовершенствование по сравнению с USB3, где DisplayPort был опциональным в альтернативном режиме. Кроме того, порты USB4 могут (но не обязаны) туннелировать и PCIe, так что по большому счету новый стандарт может полностью заменить Thunderbolt 3 и Thunderbolt 4. Правда, есть одна тонкость: отсутствие совместимости способно поставить крест на использовании существующих хабов и устройств, а идея в обязательном порядке покупать новые вряд ли вызовет энтузиазм у пользователей. Пока проблем нет, все уже появившиеся на рынке реализации USB4 поддерживают и Thunderbolt, но в дальнейшем положение дел может испортиться.

Не всё гладко и с родными USB-режимами. Появились два новых: Gen2 и Gen3. При этом для USB4 обязательна поддержка двух линков (раз это уже придумано, незачем отступать), так что они превращаются в Gen2×2 и Gen3×2 с пропускной способностью 20 и 40 Гбит/с соответственно. А теперь вишенка на торте: USB 3.2 Gen2×2 и USB4 Gen2×2 называются почти одинаково, имеют одинаковую пропускную способность и вообще очень похожи со стороны пользователя, но это абсолютно разные режимы, использующие, в частности, разные схемы кодирования информации и вообще несовместимые на электрическом уровне! Зачем нужно было создавать такую путаницу с самого начала? Спросите у разработчиков.

В довершение всех бед USB 3.2 Gen2×2 не попал в список режимов старых версий USB, которые обязаны туннелироваться в USB4! Максимальным обязательным является «старый» Gen2 с пропускной способностью 10 Гбит/с, являющийся также и наибольшим общим множителем с Thunderbolt 3 и Thunderbolt 4. Вы уже успели купить устройство с поддержкой USB 3.2 Gen2×2? Возможно, его придется менять на аналогичное, рассчитанное на USB4 Gen2×2, либо терпеть вдвое более низкую скорость. Особую пикантность этому добавляет то, что многие покупали топовые внешние SSD как раз в расчете на перспективу, а перспектива эта может и не настать. Впрочем, раз в USB4 поддерживается «старый» Gen2 и обязательна работа по двум ликам, а «старый» Gen2×2 прямо не запрещен, то производителям контроллеров есть смысл превратить опциональную поддержку в стандартную. Но кто-то из них может придерживаться и обратного мнения. Например, AMD в своих чипсетах не поддерживала USB 3.2 Gen2×2, так что нужно будет проверить, как в ее новых продуктах обстоят дела с этим режимом. Вот насчет Intel можно быть, скорее всего, спокойным. Насчет альтернативных производителей дискретных контроллеров — тоже. Хотя им придется непросто: для полной реализации новых скоростных режимов нужен быстрый внешний интерфейс, да еще и видеосигнал надо как-то на контроллер заводить, а эта проблема изрядно попортила жизнь производителям Thunderbolt-контроллеров. Всё легко только в случае ноутбуков: если ограничиваться интегрированной графикой и встраивать контроллер USB4 непосредственно в SoC рядышком с GPU и PCIe, то реализация может быть относительно простой.

Но вообще вопрос с PCIe, как уже было сказано, скользкий. И разработка отдельного режима для его туннелирования — изначально не слишком осмысленное мероприятие. Дело в том, что пиковая пропускная способность USB4 составляет те же 40 Гбит/с, что и у давно существующих Thunderbolt 3 и Thunderbolt 4. Это примерно эквивалентно PCIe Gen3 x4, чего хватало всем возможным потребителям в середине прошлого десятилетия (когда и был разработан Thunderbolt 3), но чего, как мы убедились на практике, сегодня радикально недостаточно для внешних видеокарт. Да и внешние SSD будут ограничены уже достигнутыми скоростями. В общем, единственный разумный вариант для топовых систем — как раз «полная» версия USB4: с новыми и старыми скоростными режимами USB, а также полной совместимостью с Thunderbolt 4. В вариантах «попроще» можно обойтись без Thunderbolt (и туннелирования PCIe), по минимуму реализуя только USB4 Gen2×2 плюс совместимость со старыми USB-режимами до Gen2 включительно плюс DisplayPort. При этом много портов нового стиля у компьютеров быть просто не может: они слишком уж быстрые, а проблема внутреннего интерфейса остро встала еще во времена USB3 Gen2 и Gen2×2. Сейчас она только усугубится.

 

 

К этому добавится еще и полное упразднение всех старых разъемов: в светлое будущее не берут ни Type-A, ни Micro-B, ни всех остальных. Исключительно Type-C — универсальный и имеющий достаточное для двух линков количество контактов. Конечно, мгновенного исчезновения старых портов отовсюду ждать не стоит, поскольку старые спецификации никто не отменяет. Но придется оставлять в хост-системах и старые Type-A, часть которых наверняка, как и ранее, будет поддерживать только USB 2.0: для мышей, клавиатур и подобной низкоскоростной периферии он не менее актуален, чем 20 лет назад. Хуже другое: вполне возможно, что на каком-то этапе придется ставить разные порты Type-C. Даже сейчас с топовыми платами не всегда легко понять, какой именно из одинаковых внешних разъемов нужно использовать: одни поддерживают Thunderbolt, другие — USB3 Gen2×2, а в каких-то так и остался обычный USB3 Gen2, который есть и в первых двух. А теперь добавьте в эту картину еще пару-тройку портов USB4 :)

 

С другой стороны, это издержки того, что в настольных системах разных портов можно разместить много — вот их и размещают много и разных. В ноутбуках USB-портов нередко всего 3-4, так что есть возможность сделать их все совместимыми с USB4 — либо с USB4 и Thunderbolt. Со временем, впрочем, в топовых ноутбуках к этому добавится еще и отдельный Thunderbolt 5: ведь проблема пропускной способности для PCIe-устройств с выходом USB4 не решена, а решать ее надо. Однако можно надеяться, что одного Thunderbolt 5 и хватит — просто для контроллеров ТВ5 сделают обязательной поддержку режимов USB4. Точно так же, как в TB3 в обязательном порядке «встроили» совместимость с (лучшим на тот момент) USB3 Gen2 — хорошее не грех и повторить. Но проблемы выбора нужных устройств и даже выбора «правильного» порта для подключения свежекупленного устройства пользователям по-прежнему придется решать. Новый стандарт мог бы навести в этом вопросе больше порядка, но что получилось — то получилось. Одних лишь двух разных режимов Gen2×2 с одинаковой пропускной способностью и почти одинаковыми названиями, но несовместимых друг с другом вполне достаточно.

Итого

Как видим, за прошедшие 25 лет шина USB существенно изменилась со всех точек зрения. Когда-то на задней панели компьютеров сиротливо пылилась пара ненужных портов, способных обеспечить скорость передачи данных 12 Мбит/с (на двоих) и выдать 2,5 Вт мощности (каждому)... при условии, что найдется еще что к ним подключить. Нынешние реализации стали быстрыми, удобными и универсальными: максимальные скорости выросли в три тысячи (!) раз (на заре внедрения USB еще не было даже внутренних интерфейсов с подобными скоростями — пропускная способность AGP 2X, например, намного ниже), «прокормить» стало можно достаточно «серьезного потребителя», которому требуется несколько десятков ватт. Портов уже не пара, а иногда больше десятка, что позволяет разместить их в удобных местах, да и сами по себе (во всяком случае, новомодный Type-C, становящийся основным стандартом) они стали более удобными. Впрочем, с этим мы забежали вперед: темы эволюции разъемов и энергоснабжения сами по себе обширны и заслуживают отдельного разговора. В скором времени мы ими займемся подробно :)

В общем, «гадкий утенок» несколько раз сменил оперение и стал действительно универсальным стандартом, причем не только в традиционных «компьютерных» областях: в начале нулевых на человека, предположившего наличие USB-портов в телевизорах, автомагнитолах и даже на автобусных остановках, посмотрели бы, мягко говоря, странно. Да, изначально такой успех никто не прогнозировал. Скорее, даже наоборот: будущее должно было принадлежать другим интерфейсам. Но вышло совсем иначе. Так бывает часто: разработанное идеальное универсальное решение оказывается невостребованным, а массовую популярность обретает что-то ограниченное и несуразное. Справедливости ради, ограниченными и несуразными были первые реализации, а в процессе развития было переделано практически всё, и радикально. Победи FireWire — это сейчас был бы точно такой же стандарт, только с другим названием. Но многие переделки привели к изрядной путанице и к тому, что часть пользователей до сих пор оперирует применительно к USB понятиями многолетней давности. Например, многие считают, что эта шина остается полнодуплексной с разделением времени и пропускной способности — такой, какой она была во времена USB 2.0. А это уже давно не так. Причем некоторые технические решения позволяют воспользоваться частью преимуществ современных реализаций USB даже при использовании формально старых устройств. И внедрение USB4 будет аналогичным.

Так что на деле USB сегодня и в ближайшей перспективе — это действительно универсальный и очень мощный интерфейс, покрывающий большинство потребностей массового пользователя. Не без особенностей, да. Но разобраться с ними не так уж сложно. Правда, нельзя не отметить, что изначальная простота концепции «один порт на всё» за время развития исчезла. Портов оказалось много и разных. Но благодаря сохранению совместимости даже там, где ее было сложно обеспечить, принципиальных неудобств не возникает.

Автор Андрей Кожемяко

Источник ixbt.com