Вы находитесь на странице: 1из 15

Интерфейс USB

USB – последовательный интерфейс, используемый для подключения


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

Логика работы у хоста и клиента принципиально отличается,


соответственно нельзя напрямую соединять устройства «хост – хост» и
«клиент – клиент».

Хост-контроллер непосредственно ни с кем из периферии он не


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

Хабы – это устройства, которые позволяют физически подключить


устройства USB к шине. Они предоставляют порты для подключения,
ретранслируют трафик от хост-контроллера к конечным устройствам и
обратно, отслеживают состояние и физически управляют электропитанием
портов. У хабов есть один восходящий (upstream) порт, - это тот порт,
который подключен по направлению к хост-контроллеру, и несколько
нисходящих (downstream) портов, - это порты, к которым подключаются
конечные устройства. Хабы можно каскадировать, подключая к
нисходящему порту хаба ещё один хаб. Самый главный хаб,
интегрированный с хост-контроллером, называется корневым хабом (он же -
корневой концентратор или root hub).

Первые спецификации для USB 0.7–0.9 были представлены в 1994—


1995 годах. Разработка USB поддерживалась фирмами Intel, Microsoft,
Philips, US Robotics. В январе 1996 года была выпущена спецификация USB
v.1.0, и началась практическая реализация порта USB. USB представляет
открытый протокол связи (нет лицензионного сбора). Интерфейс USB в
конце 90-х не был распространен и конкурировал с PS/2.

Израильская фирма M-Systems Ltd. в 1999 году выпустила первую usb-


флешку объёмом 8Мб, которая называлась DiskOnKey.

USB v.1.1 (сентябрь 1998)

USB v.2.0 (апрель 2000г.)

USB v.3.0 (ноябрь 2008г.)

1
Описание USB состоит из ряда спецификаций, которые
разрабатываются группой компаний в рамках некоммерческой организации
USB Implementers Forum .

Каждая спецификация USB с версии 1.0 до 3.0 содержит большое


количество технической документации.

Только сами описания, без дополнительных документов и извещений


содержат:

USB 1.0 - 268 стр.

USB 1.1 - 311 стр.

USB 2.0 - 622 стр.

USB 3.0 - 482 стр.

USB 1.0

Спецификация выпущена 15 января 1996 года.

два режима работы:

 режим с низкой пропускной способностью (Low-Speed) — 1,5 Мбит/с;


 режим с высокой пропускной способностью (Full-Speed) — 12 Мбит/с;
 максимальная длина кабеля (без экрана) для режима Low-Speed — 3 м;
 максимальная длина кабеля (в экране) для режима Full-Speed — 5 м;
 максимальное количество подключённых устройств (включая размножители)
— 127;
 возможно подключение «разноскоростных» периферийных устройств к
одному контроллеру USB;
 напряжение питания для периферийных устройств — 5 В;
 максимальный ток, потребляемый периферийным устройством — 500 мА.

USB 1.1

Спецификация выпущена в сентябре 1998 года. Исправлены проблемы


и ошибки, обнаруженные в версии 1.0. Первая версия, получившая массовое
распространение.

2
USB 2.0

USB 2.0 отличается от USB 1.1 введением режима High-speed (пометка


на логотипе — «HI-SPEED»).
Для устройств USB 2.0 регламентировано три режима работы:

 Low-speed, 10—1500 Кбит/c (клавиатуры, мыши, джойстики, геймпады);


 Full-speed, 0,5—12 Мбит/с (аудио-, видеоустройства);
 High-speed, 25—480 Мбит/с (видеоустройства, устройства хранения
информации).

USB OTG

USB OTG (аббр. от On-The-Go) — дальнейшее расширение


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

USB 3.0

Окончательная спецификация USB 3.0 появилась в 2008 году.


Созданием USB 3.0 занимались компании Intel, Microsoft, Hewlett-Packard,
Texas Instruments, NEC и NXP Semiconductors.
В спецификации USB 3.0 разъёмы и кабели обновлённого стандарта
физически и функционально совместимы с USB 2.0, причём для однозначной
идентификации разъёмы USB 3.0 принято изготавливать из пластика синего
цвета (у некоторых производителей - красного цвета). Кабель USB 2.0
содержит в себе четыре линии — пару для приёма/передачи данных, плюс и
ноль питания, разъём "A" имеет 4 контакта. Для передачи высокоскоростных
SuperSpeed сигналов в USB 3.0 добавлено ещё четыре линии связи (две витые
пары) и один контакт сигнальной земли (GND_DRAIN), в результате чего
кабель стал гораздо толще. Новые контакты в разъёмах USB 3.0
3
расположены отдельно от старых в другом контактном ряду. Спецификация
USB 3.0 повышает максимальную скорость передачи информации до 5
Гбит/с — что на порядок больше 480 Мбит/с, которые может обеспечить
USB 2.0.

