
Нет сомнений в том, что с момента появления USB более 20 лет назад персональные компьютеры стали проще в использовании. Добавление периферийного устройства обычно не вызывает затруднений даже у самых не технических пользователей. Простота его использования скрывает сложность в его реализации. Хотя разработчику встроенного программного обеспечения не нужно разбираться во всех подробностях работы USB, некоторое понимание полезно, даже если используется коммерчески доступный стек USB.
USB был изобретен для обеспечения эффективной и более удобной альтернативы традиционным последовательным и параллельным интерфейсам. Он сводит к минимуму количество разъемов и кабелей и предлагает истинный опыт «plug-n-play». Подсистема USB может поддерживать до 127 устройств, поэтому она не имеет недостатка емкости. Его производительность масштабируема. В своих первых версиях USB предлагал низкую скорость (1,5 Мбит / с) и полную скорость (12 Мбит / с); они отвечают большинству пользовательских требований. В USB 2.0 скорость передачи данных значительно повысилась (480 Мбит / с), которая была очень полезна при передаче больших объемов данных. Это относится к большим жестким дискам и потоковым мультимедиа. Совсем недавно на USB 3.x была представлена технология SuperSpeed (5 Гбит / с) и выше.
Основы USB
Существует три типа устройств, которые могут поддерживать USB: «хост» (host), управляющий шиной (например, ПК), «функция» (function), представляющая собой периферийное устройство, например мышь, или «OTG» (On-The-Go). OTG подключение, может функционировать в качестве хоста или функции в разное время, например, цифровая камера или мобильный телефон.
Топология системы USB называется «многоуровневой звездой» с «корневым концентратором» в хосте, который подключается ко всем USB-устройствам либо напрямую, либо через дополнительные концентраторы, таким образом:

USB связь
Периферийный контроллер USB, конечно, имеет физический интерфейс с разъемом USB-кабеля, но он также включает в себя ряд буферов данных, называемых «конечными точками» (endpoints). Устройство может иметь до 16 пронумерованных конечных точек, каждая из которых может содержать один или два буфера (адреса конечных точек), один обрабатывает данные на устройстве, а другой — на выходе. Таким образом, существует максимум 32 буфера. Каждое устройство должно, как минимум, включать конечную точку 0 как с входными, так и с выходными буферами.
Протокол, используемый USB, по сути, ведущий / ведомый (master/slave). Все общение инициируется хостом. USB-хост устанавливает логическое соединение, называемое «каналом» (pipe), к конечным точкам на подключенных устройствах. Каналы автоматически удаляются при отключении устройства. Канал определяет тип передачи данных, который может происходить между данной конечной точкой и хостом.
Передача данных по USB
Передача данных через USB называется «передачей» (transfers). Передача состоит из одной или нескольких «транзакций», которые, в свою очередь, состоят из «пакетов» (которые могут быть «токеном», «данными» или «рукопожатием»). Множественные передачи могут выполняться одновременно в системе USB, каждая из которых прерывается, чтобы позволить другой передавать некоторые данные. Транзакция — это непрерывный поток данных.
USB поддерживает четыре типа передачи данных: Control, Bulk, Interrupt и Isochronous.
Передачи управления (control transfers)
Используются главным образом для идентификации и настройки устройств, но также может передаваться небольшая полезная нагрузка данных. Механизм исправления ошибок обеспечивает точную передачу данных. Все устройства должны поддерживать передачу управления, и все скорости могут быть использованы. Передачи управления основаны на сообщениях и по определению используют конечную точку 0.
Массовая передача данных (Bulk transfers)
Используется устройствами с большим объемом данных (такими как жесткие диски, сканеры, принтеры и так далее), где скорость желательна, но не обязательна, а целостность данных жизненно важна. Исправление ошибок обеспечивает точность. При групповой передаче данные передаются в потоковом режиме, а не в основе сообщений. Низкая скорость не вариант.
Передачи прерываний (Interrupt transfers)
Носят смешное название, потому что у устройства нет средств для прерывания USB-хоста в общепринятом значении этого термина. Этот тип передачи используется для устройств с малым объемом данных (таких как клавиатуры, мыши и другие). Передача прерывания включает исправление ошибок, может использовать любую скорость и данные передаются в потоковом режиме.
Изохронные передачи (Isochronous transfers)
Используются для очень больших объемов данных (например, потокового мультимедиа). Такая передача имеет гарантированное время доставки, но без исправления ошибок. Данные передаются в потоковом режиме и (конечно) низкая скорость не вариант.
Программные уровни USB
Программная реализация системы USB неизбежно сложна и реализована в виде ряда слоев. Хотя программное обеспечение для Host и Function отличается — первое может быть ПК, второе — встроенной системой — в его структуре есть определенная симметрия:

Верхний уровень — это, конечно же, код приложения, использующий связь USB.
Как правило, код приложения связан с компонентами операционной системы (такими как USB) через промежуточное программное обеспечение, такое как сетевой стек или файловая система.
Ключевым элементом системы USB является выбор драйверов класса, которые характеризуют, какое устройство подключается. Определен ряд драйверов стандартного класса, и можно ожидать, что они будут доступны с любым стеком USB. К ним относятся: аудио, связь, интерфейс пользователя, хранилище, фото и видео. Некоторые другие являются более специализированными и менее широко используемыми, такими как персональное здравоохранение и обновление прошивки устройства.
Если вы проектируете устройство с интерфейсом USB, оно должно быть связано с драйвером класса на обоих концах шины. Несмотря на то, что вы можете создать собственный драйвер класса для стека функций, обычно гораздо меньше труда нужно чтобы сделать ваше устройство максимально похожим на стандарт и, следовательно, использовать предоставленный драйвер. Сильный стимул следовать по этому пути — требование наличия соответствующего драйвера на стороне хоста. Если вы создаете пользовательский драйвер для этой функции, вам, возможно, потребуется также выполнить дополнительную работу для хоста, которая может включать обработку на стороне ПК, Mac, Linux и так далее.
USB Host и Function следят за деталями протоколов USB.
Нижний слой — драйвер для аппаратного контроллера USB, который заботится о функциональности самого низкого уровня.
USB и встраиваемые системы (Embedded Systems)
Все больше встраиваемых систем имеют интерфейсы USB, и обычно эти устройства являются функциями USB. Камеры, принтеры, сканеры, игровые контроллеры и другие устройства используют этот интерфейс. Для реализации такого программного обеспечения необходим стек функций USB, который обычно можно получить у поставщиков встроенного программного обеспечения.
Хотя USB-хост обычно является настольным или портативным компьютером, бывают случаи, когда встроенная система должна вести себя как хост. Хорошим примером здесь может быть приставка (или смартфон Android в режиме OTG). В этом случае необходим стек USB-хоста, который также можно приобрести на коммерческой основе.
Иногда устройство должно вести себя как хост USB и как функция. Примером такого требования является цифровая камера. Это может работать как функция при подключении к компьютеру для загрузки файлов изображений, но при подключении к принтеру для печати изображений он будет действовать как хост. Для реализации этой функциональности может потребоваться использование как хоста, так и стека функций. Если требуется, чтобы устройство работало в обоих режимах одновременно, подход с двумя стеками является единственным реальным вариантом. Однако, если в любой момент времени требуется только один режим, может быть доступна другая опция.
USB On-The-Go (OTG) был разработан, чтобы приспособиться к ситуации, когда устройство иногда может быть хостом, а иногда функцией. Это расширение стандарта USB и включает в себя необходимые протоколы для переключения режима. Разъемы для USB OTG различны, и они должны поддерживаться обоими участвующими устройствами. Ожидалось, что USB OTG будет очень популярен, но пока рано делать выводы.
Знакомство с USB 3.0
USB 3.x является последней версией стандарта USB и расширяет функциональность и скорость USB 2.0.
USB 3.0 включает в себя 2 провода, необходимые для передачи траффика USB 2.0, но добавляет еще 4 провода для передачи данных на более высокой скорости. SuperSpeed является двунаправленным (все версии USB до 3.0 были однонаправленными) и работает на скорости 5 Гбит / с. SuperSpeed также обеспечивает более высокие уровни тока на шине.
USB 3.0 обратно совместим, а хосты и концентраторы USB 3.0 поддерживают все скорости USB 2.0. Разъемы USB 2 вставляются в разъемы USB 3.0.
Скорость USB 3.0
USB 3.0 поддерживает все три скорости, предлагаемые USB 2.0, и добавляет SuperSpeed со скоростью 5 Мбит / с. Концентратор (или хаб) USB 3.0 имеет два внутренних хаба: концентратор USB 2.0 и хаб SuperSpeed. SuperSpeed может использоваться только в том случае, если все (то есть любые концентраторы) между устройством и хостом имеют SuperSpeed. Допускается создание устройства SuperSpeed, которое не работает на низких скоростях, но требуется для ответа на сброс шины и стандартный сброс на более низких скоростях.
Хост USB 3.0 может обмениваться данными с оптимальной скоростью с любым устройством USB, таким образом:

Хаб USB 3.0 связывается с хостом с использованием SuperSpeed и High Speed (высокая скорость передачи данных):

Если хост USB 3.0 подключен к концентратору USB 2.0, он обменивается данными на высокой скорости. Это также приводит к обмену данными с устройствами USB 3.0 (с поддержкой SuperSpeed) в нисходящем направлении на высокой скорости:

Мощность USB
Для устройства USB очень полезно иметь возможность получать питание от шины, вместо того чтобы требовать собственного источника питания. Номинальное напряжение питания 5 вольт. При использовании USB 2.0 «мощное» устройство может потреблять до 500 мА; «Маломощное» устройство может потреблять до 100 мА. С USB 3.0 доступный ток увеличивается до 900 мА и 150 мА соответственно.
USB 3.1 и 3.2
Постепенные улучшения были добавлены с момента появления USB 3.0, и они проявляются еще в двух дополнительных версиях.
USB 3.1 увеличил скорость передачи данных до 10 Гбит / с (SuperSpeed +). Поскольку существует два набора сигнальных линий, то потенциально возможно получить и 20 ГБ / с. USB 3.2 удваивает это значение.
Больше энергии можно подавать на устройства более гибкими способами — до 20 В при 5 А.
USB 3.1 также представил разъем Type-C, который является компактным, обратимым (!) И обладает гораздо большей утонченностью и гибкостью, с общим количеством выводов 24.

Вызовы перед современным USB
Развертывание USB во встроенной системе имеет проблемы, как технические, так и коммерческие.
С технической точки зрения — сложность USB. Для разработчика программного обеспечения многое из этого можно преодолеть, используя коммерчески доступный стек USB, который может быть получен от ряда поставщиков IP встроенного программного обеспечения. Остальные технические проблемы в основном связаны с совместимостью и очевидной совместимостью с другим USB-оборудованием.
С коммерческой точки зрения, проблемы в основном финансовые. Большая часть информации, необходимой для развертывания USB, свободно доступна на форуме USB Implementers Forum (USB-IF). Присоединение к USB-IF (стоимостью около 4000 долларов) имеет ряд преимуществ. Для всех USB-устройств требуется идентификатор поставщика и идентификатор продукта. Присвоение идентификатора поставщика стоит около 2000 долларов США (входит в членство USB-IF). Владелец идентификатора поставщика может назначать идентификаторы продуктов. Некоторые поставщики чипов имеют идентификаторы поставщиков и предоставляют своим клиентам блоки идентификаторов продуктов по номинальной или нулевой стоимости. Право на использование одного из логотипов USB также влечет за собой плату.
Итоги
USB был очень успешным в течение многих лет с момента его появления. Стандарт постоянно пересматривается, расширяется и совершенствуется. Некоторые из усовершенствований были менее успешными: USB OTG не стал сильно популярным (хотя еще не вечер), а беспроводной USB вообще не увидел свет.
USB 3.x является последней версией стандарта и обеспечивает более высокую скорость, улучшенное управление питанием и повышенную доступность питания для устройств через шину. Хотя для использования всех возможностей USB 3.x требуются новые разъемы, поддерживается очень хорошая обратная совместимость.