Usb устройство

Типы стандартов USB и разница между ними

Usb устройство

Вроде мы слышали, что USB 3.0 — это круче, чем USB 2.0. Но чем именно — знают не все. А тут еще появляются какие-то форматы Gen 1, Gen 2, маркировки Superspeed. Разбираемся, что значат все эти маркировки и чем они отличаются друг от друга. Спойлер: версий USB всего четыре.

Когда-то было слово только USB 1.0. Сейчас это уже практически архаика, которую даже на старых устройствах почти не встретить. Еще 20 лет назад на смену первопроходцу USB 1.0 пришел улучшенный USB 2.0. Как и первая версия, эта спецификация использует два вида проводов.

По витой паре идет передача данных, а по второму типу провода — питание устройства, от которого и идет передача информации. Но такой тип подключения подходил только для устройств с малым потреблением тока.

Для принтеров и другой офисной техники использовались свои блоки питания.

USB версии 2.0 могут работать в трех режимах:

  • Low-speed, 10–1500 Кбит/c (клавиатуры, геймпады, мыши)
  • Full-speed, 0,5–12 Мбит/с (аудио и видеоустройства)
  • High-speed, 25–480 Мбит/с (видеоустройства, устройства для хранения данных)

Стандарт USB 3.0 появился в 2008 году и до сих пор используется во многих устройствах. Скорость передачи данных выросла с 480 Мбит/с до 5 Гбит/с. Помимо скорости передачи данных, USB 3.0 отличается от версии 2.0 и силой тока. В отличие от более ранней версии, которая выдавала 500 мА, USB 3.0 способен отдавать до 4.5 Вт (5 В, 900 мА).

Новое поколение USB обратно совместима с предыдущими версиями. То есть USB 3.0 может работать и с разъемами USB 2.0 и даже 1.1. Но в этом случае буду ограничения по скорости. Подключив USB 3.0 к устройству с USB 2.

0 скорость, вы получите не больше 480 Мбит/с — стандарт для версии 2.0. И наоборот, кабель 2.0 не станет более скоростным, если подключить его в устройство с USB 3.0. Это связано с количеством проводов, используемых в конкретной технологии. В версии USB 2.

0 всего 4 провода, тогда как у USB 3.0 их 8.

Если вы хотите получить скорость передачи, заявленную стандартом USB 3.0, оба устройства и кабель должны быть именно версии 3.0.

В 2013 году появляется версия USB 3.1 с максимальной заявленной скорость передачи данных до 10 Гбит/с, выходной мощностью до 100 Вт (20 В, 5 А). С появлением USB 3.1 произошла революция в маркировках всех стандартов. Но с ней мы разберемся чуть позже. А пока запомним главное: пропускная способность USB 3.

1 увеличилась вдвое по сравнению с версией 3.0. И одновременно с обновленным стандартом появился и принципиально новый разъем — USB type-С. Он навсегда решил проблему неправильного подключения кабеля, так как стал симметричным и универсальным, и теперь все равно, какой стороной подключать провод к устройству.

В 2017 году появилась информация о новой версии — USB 3.2. Она получила сразу два канала (больше проводов богу проводов) по 10 Гбит/с в каждую сторону и суммарную скорость в 20 Гбит/с. Стандарт USB 3.2 также обратно совместим с режимами USB 3.1, 3.0 и ниже. Поддерживается типом подключения USB-C на более современных гаджетах.

Версий разъемов USB несколько, и для каждого есть свое предназначение.

  • type-А — клавиатуры, флешки, мышии т. п.
  • type-B — офисная техника (принтеры, сканеры) и т. п.
  • mini type-B — кардридеры, модемы, цифровые камеры и т. п.
  • micro type-B — была наиболее распространенной в последние годы . Большинство смартфонов использовали именно этот тип подключения, пока не появился type-C. До сих пор остается довольно актуальным.
  • type-C — наиболее актуальный и перспективный разъем, полностью симметричный и двухсторонний. Появился одновременно со стандартом USB 3.1 и актуален для более поздних версий стандартов USB.

Как только в типах стандартов появилась USB 3.1, привычная цифровая маркировка изменилась и здорово запуталась. Вполне понятный и простой USB 3.0 автоматически превратился в USB 3.1 Gen 1 и ему была присвоена маркировка SuperSpeed. А непосредственно сам USB 3.1 стал называться USB 3.1 Gen 2 с маркировкой SuperSpeed +.

Но и это уже потеряло свою актуальность с выходом стандарта USB 3.2. Он получил название USB 3.2 Gen 2×2 и маркировку SuperSpeed ++. В итоге маркировка всех предшествующих стандартов опять меняется. Теперь USB 3.0, она же USB 3.1 Gen 1, превращается задним числом в USB 3.

