Лекция
Привет, Вы узнаете о том , что такое usb, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое usb , настоятельно рекомендую прочитать все из категории Операционные системы и системное программировние.
USB (англ. Universal Serial Bus — «универсальная последовательная шина») — последовательный интерфейс для подключения периферийных устройств к вычислительной технике. Получил широчайшее распространение и стал основным интерфейсом подключения периферии к бытовой цифровой технике.
Интерфейс позволяет не только обмениваться данными, но и обеспечивать электропитание периферийного устройства. Сетевая архитектура позволяет подключать большое количество периферии даже к устройству с одним разъемом USB.
Разработка спецификаций USB производится в рамках международной некоммерческой организации USB Implementers Forum (USB-IF), объединяющей разработчиков и производителей оборудования с шиной USB. В процессе развития выработано несколько версий спецификаций . Тем не менее разработчикам удалось сохранить высокую степень совместимости оборудования разных поколений. Спецификация интерфейса охватывает беспрецедентно широкий круг вопросов подключения и взаимодействия периферийных устройств с вычислительной системой:
Разрабатывается электронное устройство, которое будучи подключенным к датчику выполняет измерение микроперемещения и передает результат на ПК, где он выводится в удобной для оператора графической форме. Область применения измерительного прибора — машиностроение.
Немного о том, как все работает
На схеме показаны основные действующие лица, участвующие в жизни разрабатываемого прибора.
Микроконтроллер — основной элемент устройства, который подает управляющие сигналы на датчик и принимает отклик, по которому вычисляет результат измерения. С помощью реализованного стека USB обмен данными с хостом сводится практически к работе с буферами чтения и записи. Ввиду того, что измерительный алгоритм не требует больших вычислительных мощностей и период одного измерения равен 100-150 мс выбран микроконтроллер at90usb162 (8 бит, 16 МГц, 16 кБ). В этом МК есть аппаратная поддержка USB, что значительно упрощает программную реализацию стека USB. В прочем, реализовывать стек и заниматься инициализацией МК мне не пришлось благодаря примеру USB Generic HID Implementation из сопроводительного пакета ПО. Из альтернатив фирменным примерам для AVR есть фреймворк LUFA (лицензия MIT) для AT90USBxxxx и ATMEGAxxUx и полностью программная реализация стека V-USB (GPL или коммерческая лицензия), позволяющая работать с AVR-овскими МК без аппаратной поддержки USB.
Немножко о аббревиатуре HID. Это класс USB-устройств, предназначенных для ввода данных человеком: клавиатура, мышь, игровые контроллеры. Предполагается, что у таких устройств небольшой объем передаваемой информации, как и у разрабатываемого устройства: пакеты по 8 байт с интервалом в 100-150 мс. Главное удобство работы с устройствами этого класса — наличие стандартного драйвера в ОС, что освобождает от написания своего.
Хостом (мастером, ведущим) в моем случае является ПК, а точнее встроенный в материнку контроллер USB. Согласно дескриптору (описанию) моего устройства хост опрашивает его на предмет новых посылок с периодом примерно в 20 мс. Прикладное ПО собирает принятые хостом данные, проводит небольшую обработку и рисует индикаторы, напоминающие автомобильные спидометры, на которых показываются измеряемые величины. Выводится список подключенных датчиков и их настройки, которые можно изменить: изменения будут переданы на устройство и сохранены в энергонезависимой памяти.
Одна из идей приложения — кроссплатформенность, поэтому оно разрабатывается во фреймворке Qt на С++, а обращения к ОС для считывания и передачи данных выполняются через библиотеку libusb. Последние несколько месяцев идет активная разработка бэкенда libusb v1.0 для виновс, уже пишут о предрелизном статусе и, что более важно, у меня с ней вроде все работает. Также есть порт libusb v0.1 для винды — LibUsb-Win32. Тема работы через WinAPI подробно и с примерами на Visual Basic и Visual C# раскрыта в книге USB Complete (о книге). Я WinAPI попробовал и мне не понравилось.
VID и PID
Выпуская свое USB устройство в свет компания должна назначить ему идентификатор производителя (vid – vendor id) и продукта (pid – product id, не путать с серийным номером). Формально, уникальность необходима для предотвращения конфликтов между драйверами устройств в ОС. Хотя у меня есть подозрение, что это скорее один из способов заработать для создателей стандарта, чем единственное возможное техническое решение. Впрочем, осуждать их за стремление заработать на созданном ими же стандарте я, конечно, не буду.
Итак, для производителя периферии есть два пути для получения собственного vid:
Для тех, кто не в состоянии заплатить такие деньги, производители чипов предоставляют различные варианты использования их vid и pid:
Здесь опубликован перевод на русский язык уникального документа USB in a NutShell, облегчающего разработчикам всего мира первое знакомство с протоколом USB. Наилучшая точка старта для новичков, и неплохое средство прочистить мозги более опытным разработчикам (которым кажется, что они что-то знают). Если какие-то термины и сокращения будут непонятны, пользуйтесь разделом [Термины] в конце статьи.
Начало работы с протоколом USB выглядит устрашающе. Например, одна только документация стандарта USB 2.0 на 650 страниц может оттолкнуть любого новичка. И это только начало длинного списка связанных стандартов для USB. Стандарты классов USB, как например HID Class Specification с общим описанием работы устройств (клавиатур, мышей, и т. д.), попадающих в класс HID (Human Interface Devices) – занимают еще 97 страниц. Если Вы разрабатываете USB хост, то нужно выбрать один из трех стандартов интерфейса хоста (Host Controller Interface Standards). Ни один из них не детализирован в спецификации USB 2.0.
Хорошие новости – нет необходимости читать весь стандарт USB. Некоторые главы вышли из стен маркетинга, другие посвящены нижнему уровню, о котором заботится Ваша микросхема USB контроллера и хост вместе с разработчиками хаба. Давайте немного попутешествуем по различным главам спецификации USB 2.0, и кратко рассмотрим основные моменты.
Главы | Название | Описание | Страниц |
1 | Введение | Включает предназначение и область действия для USB. Самая важная часть информации в этой части – ссылка на Universal Serial Bus Device Class Specifications. Нет необходимости читать эту главу. | 2 |
2 | Термины и аббревиатуры | Это глава не требует пояснений – обычное зло любого стандарта. | 8 |
3 | Основные вопросы | Указывает цели USB, такие как Plug’n’Play и простота работы с ним конечного пользователя (не разработчика). Представляет скорости Low, Full and High Speed со списком возможностей, полученных для целей маркетинга. Нет необходимости читать эту главу. | 4 |
4 | Обзор архитектуры | Тут можно начать чтение. Эта часть предоставляет основной обзор системы USB включая топологию, скорости передачи данных, типы потоков данных, основные электрические параметры и т. д. | 10 |
5 | Модель потока данных USB (Data Flow Model) | Эта глава начинает рассказ о том, как передаются данные по Универсальной Последовательной Шине (Universal Serial Bus). Тут вводят и описывают такие термины как endpoints (конечные точки) пайпы или потоки (pipes). Большая часть главы посвящена каждому типу потока данных (Control, Interrupt, Isochronous и Bulk). Важно знать каждый тип передачи и его свойства, хотя это несколько тяжело для новичка. | 60 |
6 | Механика | Глава описывает два стандартных коннектора. Здесь важная информация – коннектор type A направлен на downstream (в сторону устройств USB) и коннектор type B направлен на upstream (в сторону хоста USB). Таким способом исключается возможность воткнуть кабель в два порта upstream. Все отсоединяемые кабели должны быть full/high speed, в то время как любой кабель low speed должен иметь подходящую цоколевку. Бегло просмотрев коннекторы, Вы можете пропустить эту часть, если не собираетесь заниматься производством коннекторов USB и/или кабелей. Разработчики PCB могут найти стандартные посадочные места (footprints) коннекторов. | 33 |
7 | Электрика | Глава рассматривает низкий уровень электрических сигналов, включая сопротивление линии, интервалы времени нарастания/спада, спецификации драйвера (передатчика)/приемника и кодирование уровня бита, bit stuffing и т. д. Наиболее важные части этой главы описывают идентификацию скорости устройства путем подключения смещающего уровень резистора на одной из линий данных, а также сравнение bus powered devices и self powered devices. Можете проскочить через эту главу, если Вы не разрабатываете микросхемы приемопередатчиков USB. Хороший даташит на устройства USB (микросхему) описывает величину терминирующих шину резисторов, которые Вам понадобятся, чтобы соблюсти сопротивление шины. | 75 |
8 | Слой протокола | Теперь мы начинаем рассматривать уровни протокола. Эта глава описывает пакеты USB на уровне отдельных байт, включая поля sync, pid, address, endpoint, CRC. После этого происходит переход на следующий слой протоколов, USB пакеты. Большинство разработчиков не обращает внимания на эти низкоуровневые слои протокола, так как применяемые ими микросхемы для устройств USB сами заботятся о них. Однако здесь важны понимание процедуры получения информации о статусе (status reporting) и процедуры установления связи (handshaking). | 45 |
9 | Фреймворк устройства USB | Это наиболее часто используемая глава во всей спецификации, и только одна из всех, которую я потрудился распечатать и переплести. Она описывает энумерацию шины и коды запросов (request codes - set address, get descriptor и т. п), наиболее используемый в программировании слой протоколов USB, важный для программистов и дизайнеров. Эта глава должна быть тщательно прочитана. | 36 |
10 | Аппаратура и программное обеспечение хоста USB | Эта глава покрывает проблемы, касающиеся хоста. Описываются генерация фреймов и микрофреймов, требования к контроллеру хоста, программные механизмы и драйверная модельUSB. Можете пропустить эту главу, если Вы не разрабатываете хост USB. | 23 |
11 | Описание хаба | Описывает работу хабов USB включая конфигурацию хаба, разделение транзакций, стандартные дескрипторы для класса хаба и т. п. Можете пропустить эту главу, если Вы не разрабатываете хабы. | 143 |
Теперь можно начать читать те части стандарта, которые нам действительно нужны. Если Вы разрабатываете драйвера (программное обеспечение) для периферии USB, то Вам понадобятся только следующие части:
Разработчикам железа периферии (электроника) понадобятся только следующие главы:
USB in a NutShell для дизайнеров периферии
Теперь допустим (и это наверняка правда) что (1) большинство из нас разрабатывают периферию USB и (2) прочитали стандарт, но после этого в голове никаких идей по поводу того, как все-таки реализовать разрабатываемое устройство. В следующих 7 главах мы сфокусируемся на необходимых в разработке устройства USB частях стандарта. Это позволит Вам «воткнуться» в USB и производить дальнейшие разработки в соответствии с Вашим приложением (назначением устройства USB).
Стандарт USB 1.1 был недостаточно сложен для High Speed, и перерос в USB 2.0. Чтобы упростить понимание фундаментальных принципов USB, мы пропустим многое, касающееся непосредственно устройств USB High Speed.
Введение в Universal Serial Bus (USB)
USB версии 1.1 поддерживает две скорости – режим full speed 12 Mbits/s и режим low speed 1.5 Mbits/s. Режим 1.5 Mbits/s медленнее, и менее чувствителен к EMI (помехам), чем уменьшает стоимость ферритовых колец и снижает требования к качеству компонентов. Например, кварцы могут быть заменены на дешевые резонаторы. USB 2.0, который в настоящее время господствует для десктопов и ноутбуков, поднимает планку до 480Mbits/s. Эти 480Mbits/s обозначены как режим High Speed, и по этому параметру он может конкурировать с последовательной шиной Firewire.
Скорости USB
Спецификация | Скорость | Стандарт USB |
---|---|---|
Low-Speed | до 1,5 Мбит/с | USB 1.0 |
Full-Speed | до 12 Мбит/с | USB 1.1 |
High-speed | до 480 Мбит/с | USB 2.0 |
SuperSpeed | до 5 Гбит/с | USB 3.0 / USB 3.1 Gen 1 / USB 3.2 Gen 1 |
SuperSpeed+ 10Gbps | до 10 Гбит/с | USB 3.1 Gen 2 / USB 3.2 Gen 2 |
SuperSpeed++ 20Gbps | до 20 Гбит/с | USB 3.2 Gen 2x2 |
Новая схема именования
После выхода стандарта USB 3.2 организация USB-IF ввела новую схему именования[27]. Чтобы помочь компаниям с брендингом различных режимов передачи, USB-IF рекомендует называть режимы передачи 5, 10, 20 Гбит/с как SuperSpeed USB 5Gbps, SuperSpeed USB 10Gbps, SuperSpeed USB 20Gbps соответственно[28]:
Спецификация | Старое название | Оригинальное название | Режим передачи | Маркетинговое название (USB-IF branding) | Скорость | Скорость передачи | Картинка |
---|---|---|---|---|---|---|---|
USB 3.2 Gen 1 | USB 3.1 Gen 1 | USB 3.0 | Gen 1 | SuperSpeed USB 5Gbps | 5 Gbit/s | 500 MB/s | |
USB 3.2 Gen 2 | USB 3.1 Gen 2 | USB 3.1 | Gen 2 | SuperSpeed USB 10Gbps | 10 Gbit/s | 1.21 GB/s | |
USB 3.2 Gen 2x2 | --- | USB 3.2 | Gen 2 × 2 | SuperSpeed USB 20Gbps | 20 Gbit/s | 2.42 GB/s |
Universal Serial Bus – шина, управляемая исключительно хостом. На шине допустим один и только один хост. Спецификация USB сама по себе не поддерживает любую форму мультихостинга. Однако в спецификации On-The-Go, появившейся в стандарте USB 2.0, введен протокол Host Negotiation Protocol, который позволяет двум устройствам USB договориться, кто будет выполнять роль хоста. Это предназначено и ограничено одиночными подключениями точка-точка, например мобильный телефон – персональный органайзер, и не распространяется на хабы и конфигурации компьютеров. Хост USB ответственен за то, что предпринял все транзакции и выбрал полосу пропускания. Данные могут быть посланы методами различных транзакций, используя token-based протокол (протокол, основанный на символах).
По моему мнению, шинная топология USB несколько ограниченная. Одной из начальных целей USB было уменьшение количества кабелей, воткнутых в заднюю (или переднюю) стенку Вашего PC. Приверженцы Apple могут сказать, что эта идея пришла от Apple Desktop Bus, где клавиатура, мышь и другая периферия могут соединяться друг с другом (по топологии daisy chain), с использованием одного кабеля.
Однако USB использует топологию «tiered star» (многоярусная звезда), похожую на топологию 10BaseT Ethernet. Это предполагает возможное использование хабов, что добавляет неудобства – больше коробочек на Вашем столе и большее количество кабелей. Но это не так плохо, как может показаться поначалу. Многие устройства имеют интегрированные в себя хабы. Например, Ваша клавиатура может содержать хаб, подключенный к компьютеру. Ваша мышь и другие устройства (цифровая камера и т. п.) могут быть просто воткнуты в клавиатуру. Многие мониторы также имеют встроенный хаб.
Топология tiered star имеет некоторые преимущества перед простой топологией daisy chain. Первое – потребляемая мощность каждого устройства может отслеживаться, и переключения, перегрузки не влияют на работоспособность других устройств USB. Все high, full и low speed устройства могут поддерживаться одновременно – хаб отфильтровывает транзакции high speed и full speed, таким образом устройства с низкими скоростями не получают данные со слишком высокой скоростью.
Одновременно к одной шине USB может быть подключено до 127 устройств. Нужно больше устройств? – просто добавьте другой порт/хост. Многие старые хосты USB имели 2 порта, и многие производители сочли это недостаточным, и начали производство 4 и 5 портовых карт хоста и материнских плат, с внутренними портами USB (например, для жестких дисков). Ранние хосты имели один контроллер USB, и два порта разделяли между собой доступную полосу пропускания USB. Поскольку требования к полосе пропускания росли, мы теперь видим многопортовые платы с двумя или больше контроллерами, позволяющими организовать отдельные каналы для данных.
Контроллеры хоста USB имеют собственные спецификации. В стандарте USB 1.1 имеется две спецификации Host Controller Interface:
С появлением USB 2.0 понадобилась новая спецификация Host Controller Interface Specification для описания деталей регистрового уровня, специфичного для USB 2.0. Родился EHCI (Enhanced Host Controller Interface). Известные поставщики включая Intel, Compaq, NEC, Lucent и Microsoft объединились вместе, чтобы предоставить нам один стандарт интерфейса, и таким образом, только один новый драйвер для реализации в операционных системах. Вовремя.
USB носит имя, подразумевающее последовательную шину. Она использует 4 экранированных провода, из которых два передают питание (+5v & GND). Остальные два представляют витую пару (twisted pair) дифференциальных сигналов данных. Используется схема кодирования NRZI (Non Return to Zero Invert, без возврата к нулю с инверсией) для передачи данных с полем синхронизации для синхронизирования тактов хоста и приемника.
USB поддерживает «горячее» (plug’n’play) соединение с динамически загружаемыми и выгружаемыми драйверами. Пользователь просто втыкает устройство, подключая его тем самым к шине. Хост детектирует присоединение, опрашивает свежевставленное устройство и загружает подходящий драйвер, индицируя песочными часами на экране момент загрузки (если драйвер для устройства USB уже установлен в системе). Конечный пользователь не заботится ни о терминировании, ни об IRQ (прерываниях) и адресах портов, ни о перезагрузке компьютера (перезагрузка не требуется). Когда пользователь закончил работу с USB-устройством, он просто вынимает его (или отсоединяет кабель), хост обнаружит отсутствие устройства и автоматически выгрузит драйвер.
Загрузка (выбор) подходящего драйвера осуществляется по комбинации PID/VID (Product ID/Vendor ID). VID предоставляется организацией USB Implementor's forum за деньги, и это еще одна точка преткновения для USB. Последняя информация о ценах может быть найдена на сайте http://www.usb.org/developers/vendor/.
Другие организации по стандартам предоставляют дополнительные VID для некоммерческого использования, такого как обучение, разработка и прочее (радиолюбительство). USB Implementors forum все-таки должен оказать эту услугу. В этих случаях Вы можете использовать VID, назначенный поставщику системы разработки. Например, большинство производителей чипов имеют комбинации VID/PID, которые Вы можете использовать для Ваших чипов, и будет известно, что эти VID/PID не существуют в коммерческих устройствах. Другие производители чипов могут даже продать Вам для Вашего коммерческого устройства личный PID, чтобы использовать его с VID производителя.
Другая более достойная внимания особенность USB - его режимы передачи. USB поддерживает Control, Interrupt, Bulk и Isochronous передачи. В то время как мы будем смотреть на другие режимы передачи позже, Изохронный режим позволяет устройству резервировать определеную часть от полосы пропускания с гарантируемым временем ожидания (latency). Это идеально для аудио и видео приложений, где перегрузка канала может привести к заметной потере данных или понижению частоты кадров. Каждый режим передачи предоставляет разработчику компромиссы в области детектирования ошибок и восстановления, гарантированного времени ожидания и полосы пропускания.
Коннекторы
Все устройства имеют upstream-соединение к хосту, и все хосты имеют downstream-соединение к устройству. Коннекторы upstream и downstream механически не взаимозаменяемы, что устраняет недопустимые петлевые соединения на хабах, такие как подсоединение downstream-порта в downstream-порт. Обычно используют два вида соединителей, называемые type A и type B, которые показаны ниже.
Type A USB Connector (сокет, нумерация контактов при виде снаружи) |
Type B USB Connector (сокет, нумерация контактов при виде снаружи) |
Спецификация 1.0 регламентировала два типа разъемов: A — на стороне контроллера или концентратора USB и B — на стороне периферийного устройства. Впоследствии были разработаны миниатюрные разъемы для применения USB в переносных и мобильных устройствах, получившие название Mini-USB. Новая версия миниатюрных разъемов, называемых Micro-USB, была представлена USB-IF 4 января 2007 года.
Обычный | Mini | Micro | |
---|---|---|---|
Тип A | 4×12 мм
|
3×7 мм
|
2×7 мм
|
Тип B | 7×8 мм
|
3×7 мм
|
2×7 мм
|
Обычный | Mini | Micro | |
---|---|---|---|
Type A |
|
||
Type B |
|
|
|
Type C |
|
Type A plug (т. е. папа) всегда обращен к upstream (т. е. к хосту). Type A socket (т. е мама) обычно можно найти на стенке хоста и хаба. Например, сокеты type A расположены на компьютерных материнских платах и хабах. Type B plug всегда соединяются с downstream и, следовательно, type B socket расположены на USB устройствах. На первый взгляд звучит довольно путано, но разобраться можно =).
Интересно обнаружить в некоторых компьютерных магазинах кабели type A <--> type A с прямой разводкой проводов и многочисленные зарядники USB-типа. Это входит в противоречие со спецификацией USB. Устройства, являющиеся переходником между штеккером type A в штеккер type A являются мостом, используемым для соединения двух компьютеров друг с другом. Другие запрещенные кабели – удлинители USB, имеющие на одном конце штеккер (либо type A, либо type B) и сокет на другом конце (либо type A, либо type B). Эти кабели нарушают требования к длине кабелей USB.
USB 2.0 включает в себя errata, которое представляет коннекторы mini-usb B. Подробная информация по этим коннекторам может быть найдена в Mini-B Connector Engineering Change Notice. Причина появления коннекторов mini появилась для применения USB в малогабаритных электронных устройствах типа мобильный телефоны и органайзеры. Обычный коннектор type B слишком большой, чтобы его можно было просто применить в этих устройствах.
Совсем недавно была разработана спецификация On-The-Go, которая добавляет для USB функциональность peer-to-peer. Она представляет хосты USB в мобильных телефонах и электронных органайзерах, и таким образом включена спецификация для mini-A джеков, mini-A разъемов и mini-AB разъемов. Я предполагаю, что скоро получат широкое распространение кабели mini USB, и также набор кабелей-конвертеров mini в standard.
USB Type-C или USB-C — спецификация USB для универсального компактного двухстороннего 24-контактного разъема для USB-устройств и USB-кабелей .
Спецификация разъема USB Type-C версии 1.0 опубликована форумом разработчиков USB в августе 2014 года . Была разработана в то же время, что и спецификация USB 3.1.
Разъем USB Type-C могут иметь периферийные устройства и компьютеры. USB Type-C является новым поколением относительно разъемов и кабелей типа A и B предыдущих стандартов USB . В отличие от предыдущих версий, разъем USB-C симметричен по горизонтали и подключается к устройству любой стороной. то есть разъем может быть перевернут относительно гнезда. Он поддерживает стандарты USB 2.0, USB 3.0 и USB 3.1 Gen 2.
Использование разъема USB Type-C не гарантирует, что устройство реализует высокоскоростной стандарт USB 3.1 Gen1/Gen2 или протокол USB Power Delivery .
Разъем USB Type-C работает и в альтернативных режимах (англ. alternate mode), когда контакты передают данные по другим протоколам:
Для реализации альтернативных режимов DisplayPort и HDMI используется кабель-переходник на вилку своего физического интерфейса. Для режимов MHL и Thunderbolt (20Gbps) используется стандартный Type-C кабель; высокоскоростной режим Thunderbolt
продолжение следует...
Часть 1 Все о USB , Программирование USB интерфейса и работа с USB периферии для программистов
Часть 2 Цоколевки разъема и кабеля - Все о USB , Программирование
Часть 3 Глава 4: Типы конечных точек (Endpoint Types ) - Все
Часть 4 Глава 5: Дескрипторы USB - Все о USB , Программирование
Часть 5 Глава 7 : обычный (Generic) драйвер USB - Все о
Часть 6 Термины - Все о USB , Программирование USB интерфейса и
Ответы на вопросы для самопроверки пишите в комментариях, мы проверим, или же задавайте свой вопрос по данной теме.
Комментарии
Оставить комментарий
Операционные системы и системное программировние
Термины: Операционные системы и системное программировние