USB 3.1

31 июля 2013 года была принята спецификация следующего


интерфейса, USB 3.1, скорость передачи которого может достигать 10 Гбит/с.
Разъём USB 3.1 Type-C является симметричным, позволяя вставлять кабель
любой стороной.
Пользователи получили возможность передавать данные со скоростью
до 10 Гбит/с. Новый стандарт также позволяет в отдельных случаях
передавать мощность в 100 Вт.

В USB 3.1 входит два стандарта.

SuperSpeed USB (USB 3.1 Gen 1) со скоростью до 5 гбит/с, такой же


как и USB 3.0.
SuperSpeed USB 10Gbps (USB 3.1 Gen 2) со скоростью до 10 гбит/с,
удвоенная USB 3.0.
Стандарт USB 3.1 обратно совместим с USB 3.0 и USB 2.0.

USB 3.2
22 сентября 2017 некоммерческая организация USB Implementers
Forum (USB-IF) опубликовала спецификацию стандарта USB 3.2[20],
заключительная ревизия для USB 3.x. Новая спецификация предусматривает
удвоение максимально возможной скорости передачи данных по сравнению с
USB 3.1 Gen 2 — с 10 до 20 Гбит/с за счёт использования двух линий на 5
Гбит/с или 10 Гбит/с только для разъема USB Type-C по причине его
двухсторонних контактов и использования дублирующих выводов как
отдельный канал.
Спецификации USB 3.2 заменяют стандарты USB 3.0 и USB 3.1;
удовлетворяющие им устройства будут включать три стандарта
скоростей[23]:
SuperSpeed USB (USB 3.2 Gen 1) со скоростью до 5 Гбит/с и
кодированием 8b/10b, как у USB 3.1 Gen 1 и USB 3.0;
SuperSpeed+ USB 10Gbps (USB 3.2 Gen 2) со скоростью до 10 Гбит/с и
кодированием 128b/132b, как USB 3.1 Gen 2;

4
SuperSpeed++ USB 20Gbps (USB 3.2 Gen 2x2) со скоростью до 20
Гбит/с и кодированием 128b/132b по двум линиям, каждая из которых
соответствует USB 3.1 Gen 2.

USB 4.0

Спецификация новой версии протокола, USB 4.0 была опубликована 29


августа 2019 года. Новый базовый протокол повышает максимальную
скорость до 40 Гбит/с (при использовании совместимых кабелей Type-C),
сохраняя обратную совместимость с USB 3.2, USB 2.0.

Топология сети

Стандарт USB предполагает взаимодействие по архитектуре «клиент-


сервер» (используется терминология «Master-Slave», или «главный-
подчиненный») и позволяет подключать до 127 устройств последовательно
или используя концентратор USB (hub), к которому подсоединяется до семи
устройств.
Топология сети – активное дерево. Активное означает что в каждом
узле дерева находится специальное устройство – концентратор (хаб). Хаб
занимается электрическим согласованием кабелей, маршрутизацией пакетов,
обнаружением подключения/отключения устройств и другими функциями.
Вместо любого из устройств может также стоять хаб. Основное
отличие от топологии обычной локальной сети – компьютер (или host
устройство) может быть только один. Хаб может быть как отдельным
устройством с собственным блоком питания, так и встроенным в
периферийное устройство.
Физическая топология шины USB – дерево (ну, потому что хабы
можно каскадировать), а логическая топология – звезда, центром которой
является хост-контроллер. Физическая и логическая топологии шины USB
показаны на рисунке 1.

5
Рис. 1 – Физическая и логическая топологии шины USB

Существуют понятие «главное устройство» (хост, он управляет


обменом данными через интерфейс, выступает инициатором обмена) и
«периферийное устройство» (клиент, в процессе обмена данными
«подчиняется» хосту).

Логика работы у хоста и клиента принципиально отличается,


соответственно нельзя напрямую соединять устройства «хост – хост» и
«клиент – клиент».

Хост-контроллер непосредственно ни с кем из периферии он не


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

Хабы - это устройства, которые позволяют физически подключить