2 Gen 1 с прежней маркировкой SuperSpeed. А USB 3.1, ставшая USB 3.1 Gen 2, тоже поднялась до USB 3.2 Gen 2. При этом конструктивно все стандарты остались прежними — изменяются только названия.

Если вы уже запутались во всех этих цифрах и маркировках, таблица ниже поможет внести ясность в актуальных названиях.

Если еще более кратко, то сейчас опознать стандарты USB можно так:

USB 3.0 — это USB 3.2 Gen 1, он же SuperspeedUSB 3.1 — это USB 3.2 Gen 2, он же Superspeed+

USB 3.2 — это USB 3.2 Gen 2×2, он же Superspeed++

Источник: https://club.dns-shop.ru/blog/t-126-usb-fleshki/27840-tipyi-standartov-usb-i-raznitsa-mejdu-nimi/

Интерфейс USB. Полный обзор и структура пакетов данных

Usb устройство

Сегодняшняя статья будет посвящена, как уже видно из названия, обсуждению основ интерфейса USB. Рассмотрим основные понятия, структуру данных, разберемся, как происходит передача данных, а в ближайшем будущем реализуем все это на практике. Приступаем!

Существует ряд различных спецификаций USB. Началось все с USB 1.0 и USB 1.1, затем интерфейс эволюционировал в USB 2.0, относительно недавно появилась окончательная спецификация USB 3.0. Но на данный момент наиболее распространенной является реализация USB 2.0.

Ну и для начала основные моменты и характеристики. Интерфейс USB 2.0 поддерживает три режима работы:

  • High Speed – до 480 Мб/с
  • Full Speed – до 12 Мб/с
  • Low Speed – до 1.5 Мб/с

Командует на шине USB хост (например, ПК), к которому можно подключить до 127 различных устройств. Если этого мало, то нужно добавить еще один хост. Причем немаловажно, что устройство не может само послать/принять данные хосту/от хоста, необходимо, чтобы хост сам обратился к устройству.

Почти во всех статьях про интерфейс USB, которые я видел используется термин “конечная точка“, но о том, что это такое обычно написано довольно туманно. Так вот, конечная точка – это часть устройства USB, имеющая свой уникальный идентификатор. Каждое устройство USB может иметь несколько конечных точек. По большому счету – конечная точка – это всего лишь область памяти USB устройства, в которой могут храниться какие-либо данные (буфер данных). И в итоге мы получаем вот что – каждое устройство имеет свой уникальный адрес на шине USB, и при этом каждая конечная точка этого устройства имеет свой номер. Вот так вот

Источник: https://microtechnics.ru/osnovy-interfejsa-usb/

Гид по usb разъемам и usb кабелям

Usb устройство

USB (англ. Universal Serial Bus — «универсальная последовательная шина») — был разработана в 1990 году с целью упростить подключение периферийных устройств к компьютеру.

Он стал популярен благодаря совместимости со многими платформами и операционными системами, а также низкой стоимости и легкости использования.

Большинство современных компьютеров оснащены несколькими USB портами, также как и большинство домашней и офисной техники, включая принтеры, камеры, модемы и портативные запоминающие устройства.

Стандарты USB разрабатываются и поддерживаются отраслевой организацией Форум по внедрению USB (USB-IF). В своей оригинальной спецификации USB подразделяется только на два типа разъема: A и B. Изменения в спецификации и требования к производителям расширили спектр разъемов, используемых для USB-устройств, но большинство USB продукции по-прежнему использует интерфейсы разъемов A и B.

Больше разъемов:

Установленный на хост-контроллерах компьютеров и концентраторах, разъем тип A представляет собой плоский прямоугольный интерфейс. Этот интерфейс удерживает соединение на месте с помощью трения, благодаря чему пользователям очень легко подключаться и отключаться.

Вместо круглых штырьков в разъеме используются плоские контакты, которые очень хорошо выдерживают постоянное соединение и разъединение. Разъем тип A обеспечивает нисходящее соединение, которое предназначено для использования исключительно на хост-контроллерах и концентраторах.

Он не предназначен для передачи информации от устройства к компьютеру. Это критично, потому как хост-контроллер или концентратор сконструирован так, чтобы обеспечивать постоянный ток 5V на одном из USB штырьков.

Иногда кабели A-A используются для подключения USB-устройств с гнездом типа A к компьютеру или другому USB-устройству, а также для передачи данных между двумя компьютерами.

Примечание. Обычно кабель A-A не используется для соединения двух компьютеров или для подключения USB-концентратора между двумя компьютерами. Это может нанести компьютеру непоправимый ущерб и даже привести к пожару. Прежде чем использовать кабель A-A для передачи данных, проконсультируйтесь с производителем.

Male:

Female:

