Сегодня мало кто помнит историю, связанную с конфузом на выставке COMDEX в апреле 1998 года. Тогда презентация Windows 98 завершилась крахом операционной системы — компьютер просто повис, когда Крис Капоссела (Chris Capossela) показывал Биллу Гейтсу, как реализован механизм Plug-and-Play при «горячем подключении» USB-сканера.
Были и другие курьезы, где главным действующим лицом становилась шина USB или подключаемые к ней устройства. За давностью лет забылись проблемы c USB-клавиатурой, когда для ее применения приходилось в установках BIOS разрешать Legacy USB Support с помощью классического PS/2-устройства ввода. Сложным и тернистым был путь универсальной последовательной шины от момента ее рождения до безраздельного господства на рынке. Вспомним, как все начиналось.
Made in Intel
Одним из архитекторов USB стал Аджай Бхатт, инженер компании Intel. Исходно, спецификация шины разрабатывалась с прицелом на недорогие приложения: производительная периферия к 1995 году уже вовсю задействовала FireWire IEEE1394. Единомышленниками Intel в разработке нового интерфейса, ставшего вскоре стандартом, были как софтверные гиганты (IBM, Microsoft), так и крупные производители компьютерной техники (Compaq, NEC). Они и ряд других компаний организовались в USB Implementers Forum, из недр которого 11 ноября 1994 года и появился первый черновик основополагающего документа — Universal Serial Bus Specification, Revision 1.0.
Разброд и шатания
Все, кто работал о спецификациями, знают, сколь трудно выудить прикладные знания из канцелярского текста этих документов. Не удивительно, что наряду с USB Spec на видном месте для разработчиков оказалось руководство по схемным решениям с использованием Universal Host Controller Interface — первого из известных USB-контроллеров. Его разработала компания Intel как неотъемлемый компонент нового в то время набора системной логики VX (его еще называли Triton-II).
Здесь уместно подчеркнуть, что программная модель UHCI и хост-контроллеров следующих поколений, а также архитектура их взаимодействия с ресурсами персональной платформы, остается «за скобками» USB-спецификации и определяется отдельными документами.

UHCI включался в состав южного моста Intel 82371SB и обеспечивал работу двух USB-портов, каждый из которых мог варьировать по своему усмотрению (и по способности подключенного устройства) скорость обмена от экономно малой Low-Speed (1,5 Мб/сек) до невероятно (по тем временам) скоростной Full-Speed (12 Мб/сек). О производительности USB с высокой пропускной способностью можно говорить без иронии — основным сетевым протоколом тогда был Ethernet 10Base-T, уступающий режиму Full-Speed.
Вскоре универсальный USB-контроллер появился и у набирающей обороты VIA Technology. Но, к сожалению, обе программные модели (Intel и VIA) были далеко не универсальными: UHCI поддерживал всего два USB-порта, обмен с которым создавал приличную нагрузку на хилые процессоры Pentium. Корни проблемы уходили в недостаток автономности при обработке последовательности транзакций. Как следствие, контроллер интенсивно генерировал запросы на прерывание для центрального процессора: сценарий обмена требовал постоянного внимания со стороны CPU. Сыграл свою негативную роль и консервативный подход к размещению регистров статуса и управления в пространстве портов ввода-вывода.
Решение не заставило себя ждать. Застрельщиком оказалась коалиция в составе Compaq, Microsoft и National Semiconductor. На свет появилась спецификация открытого контроллера USB — Open Host Controller Interface (OHCI), лишенная перечисленных недостатков.
Спецификация OHCI сняла ограничение на количество USB-портов и открыла путь к использованию регистров в адресном пространстве памяти (Memory-Mapped IO) вместо портов ввода-вывода. Кроме того, в силу более развитой аппаратной поддержки расписания транзакций, контроллер OHCI по сравнению с UHCI позволил несколько снизить утилизацию центрального процессора. Обязанности по внедрению разделили компании, которых уже нет на рынке: CMD (California Micro Devices), Cyrix и OPTi. Сегодня их дело продолжает AMD/ATi, NVIDIA, SiS (вернее, то, что от нее осталось).
По пути улучшений
Груз проблем, связанных с внедрением USB-интерфейса, породил новую и уже стабильную ревизию спецификации, по времени совпавшую с выходом Windows 98. Фактически, USB-устройств в широком предложении на рынке все еще не было, но потребность в них возрастала день ото дня, хотя круг энтузиастов в тому времени сократился. Локомотивами интерфейса оставались только Compaq, Intel, NEC, Microsoft. Они и подготовили спецификацию USB v1.1.
Основной проблематикой нового документа стала заблаговременная подготовка к максимально безболезненному переходу на USB2.0. Как это произошло — читайте в следующих публикациях сайта «Компостер 2.0».
Post Scriptum. Anti-Ajay
В воспоминаниях Аджая Бхатта часто встречается тезис о том, что изначально рассматривалась реверсивная конструкция разъема USB Type-A. На сей счет есть несколько соображений, и все они не в пользу l'esprit d'escalier.
- Во-первых, не в традиции дизайнеров компьютерной техники использовать симметричные конструкции, все строго наоборот: защитные пазы использовались для предотвращения «обратного» подключения — в 90-х все коннекторы имеют эту особенность.
- Во-вторых, дефицит USB-портов в интегрированных и дискретных контроллерах не предвещал той расточительности, которую позволяет себе реверсивная конструкция: один из портов в симметричном разъеме может оставаться неиспользованным.
- В-третьих, нарекания на сложность подключения «классического» USB-Am смело стоит отнести к досужим: конструкция разъема четко декларирует, где у него верх и где низ, чего в большинстве случаев достаточно для соединения с USB-гнездом с первой же попытки, что, впрочем, не отменяет удобства USB Type-C.

Конструкция USB-гнезд на плате ASUS TUF Gaming X570-Plus с направляющими синего цвета указывает, какой должна быть ориентация кабельного разъема USB Type-A для подключения с первой попытки