устройства USB к шине. Они предоставляют порты для подключения,
ретранслируют трафик от хост-контроллера к конечным устройствам и
обратно, отслеживают состояние и физически управляют электропитанием
портов. У хабов есть один восходящий (upstream) порт – это тот порт,
который подключен по направлению к хост-контроллеру, и несколько
нисходящих (downstream) портов – это порты, к которым подключаются
конечные устройства. Хабы можно каскадировать, подключая к
нисходящему порту хаба ещё один хаб. Самый главный хаб,
интегрированный с хост-контроллером, называется корневым хабом (он же –
корневой концентратор или root hub).

Конечная точка – это часть устройства USB, имеющая свой


уникальный идентификатор. Каждое устройство USB может иметь несколько
6
конечных точек. По большому счету – конечная точка – это всего лишь
область памяти USB-устройства, в которой могут храниться какие-либо
данные (буфер данных). И в итоге мы получаем вот что – каждое устройство
имеет свой уникальный адрес на шине USB, и при этом каждая конечная
точка этого устройства имеет свой номер.
Физически интерфейс USB использует 4 провода: «земля (GND)», «+5В
(VBUS)», «D+», «D-» (рис. 2). Первые два могут использоваться для питания
периферийного устройства (максимальный ток 500 мА). Два последних
служат для передачи данных (обозначение D+ (Data+) и D- (Data-) условны, с
электрическими потенциалами это никак не связано).

Рис. 2 – Разъемы устройств интерфейса USB

USB поддерживает «горячее» подключение и отключение устройств.


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

Физический уровень шины USB

Упрощенная электрическая схема USB соединения показана на рисунке


3. Когда к хосту никто не подключен, обе сигнальные линии D+ и D-
подтянуты резисторами 15 кОм к минусу питания. При подключении
устройства одна из линий подтягивается к +3,3 В через резистор 1,5 кОм.
Устройства Low Speed подтягивают линию D-, а устройства Full Speed — D+.
7
Таким образом хост определяет факт подключения и тип подключенного
устройства. Устройства High Speed в момент подключения работают как Full
Speed, переключаясь в высокоскоростной режим после обмена визитками.

Рис. 3 – Упрощенная электрическая схема USB соединения устройств

Данные кодируются по методу NRZI (Non-return-to-zero inverted). При


передаче последовательности единиц, сигнал, в отличие от других методов
кодирования, не возвращается к нулю в течение такта. То есть смена сигнала
происходит при передаче единицы, а передача нуля не приводит к
изменению напряжения (рис. 4). The high level represents the J state on the data
lines in this and subsequent figures showing NRZI encoding.

Потенциальный код NRZI

Рис. 4 – Кодирование передаваемой информации по USB по методу NRZI

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

Передача по двум проводам в USB не ограничивается


дифференциальными сигналами. Кроме дифференциального приемника
каждое устройство имеет линейные приемники сигналов D+ и D-, а
передатчики этих линий управляются индивидуально. Это позволяет
различать более двух состояний линии, используемых для организации
аппаратного интерфейса. Состояния Diff0 и Diff1 определяются по разности
потенциалов на линиях D+ и D- более 200 мВ при условии, что на одной из
них потенциал выше порога срабатывания VSE. Состояние, при котором на
обоих входах D+ и D- присутствует низкий уровень, называется линейным
нулем (SEO – Single-Ended Zero). Интерфейс определяет следующие
состояния:

* Data J State и Data К State - состояния передаваемого бита (или просто J и


К), определяются через состояния Diff0 и Diff1.

* Idle State - пауза на шине.

* Resume State - сигнал "пробуждения" для вывода устройства из "спящего"


режима.

* Start of Packet (SOP) - начало пакета (переход из Idle State в К).

* End of Packet (EOP) - конец пакета.

* Disconnect - устройство отключено от порта.

* Connect - устройство подключено к порту.

* Reset - сброс устройства.

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

Каждый кадр включает в себя пакет SOF (Start Of Frame), затем следуют


транзакции для разных конечных точек, ну и завершается все это
пакетом EOF (End Of Frame). Если говорить совсем точно, то EOF – это не
совсем пакет в привычном понимании этого слова – это интервал времени, в
течение которого обмен данными запрещен.
Каждая транзакция имеет следующий вид:

Первый пакет (его называют Token пакет) содержит в себе информацию об