Разъем типа B предназначен для использования с периферийными устройствами USB. Интерфейс типа B имеет квадратную форму со слегка скошенными углами. Как и разъем типа А, для фиксации он использует трение корпуса разъема. Розетка B – это восходящий разъем, который используется только для периферийных устройств. По этой причине большинству устройств USB требуется A-B кабель.

Male:

Female:

Разъем USB-C или USB типа C является новейшим разъемом USB на рынке. Разъем USB-C имеет двустороннюю/симметричную конструкцию и может быть подключен к любому устройству USB-C. Кабель USB-C может передавать сигналы USB 3.1, USB 3.0, USB 2.0 и USB 1.1.

USB-C обычно сочетается с USB-A, USB-B, USB Micro-B и другими разъемами USB при поддержке предыдущих версий спецификации USB. USB-C может быть адаптирован для работы с каждым из этих устаревших разъемов. При подключении двух устройств USB 3.

1 кабель USB-C будет поддерживать скорость передачи данных, вдвое превышающую скорость существующей технологии USB (до 10 Гбит/с), улучшенную мощность питания до 20 вольт, 5 ампер и 100 ватт для питания и зарядки, а также встроенную поддержку видео DisplayPort и четырехканального звука (динамик и микрофон).

Male:

Этот разъем, признанный USB-IF, также можно найти на более новых мобильных устройствах, таких как мобильные телефоны, устройства GPS, КПК и цифровые камеры.

Micro-USB B представляет собой физически меньший по размеру разъем в сравнении с USB Mini-b, но при этом поддерживает высокую скорость передачи данных 480 Мбит/с и функцию On-The-Go.

Разъем можно легко определить по его розетке черного цвета и компактной 5-контактной конструкции.

Male:

Одним из недостатков разъема B является его размер ¬– почти полдюйма с каждой стороны. Из-за этого интерфейс B стал непригодным для многих компактных персональных электронных устройств, таких как КПК, цифровые камеры и мобильные телефоны. В результате многие производители устройств начали миниатюризацию разъемов USB, начиная с Mini-b.

Этот 5-контактный Mini-b является самым популярным типом разъема Mini-b и единственным, признанным USB-IF. По умолчанию предполагается, что кабель Mini-b имеет 5 контактов. Этот разъем довольно маленький, размером с около 2/3 ширины разъема А.

Он также предназначен для использования в более новом стандарте USB On-The-Go, который позволяет периферийным устройствам связываться в присутствии хост-контроллера.

Male:

Вместо обычного 5-контактного Mini-b этот неофициальный разъем используется во многих цифровых камерах, особенно в некоторых моделях Kodak®. Он напоминает форму стандартного разъема типа B со скошенными углами, однако он намного меньше по размеру.

Male:

Этот разъем типа A, известный как «SuperSpeed» (суперскоростной), обычно встречается на хост-контроллерах компьютеров и концентраторов и представляет собой плоский прямоугольный интерфейс. Этот интерфейс удерживает соединение на месте с помощью трения, благодаря чему пользователям очень легко подключаться и отключаться.

Вместо круглых штырьков в разъеме используются плоские контакты, которые очень хорошо выдерживают постоянное соединение и разъединение. Разъем A обеспечивает нисходящее соединение, которое предназначено для использования исключительно на хост-контроллерах и концентраторах.

Этот разъем похож по размеру и форме на разъем A-типа, используемый в устройствах USB 2.0 и USB 1.1. Однако USB 3.0 тип A имеет дополнительные контакты, которых нет в USB 2.0 и USB 1.1 тип A. Разъем USB 3.

0 предназначен для устройств USB SuperSpeed, однако, он будет передавать данные и с более медленных разъемов, и обратно совместим с портами USB 2.0. Разъемы USB 3.0 A можно отличить от предыдущих версий по синему цвету.

Male:

Разъем USB 3.0 B-типа встречается на устройствах USB 3.0. Этот разъем предназначен для передачи данных и питания устройств USB SuperSpeed. Кабели с этим разъемом не имеют обратной совместимости с устройствами USB 2.0 или USB 1.1; однако устройства USB 3.0 с этим типом подключения могут подключаться к кабелям предыдущих версий USB 2.0 и 1.1.

Male:

Разъем USB 3.0 Micro B встречается в устройствах USB 3.0. Этот разъем предназначен для передачи данных и питания устройств USB SuperSpeed. Кабели с этим разъемом не имеют обратной совместимости с устройствами USB 2.0 или USB 1.1.

Male:

Female:

Этот универсальный разъем, предназначенный исключительно для устройств USB On-The-Go, может подключаться к кабелю Micro-USB A или Micro-USB B. Этот интерфейс легко определить по розетке серого цвета и компактной 5-контактной конструкции. Этот тип разъема существует только в качестве гнезда для устройств On-The-Go, но кабелей с таким разъемом не существует.

Этот разъем, признанный USB-IF, можно найти на более новых мобильных устройствах, таких как мобильные телефоны, устройства GPS, КПК и цифровые камеры.

Micro-USB A представляет собой разъем физически меньший в сравнении с USB Mini-b, но при этом поддерживает высокую скорость передачи данных 480 Мбит/с и функцию On-The-Go.

Соединение легко определить по розетке белого цвета и компактной 5-контактной конструкции.

Male:

Это еще один неофициальный разъем, который также широко используется в цифровых камерах, особенно в некоторых моделях Fuji®. Из-за своей плоской прямоугольной формы он больше напоминает разъем А-типа.

Источник: https://www.ibik.ru/ru/usb-connector-guide-to-usb-cables-ru/

Интерфейс USB. Часть 1. Основы

Usb устройство

В настоящий момент один из самых популярных интерфейсов — это безусловно USB. Девайсов, которые его используют, просто огромное количество. Это и мышки, и клавиатуры, и принтеры, и сотовые телефоны, и много чего ещё.

В отличии от стремительно исчезающего RS-232, USB встречается во всех современных компьютерах, ноутбуках, телефонах… так что, если мы хотим создавать действительно универсальные девайсы, придётся нам этот интерфейс изучать.

Вот прямо сейчас и начнём, а заодно, по ходу изучения, попытаемся сами посоздавать каких-нибудь USB-девайсов.

Итак, USB (universal serial bus) — универсальная последовательная шина. Большинство USB-устройств соответствуют спецификациям 1.1 и 2.0. В спецификации 1.

1 определены две скорости передачи информации: LS (low speed) — низкая скорость, 1,5 Мбит/с и FS (full speed) — полная скорость, 12 Мбит/с. В редакции 2.0 к ним добавлена ещё и высокая скорость HS (high speed), 480 Мбит/с. Не так давно вышла ещё спецификация — 3.

0, но устройства, поддерживающие этот стандарт, пока не очень распространены, поэтому и бог с ней.

Физические устройства на шине USB бывают трёх типов: хост-контроллер, хаб и конечное устройство.

Хост-контроллер — это главный управляющий шиной USB. Именно он обеспечивает связь устройств, подключенных к шине, с компьютером (с ОС и с клиентским ПО). Любые сеансы обмена данными может начинать только хост-контроллер, остальные устройства молчат в тряпочку, пока хост-контроллер к ним не обратится.

Контроллер взаимодействует с ОС через драйвер хост-контроллера (HCD — host controller driver). Этот драйвер привязан к конкретной модели хост-контроллера. Только он знает какие данные, в какие регистры и в каком порядке пихать в хост-контроллер, а также откуда какие данные брать, чтобы хост-контроллер сделал то, чего от него хотят.

Со стороны ОС шиной USB управляет ещё один драйвер — USBD (universal serial bus driver).

Ему совершенно пофиг, как там конкретно реализован хост-контроллер и где у него какие регистры (для этого есть HCD), USBD решает общие (неспецифические для конкретного хост-контроллера) вопросы: взаимодействие с клиентским ПО, нумерация устройств на шине, их конфигурирование, распределение питания и пропускной способности шины и так далее. Это, можно сказать, своеобразный диспетчер, который осуществляет общий контроль над шиной и её взаимодействие с внешним миром (с клиентским ПО).

Хост-контроллер — птица гордая и пугливая, поэтому непосредственно ни с кем из подданных он не разговаривает. Для общения с подданными у него есть специальные помощники — хабы (их ещё иногда называют концентраторами).

Хабы — это устройства, которые позволяют физически подключить устройства USB к шине. Они предоставляют порты для подключения, ретранслируют трафик от хост-контроллера к конечным устройствам и обратно, отслеживают состояние и физически управляют электропитанием портов.

У хабов есть один восходящий (upstream) порт, — это тот порт, который подключен по направлению к хост-контроллеру, и несколько нисходящих (downstream) портов, — это порты, к которым подключаются конечные устройства. Хабы можно каскадировать, подключая к нисходящему порту хаба ещё один хаб.

Самый главный хаб, интегрированный с хост-контроллером, называется корневым хабом (он же — корневой концентратор или root hub).

Другими словами можно сказать, что у хаба есть две основных задачи: 1) создать хост-контроллеру иллюзию, что он непосредственно разговаривает с подключенным к хабу устройством; 2) наблюдать за своим сегментом шины (за девайсами, подключенными к нисходящим портам), сообщать «наверх» обо всех изменениях и, если надо, — подключать и отключать питание портов.

Конечные устройства — это все те полезные устройства, которые мы подключаем к шине USB (флэшки, принтеры, мышки и т.д.)