адресе устройства USB, а также о номере конечной точки, которой
предназначена эта транзакция. Кроме того, в этом пакете хранится
информация о типе транзакции (какие бывают типы мы еще обсудим, но чуть
позже =) ). Data пакет – с ним все понятно, это данные, которые передают
хост, либо конечная точка (зависит от типа транзакции). Последний пакет
– Status – предназначен для проверки успешности получения данных.
Уже очень много раз прозвучало слово “пакет” применительно к
интерфейсу USB, так что пора разобраться что он из себя представляет.
Начнем с пакета Token:

Поле синхронизации (Sync Field). Все пакеты должны начинаться с поля


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

10
Пакеты Token бывают трех типов:
 In
 Out
 Setup
 Start Of Frame
Пакет In говорит нашему USB-устройству, что хост готов принять от него
информацию. Пакет Out, напротив, сигнализирует о готовности и желании
хоста поделиться информацией. Пакет Setup нужен для использования
управляющих передач. Ну а пакет Start Of Frame используется для того,
чтобы инициировать начало кадра.
Вот к чему я это рассказал..) В зависимости от типа пакета значение
поля PID в Token пакете может принимать следующие значения:
 Token пакет типа OUT – PID = 0001
 Token пакет типа IN – PID = 1001
 Token пакет типа SETUP – PID = 1101
 Token пакет типа SOF – PID = 0101
PID включает в себя 4 бита, но при передаче они дополняются еще 4-
мя битами, которые получаются путем инвертирования первых 4-ых
бит.
Переходим к следующей составной части пакета Token –
поля Address и Endpoint – в них содержатся адрес USB устройства и номер
конечной точки, которой предназначена транзакция.

 Поле адреса устройства (Addr Field)


Поле адреса используется для идентификации к какому устройству
направлен текущий пакет. Размерность поля - 7 бит, что позволяет
адресовать 127 уникальных USB устройств. После сброса или включения
питания, адрес устройства устанавливается по умолчанию в 0 и должен быть
запрограммирован хостом в ходе процесса энумерации. Адрес 0 (заданный
по умолчанию) зарезервирован для вновь подключаемых устройств и не
может быть назначен для нормальной работы.

Поле адреса конечной точки (Endpoint Field)


Поле адреса конечной точки имеет размерность 4 бита и позволяет
размещать в устройстве до 16 конечных точек. Все функции должны
поддерживать одну управляющую '0' конечную точку. Низкоскоростные
устройства поддерживают только три канала передачи: управляющий канал,
связанный с нулевой конечной точкой и два дополнительных канала (две
Interrupt конечные точки).
Ну и поле CRC – это контрольная сумма, с этим понятно.
Поле конца пакета (EOP) Поле конца пакета представляет собой
сигнал окончания пакета и устанавливается на шине путем выставления
сигнала "Single Ended Zero " SE0 в течении двух битовых интервалов

11
следующего за J состоянием, установленным на время одного битового
интервала. Итак, на очереди Data пакет – то есть пакет данных.

Тут все в принципе так же, как и в пакете Token, только вместо адреса устройства и
номера конечной точки здесь у нас передаваемые данные. до 1024 байтов данных

Осталось нам рассмотреть Status пакеты:

Тут PID может принимать всего лишь два значения:


 Пакет принят корректно – PID = 0010
 Ошибка при приеме пакета – PID = 1010
И, наконец, Start Of Frame пакеты:

SOF пакет состоит из 11-ти битного номера кадра FRAME и генерируется хостом
каждую 1ms ± 500ns для полноскоростной шины и каждые 125 µs ± 0.0625 µs для
высокоскоростной шины. Поле номера кадра инкрементируется хостом при
инициировании нового кадра. Поле номера кадра начинается заново с нуля при
достижения максимального значения 0х7FF.
То есть рассмотрим пример структуры кадра записи.
Кадр, как вы помните состоит из транзакций и  имеет следующий вид:

Что представляют из себя все эти транзакции? Сейчас разберемся!


Транзакция SETUP:

Транзакция OUT:

Аналогично при чтении данных из USB-устройства кадр выглядит так:

12
Транзакцию SETUP мы уже видели, посмотрим на транзакцию IN 

Все передачи данных по интерфейсу иницируются хостом. Данные