Нужно сказать, что физические устройства и логические устройства — это не всегда одно и тоже.

Существуют, например, такие конечные устройства (называемые составными — compound devices), которые содержат внутри себя хаб, к которому подключено ещё несколько устройств.

Несмотря на то, что в этом случае хаб и все, подключенные к нему устройства, запакованы в один корпус, с точки зрения логики шины это будут совершенно разные устройства.

Для логических конечных устройств обычно используют термин «функции». Таким образом, с точки зрения логики шины, устройства на ней можно разделить на хабы и функции (и неважно, запакованы ли они в один корпус или нет). Каждое логическое устройство на шине имеет уникальный адрес (1-127), присваеваемый ему хостом при подключении.

Исходя из описанного выше, получается, что физическая топология шины USB — дерево (ну, потому что хабы можно каскадировать), а логическая топология — звезда, центром которой является хост-контроллер. Физическая и логическая топологии шины USB показаны на рисунке ниже.

Идём дальше. Что же вообще представляет собой логическое устройство USB (как хабы, так и функции)?

Логическое устройство представляет собой набор так называемых конечных точек (endpoints или просто EP). Физически, конечные точки — это просто разные буферы в логическом устройстве USB, через которые происходит обмен данными с хостом.

Логичный вопрос — а зачем нам иметь несколько буферов? Ну, просто потому что удобно для разных задач иметь разные буферы. Устройство же у нас может выполнять параллельно несколько разных задач. (Минимум две — отслеживать команды управления от хоста и делать что-то полезное.

) У этих разных задач могут могут быть разные степени важности, требования к надёжности, своевременности и скорости доставки данных и, наконец, источники и потребители пересылаемой информации также могут быть разные (источником и потребителем полезной инфы обычно является клиентский драйвер, в то же время всякая управляющая инфа ему обычно нафиг не нужна).

Поскольку для решения описанных выше проблем недостаточно иметь просто разные буферы для разной передаваемой информации, то в дополнение к этому придумали ещё кое-что.

Во-первых, придумали 4 различных типа передач. Для каждой конечной точки должно быть определено, каким из этих типов передач с ней нужно общаться. Типы передач в USB существуют следующие:

  1. изохронные передачи (isochronous transfers). Они предназначены для передачи потоковых данных в реальном времени. Такие передачи гарантируют время доставки, но не гарантируют, что все данные будут доставлены. Если во время передачи происходит ошибка, то данные просто теряются. Кроме того, для передач такого типа должно быть предварительно согласовано, какую часть пропускной способности шины эта передача будет занимать. Изохронные передачи имеют наивысший приоритет и имеют право занять до 90% пропускной способности канала. Передачи этого типа используются, например, для видеокамер, или колонок. Никого ведь не устроит, если звук в колонках будет лагать. Лучше уж потерять часть данных, но слушать песню не рывками, а непрерывно.
  2. прерывания (interrupts). Этот тип предназначен для спонтанных небольших сообщений, но с гарантированным временем обслуживания и гарантированной доставкой. Примером может служить USB клавиатура. Мы можем нажать на кнопку в любой момент (может 3 часа не нажимали, а может так и заклацали клавой каждую секунду). Пока мы спим за компом — и передавать ничего не надо. Но как только мы всё же щелканули по кнопкам — будьте любезны, сообщите об этом куда следует и желательно побыстрее.
  3. передача массивов данных (bulk data transfers). Для этого типа нет никаких гарантий по скорости, единственное в чём можно быть уверенным — что данные дойдут в целости и сохранности (когда-нибудь, гы-гы). Такие передачи имеют самый низкий приоритет, но зато им ничего не надо согласововать, — сколько останется свободной от других типов передач ширины канала — столько они и займут. Не останется вообще — будут ждать, когда канал освободится. Такие передачи можно использовать для обмена данными с устройствами, которым некуда спешить, например, с принтерами. Представьте, что вы отправили на печать USB-принтеру фотку и одновременно слушаете музыку в USB-колонках. Согласитесь ли вы, чтобы фотка напечаталась на 3 секунды раньше, но при этом начал лагать звук в колонках? Вероятнее всего нет, так ведь. Пусть лучше данные принтеру передаются медленнее, но зато музыка играет непрерывно, без всяких дёрганий.
  4. управляющие передачи (control transfers). Это передачи типа запрос-ответ. С помощью них передаются комады управления устройствами. Тут важна не только безошибочная передача, но и получение ответа о результатах выполнения команды. Кроме того, поскольку эти передачи являются служебными, то им гарантировано 10% пропускной способности канала.

Вернёмся к нашим конечным точкам. Для того, чтобы отличить одну точку от другой, — конечные точки, должны иметь уникальный номер. Но это не всё. Кроме номера, каждая конечная точка имеет ещё и направление.

IN — если точка предназначена для передачи данных хосту, OUT — если точка предназначена для приёма данных от хоста.

Точки с одинаковыми номерами, но с разными направлениями передачи данных — это разные с точки зрения логики шины конечные точки.

Единственное исключение — конечная точка EP0. У неё вообще особый статус. Она является служебной и предназначена для общего управления устройством (конфигурирование, настройка и т.д.). Кроме того, эта конечная точка двунаправленная и она должна обязательно присутствовать в любом USB-устройстве.

Исходя из всего вышеописанного, для идентификации какой-то конечной точки на шине, нам нужно знать адрес устройства, к которому относится конечная точка, её номер в устройстве и направление передачи данных через эту точку.

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

Интерфейс объединяет конечные точки, предназначенные для решения какой-либо одной задачи. Наборы используемых одновременно интерфейсов называются конфигурациями.

Альтернативные установки позволяют включать или отключать какие-то входящие в конфигурацию конечные точки, в зависимости от способа решения задач для которых предназначена эта конфигурация.

Самих конфигураций и альтернативных установок у каждой из этих конфигураций для одного логического устройства может существовать несколько, но в каждый момент времени только один из этих наборов может быть активен.

Причём хост должен знать, какой именно набор активен и в соответствии с этим обеспечивать связь с входящими в этот набор конечными точками.

Остальные конечные точки, не входящие в активный набор, не будут доступны для связи.

Поясню, что значит «обеспечивать связь с конечными точками». Для связи клиентского ПО с каждой активной конечной точкой хост создаёт коммуникационный канал (communication pipe).

Клиентское ПО, которое хочет пообщаться с конечной точкой, должно отправить к соответствующему каналу пакет запроса ввода/вывода (IRP — input/output request packet) и ждать уведомления о завершении его обработки.

В IRP указывается только адрес буфера, куда надо складывать или откуда брать данные и длина передачи. Всё остальное за вас сделает хост и обслуживающие его драйвера (USBD и HCD)

В зависимости от типа передач, используемых в канале, коммуникационные каналы делятся на два типа: потоковые (streaming pipes) и каналы сообщений (message pipes).

Коммуникационный канал к точке EP0 является служебным и называется основной канал сообщений (default pipe, control pipe 0). Владельцем основных каналов сообщений всех подключенных устройств является драйвер USBD, поскольку, как мы уже говорили, через EP0 осуществляется конфигурирование и настройка устройства.

На этом, пожалуй, с основами закончим и в следующей статье попробуем более детально рассмотреть механизм передачи данных по интерфейсу USB.

Источник: https://radiohlam.ru/usb1/

Популярно о USB. Часть 1

Usb устройство

Немоляев А. В, г. Екатеринбург

Введение

У меня возникла необходимость разобраться с USB и, к своему удивлению, я обнаружил, что материалов по USB на русском языке не так уж много. Решил обобщить свой опыт изучения USB и передать всем желающим с ним познакомиться.

Публикация адресована начинающим разработчикам, тем, кто не знаком с USB, но хотел бы узнать больше. Статья носит учебный характер, и не является исчерпывающим справочным пособием. Для более простого вхождения в тему примеры основаны на стандарте USB 1.1. Если не сказано отдельно, то подразумевается режим FS (Full speed).

В статье нет широко освещенных в других источниках сведений об общей топологии USB, о кабелях, хабах и разъемах. Здесь больше информации о том, что нужно знать разработчику устройств с микроконтроллерами о протоколе USB для своих разработок.

Для устройств USB подключаемых к PC, таких, как мышь, клавиатура, микроконтроллер с поддержкой шины USB, использую термин USB-устройство. Персональный компьютер, к которому подключается USB-устройство, называю хостом.

Доступное изложение теории, будет сопровождаться примерами программ на языке С для микроконтроллера AT90USB162 из популярной линейки megaAVR фирмы Atmel. В качестве источника справочной информации по USB рекомендую книгу Гук М. Ю. «Шины PCI, USB и FireWire. Энциклопедия», издательство «Питер».

Обзор темы

Программное обеспечение хоста делится на два отдельных типа: программное обеспечение инициализации канала связи и программное обеспечение поддержки рабочего режима обмена данными. Программное обеспечение инициализации начинает работать при подключении к хосту нового USB-устройства. Происходит обмен служебной информацией между хостом и USB-устройством.

В результате обменов служебной информацией, хост определяет: тип устройства, его требования к энергопотреблению, возможность поддержки «спящего режима», тип драйверов для правильной работы USB-устройства, и, даже, возможна ли загрузка необходимых прикладных программ для работы с USB-устройством. Это новые веяния в духе спецификации PNP (plug and play).