передаются в виде пакетов. В интерфейсе USB испольуется несколько
разновидностей пакетов:
пакет-признак (token paket) описывает тип и направление передачи
данных, адрес устройства и порядковый номер конечной точки (КТ -
адресуемая часть USB-устройства); пакет-признаки бывают нескольких
типов: IN, OUT, SOF, SETUP;
пакет с данными (data packet) содержит передаваемые данные;
пакет согласования (handshake packet) предназначен для сообщения
о результатах пересылки данных; пакеты согласования бывают
нескольких типов: ACK, NAK, STALL.
Таким образом каждая транзакция состоит из трех фаз: фаза передачи
пакета-признака, фаза передачи данных и фаза согласования.
В интерфейсе USB используются несколько типов пересылок
информации.
Управляющая пересылка (control transfer) используется для
конфигурации устройства, а также для других специфических для
конкретного устройства целей.
Потоковая пересылка (bulk transfer) используется для передачи
относительно большого объема информации.
Пересылка с прерыванием (interrupt transfer) используется для
передачи относительно небольшого объема информации, для которого
важна своевременная его пересылка. Имеет ограниченную длительность и
повышенный приоритет относительно других типов пересылок.
Изохронная пересылка (isochronous transfer) также называется
потоковой пересылкой реального времени. Информация, передаваемая в
такой пересылке, требует реального масштаба времени при ее создании,
пересылке и приеме.
Потоковые пересылки характеризуются гарантированной
безошибочной передачей данных между хостом и функцией посредством
обнаружения ошибок при передаче и повторного запроса информации.

13
Когда хост становится готовым принимать данные от функции, он в
фазе передачи пакета-признака посылает функции IN-пакет. В ответ на
это функция в фазе передачи данных передает хосту пакет с данными или,
если она не может сделать этого, передает NAK- или STALL-пакет. NAK-
пакет сообщает о временной неготовности функции передавать данные, а
STALL-пакет сообщает о необходимости вмешательства хоста. Если хост
успешно получил данные, то он в фазе согласования посылает функции
ACK-пакет. В противном случае транзакция завершается.
Когда хост становится готовым передавать данные, он посылает
функции OUT-пакет, сопровождаемый пакетом с данными. Если функция
успешно получила данные, он отсылает хосту ACK-пакет, в противном
случае отсылается NAK- или STALL-пакет.
Управляющие пересылки содержат не менее двух стадий: Setup-
стадия и статусная стадия. Между ними может также располагаться
стадия передачи данных. Setup-стадия используется для выполнения
SETUP-транзакции, в процессе которой пересылается информация в
управляющую КТ функции. SETUP-транзакция содержит SETUP-пакет,
пакет с данным и пакет согласования. Если пакет с данными получен
функцией успешно, то она отсылает хосту ACK-пакет. В противном
случае транзакция завершается.
В стадии передачи данных управляющие пересылки содержат одну
или несколько IN- или OUT-транзакций, принцип передачи которых такой
же, как и в потоковых пересылках. Все транзакции в стадии передачи
данных должны производиться в одном направлении.
В статусной стадии производится последняя транзакция, которая
использует те же принципы, что и в потоковых пересылках. Направление
этой транзакции противоположно тому, которое использовалось в стадии
передачи данных. Статусная стадия служит для сообщения о результате
выполнения SETUP-стадии и стадии передачи данных. Статусная
информация всегда передается от функции к хосту. При управляющей
записи (Control Write Transfer) статусная информация передается в фазе
передачи данных статусной стадии транзакции. При управляющем чтении
(Control Read Transfer) статусная информация возвращается в фазе
согласовании статусной стадии транзакции, после того как хост отправит
пакет данных нулевой длины в предыдущей фазе передачи данных.
Пересылки с прерыванием могут содержать IN- или OUT-пересылки.
При получении IN-пакета функция может вернуть пакет с данными, NAK-
пакет или STALL-пакет. Если у функции нет информации, для которой
требуется прерывание, то в фазе передачи данных функция возвращает

14
NAK-пакет. Если работа КТ с прерыванием приостановлена, то функция
возвращает STALL-пакет. При необходимости прерывания функция
возвращает необходимую информацию в фазе передачи данных. Если
хост успешно получил данные, то он посылает ACK-пакет. В противном
случае согласующий пакет хостом не посылается.
Изохронные транзакции содержат фазу передачи признака и фазу
передачи данных, но не имеют фазы согласования. Хост отсылает IN- или
OUT-признак, после чего в фазе передачи данных КТ (для IN-признака)
или хост (для OUT-признака) пересылает данные. Изохронные транзакции
не поддерживают фазу согласования и повторные посылки данных в
случае возникновения ошибок.

15