Устройства могут подключаться и отключаться в горячем режиме. При подключении и отключении происходит автоматическое переконфигурирование программного обеспечения хоста. Процесс настройки хоста на обмен данными, напоминает процесс раскрутки.

Первоначально обмениваются простейшими сигналами по шине, затем процесс усложняется и, наконец, выход на рабочий режим.

Программное обеспечение рабочего режима поддерживает обмен данными, когда хост соответственно сконфигурирован, и USB-устройство вышло на рабочий режим обмена. В спецификации USB этот начальный процесс называется энумерацией.

В последнее время имеется тенденция к унификации не только протоколов обмена, но и устройств, взаимодействующих с персональным компьютером. Точнее, унификация требований к каналу связи. Идея такая. Придумывается универсальная шина для всего, что только можно подключить.

Конечно, эта шина устроена сложно, она многоуровневая, гибкая и адаптируемая для разных конфигураций устройств. Унифицируются и драйверы операционной системы персонального компьютера, который взаимодействует с подключаемым устройством. Преимущество – отпадает необходимость в написании драйвера для ОС разработчиками USB-устройства.

Это должно повышать надежность ОС, так как созданием драйверов могут заняться разработчики ОС, а не разработчики устройств. В общем, все плюсы унификации и стандартизации. Но есть и минусы. Очевидная сложность и связанная с ней избыточность, громоздкость технических решений.

Тот же подход, что и в протоколах коммуникаций на большие расстояния. Академический стек протоколов OSI и знаменитый TCP/IP.

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

Класс – это группа устройств, объединенных общими характеристиками и способных управляться общим для них программным драйвером операционной системы. Отдельное устройство может объединять функциональность сразу нескольких устройств, принадлежащих к разным классам.

Если функциональность вашего устройства подходит к некоторому классу, и оно поддерживает спецификацию USB для устройств класса, то не нужно писать драйвер для ОС. Вероятнее всего, драйвер уже имеется в ОС. Функциональность устройства, подпадающего под определенный класс, может быть расширена разработчиком устройства добавлением отдельных команд.

Точнее говоря, в стандарте USB предусмотрена возможность некоторого расширения функциональности. В стандарте предусмотрено множество возможностей, которые разработчик устройства может использовать для своих целей, добавляя к базовой функциональности функциональность расширенную.

В спецификации USB есть две большие области, это собственно USB базового уровня и протоколы устройств классов. Протоколы устройств классов – это некоторая надстройка над протоколами нижнего уровня. Логично сначала разобраться с базовыми принципами, а уж потом со всем остальным.

Виртуальные каналы и конечные точки

Все примеры в статье даются в среде операционной системы Linux. По моему субъективному мнению, для новичка разобраться в реализации USB для Windows труднее, чем для Linux.

Приходится много перерабатывать информации, специфичной для Windows, и ни как не относящейся к стандарту USB. В Linux к пониманию существа дела можно добраться более коротким путем.

Разобравшись с Linux, можно легко перейти и к Windows.

В режиме передачи данных, когда процесс конфигурирования (энумерации) уже закончился, между USB-устройством и хостом должны быть налажены мосты. Это некий набор виртуальных каналов, по которым идет обмен данными и служебной информацией. Англоязычный термин pipe – труба.

Каналы разделяют единственную среду передачи, а потому они являются мультиплексированными и, соответственно, виртуальными. Можно провести аналогию с локальной сетью. Шина Ethernet одна, но соединений TCP может быть несколько. Но в TCP/IP соединения TCP могут возникать и завершаться много раз в процессе работы.

В USB типы каналов и их количество фиксируются на стадии процесса энумерации.

В стандарте определяются четыре типа каналов: управляющие, по прерыванию, массивов данных и изохронные. Только управляющий канал является двунаправленным, остальные каналы могут быть только однонаправленными.

Для двустороннего обмена требуется организация хотя бы трех каналов. Обязательный управляющий канал и по одному для каждого направления. В USB принято, что канал называется каналом ввода, если данные передаются в хост, и канал вывода, если из хоста.

Применяя специальные приемы, можно использовать канал управления для передачи небольших объемов данных. Но это нестандартное использование канала, и применяется редко.

Напоминаем, что все информационные обмены на шине, для всех видов каналов происходят под управлением хоста. Первым делом хост посылает запрос, а затем USB-устройство отвечает.

Управляющий канал используется для передачи команд протокола USB; передача данных с использованием канала управления не является стандартным использованием канала. Хотя можно приспособить канал управления для передачи данных прикладной программы. В каждом USB-устройстве должен быть хотя бы один управляющий канал.

Канал передачи по прерыванию используется для небольших объемов данных, но с гарантированными задержками. Хост опрашивает USB-устройство на предмет готовности порции данных, и если USB-устройство готово для обмена, то обмен происходит.

Время реакции USB-устройства задается при конфигурировании и лежит в диапазоне от 1 до 255 мс. Так что, это не связано напрямую с прерываниями в общепринятом понимании. Один канал по прерыванию типа ввода, используется мышью USB (Рисунок 1). По каналу передаются клики и координаты указателя.

В моей клавиатуре USB используются два канала по прерыванию и один канал управления.
Рисунок 1.

Изохронные каналы – применяются для передачи потока данных, например аудио и видео. Характерной особенностью является отсутствие повторной передачи данных в случае ошибок.

Поврежденные пакеты просто отбрасываются без запроса повторной передачи. Такая политика позволяет воспроизводить поток данных в реальном времени без временных задержек.

С периодом в 1 миллисекунду хост запрашивает данные, и буфер USB-устройства передается на хост. В веб-камерах используются изохронные каналы.

Канал передачи массивов данных используется в типах устройств, не требующих временной привязки при передаче данных и оперативной реакции на внешние события.

Принципиальное отличие от двух предыдущих типов каналов заключается в том, что временной интервал, по истечении которого данные будут доставлены, не гарантирован. В изохронном канале хост опрашивает устройство с периодичностью 1 мс.

В канале передачи по прерыванию хост может опрашивать USB-устройство с периодом от 1 до 255 миллисекунд. В канале передачи массивов хост начинает запрашивать данные для приема в свободное от всех остальных передач время.

В случае искажения данных при передаче происходит повторная передача искаженных данных. В моей флэшке используются два канала передачи массивов данных: один на передачу и один на прием, не считая канала управления.

У USB-устройства приемником и передатчиком данных служит буфер, который называется конечной точкой. Тип конечной точки определяет тип канала, который связывает ее с хостом.

Например, контроллер USB микроконтроллера AT90USB162 фирмы Atmel имеет в общей сложности 4 конечных точки, не считая конечной точки управления (из 4 возможных буферов обмена). Программа микроконтроллера должна, соответственно, сконфигурировать необходимое количество конечных точек для своих нужд.

Все конечные точки контроллера USB перенумерованы. Нулевая конечная точка всегда используется для нужд канала управления и не может быть переконфигурирована для других целей.

Если не создается драйвер ОС, то на стороне хоста расположение буфера знать необязательно, так как взаимодействие программы на стороне хоста с USB-устройством происходит через системные вызовы операционной системы и скрыто от пользовательской программы.

Хабы, адреса, хост контроллеры

Кратко опишем аппаратуру хоста. На стороне хоста обязательно должен присутствовать хотя бы один контроллер хоста и связанный с этим контроллером корневой хаб.

В современных PC имеется несколько контроллеров хоста и, соответственно, несколько корневых хабов. Основателем каждой шины USB является корневой хаб, поэтому, если на PC несколько корневых хабов, то и несколько шин.

В Linux имеющиеся шины USB можно посмотреть с помощью команды lsusb. Ниже приведен дамп вывода на моем компьютере:

alex@big:~$ sudo lsusbBus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubBus 004 Device 002: ID 1a2c:0021Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubBus 003 Device 002: ID 0458:003a KYE Systems Corp. (Mouse Systems)Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubBus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubBus 001 Device 003: ID 13fe:4100 Kingston Technology Company Inc.

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

В колонке слева перенумерованы имеющиеся в компьютере шины USB, а, значит, и контроллеры хабов и корневые хабы. Каждое USB-устройство на шине имеет уникальный адрес в диапазоне от 1 до 127. Нулевой адрес выполняет служебные функции, и не может быть назначен USB-устройству постоянно.

Адреса распределяются по USB-устройствам хостом в процессе энумерации и сохраняются на все время работы устройства на шине. Из работы программы lsusb видно, что мышь USB подключена к шине 03, и на этой шине ей назначен адрес 02. Устройство хранения данных подключено к шине 01 с адресом 03.

Можно поиграть, поменять последовательность включения и посмотреть, как это отразится на выводе lsusb. В следующей колонке указан идентификационный код устройства ID. Этот код состоит из 2 частей: идентификатора изготовителя (vendor ID) и идентификатора изделия (product ID).

Они представляют собой два уникальных числа, используемых для идентификации конкретного устройства. Операционная система по этим кодам может определять, какой драйвер требуется загрузить для работы. Значение кода изготовителя назначается форумом разработчиков USB по заказу фирмы. Код устройства устанавливает сам производитель.

Программист микроконтроллеров может задать эти числа произвольно. Другое дело, что такие устройства, поступившие в широкую продажу, могут вызвать возражения фирмы собственника кода. Кроме этих чисел, для идентификации можно использовать номер версии устройства (ID Device).

Часть 2

Источник: https://www.rlocman.ru/review/article.html?di=152278

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.