Как работает usb на физическом уровне
Перейти к содержимому

Как работает usb на физическом уровне

  • автор:

PersCom — Компьютерная ЭнциклопедияКомпьютерная Энциклопедия

Кабель USB содержит две пары проводов: одну для сигнальных цепей (D+ и D-) и одну пару для схемной земли (GND) и подачи питания +5 В (Vbus). Допустимая длина сегмента (кабеля от устройства до хаба) — до 5 м. Ограничения на длину сегмента диктуются затуханием сигнала и вносимыми задержками. Задержка распространения сигнала по кабельному сегменту не должна превышать 26 нс, так что при большой погонной задержке допустимая длина кабеля может сократиться. Максимальное удаление устройства от хост-контроллера определяется задержкой, вносимой кабелями, промежуточными хабами и самими устройствами.

В кабеле USB 1.x для сигнальных цепей используется витая пара проводов калибра 28AWG с импедансом 90 Ом. Характеристики кабеля нормированы в частотном диапазоне до 16 МГц. Для питания используется неперевитая пара проводов калибра 20AWG–28AWG. Требований к экранированию кабелей в USB 1.x не выдвигалось. Для низкой скорости может использоваться кабель с неперевитой парой сигнальных проводов (он дешевле и тоньше), но его длина не должна превышать 3 м.

В кабелях USB 2.0 используются провода тех же калибров, но в спецификации описана конструкция кабеля, в которую входит обязательный экран и связанный с ним дополнительный проводник. Такой кабель пригоден для работы на любых скоростях, включая и HS (480 Мбит/с).

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

  • тип «A»: гнезда (рисунок а) устанавливаются на нисходящих портах хабов, это стандартные порты подключения устройств. Вилки типа «A» устанавливаются на шнурах периферийных устройств или восходящих портов хабов;
  • тип «B»: используются для шнуров, отсоединяемых от периферийных устройств и восходящих портов хабов (от «мелких» устройств — мышей, клавиатур и т. п. кабели, как правило, не отсоединяются). На устройстве устанавливается гнездо (рисунок б), на кабеле — вилка;
  • тип «Mini-B» (рисунок в): используются для отсоединяемых шнуров малогабаритных устройств;
  • тип «Mini-A»: введен в спецификации OTG, вилки используются для подключения устройств к портам малогабаритных устройств с гнездом «mini-AB».
  • тип «Mini-AB»: гнезда введены в спецификации OTG для портов двухролевых устройств, которые могут вести себя как хост (если в гнездо вставлена вилка miniA) или как периферийное устройство (если в гнездо вставлена вилка mini-B).

Назначение выводов разъемов USB приведено в таблице, нумерация контактов показана на рисунке выше. Штырьковые разъемы, устанавливаемые на системной плате (рисунок г), предназначены для кабелей-«выкидышей», которыми подключаются дополнительные разъемы USB, устанавливаемые на передней или задней стенках корпуса компьютера (иногда и на боковых). На эти разъемы порты выводятся парами, причем у разных производителей подход к универсальности и защите от ошибочных подключений различен. Подключение «выкидыша», не подходящего к разъему, приводит к неработоспособности порта (к счастью, как правило, временной). Ошибка в подключении цепей GND и +5V может приводить к нагреванию кабелей и разъемов из-за короткого замыкания питающей цепи.

Все кабели USB «прямые» — в них соединяются одноименные цепи разъемов, кроме цепи ID, используемой для идентификации роли устройства в OTG. На вилке mini-A контакт 4 (ID) соединен с контактом 5 (GND), что заставляет порт, к которому подсоединена такая вилка, взять на себя роль нисходящего порта хаба. На вилке miniB такого соединения нет.

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

Таблица. Назначение выводов разъема USB
Цепь Контакт стандартного разъема Контакт миниразъема
VBus (+5 В) 1 1
D– 2 2
D+ 3 3
GND 4 5
ID 4

Приемопередатчики

Подробности Родительская категория: USB Категория: Физический интерфейс USB

Для передачи сигналов используются два провода D+ и D–. На каждой стороне интерфейса (порте хаба и подключенного устройства, см. рисунок ниже) имеются:

  • дифференциальный приемник, выход которого используется при приеме данных;
  • управляемый (отключаемый) дифференциальный FS/LS-передатчик — источник напряжения, позволяющий кроме дифференциального сигнала формировать и «линейный 0» (SE0), а также отключаться для обеспечения полудуплексного обмена;
  • линейные приемники, сообщающие текущее состояние каждого сигнального провода;
  • резисторы, подтягивающие уровни сигналов для обнаружения подключения устройства:
    — Rd1, Rd2 (15 кОм) у хаба;
    — Ruf (у FS/HS-устройства) или Rul (у LS-устройства);
  • Дополнительные элементы для работы на высокой скорости (только для устройств HS):
    — коммутатор, отключающий резистор Ruf при выборе высокой скорости;
    — последовательные резисторы Rz1 и Rz2 на выходах дифференциального передатчика, обеспечивающие согласование с линией и нагрузку;
    — управляемый дифференциальный источник тока;
    — детектор амплитуды сигнала;
    — детектор отключения (только на нисходящих портах хабов).

Уровни сигналов передатчиков FS/LS в статическом режиме должны быть ниже 0,3 В (низкий уровень) или выше 2,8 В (высокий уровень). Приемники должны выдерживать входное напряжение в пределах –0,5. +3,8 В. Чувствительность дифференциальных приемников — 200 мВ при синфазном напряжении 0,8–2,5 В. Линейные приемники должны обладать гистерезисом с нижним порогом 0,8 В и верхним порогом 2 В.

Передача данных

Подробности Родительская категория: USB Категория: Физический интерфейс USB

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

  • Diff0: (D+) — (D-) > 200 мВ при (D+) > 2 В;
  • Diff1: (D-) — (D+) > 200 мВ при (D-) > 2 В;
  • SE0 (single-ended zero): (D+) < 0,8 В и (D-) < 0,8 В.

Для передачи данных используются сигналы Diff0 и Diff1, они кодируют состояния J (Data J State) и K (Data K State). На полной и высокой скорости состояние J соответствует сигналу Diff1, состояние K — сигналу Diff0. На низкой скорости назначение обратное: J — Diff0 и K — Diff1. Последовательная передача информации ведется с использованием кодирования NRZI (см. рисунок ниже): при передачи нулевого бита в начале битового интервала состояние сигнала (J или K) меняется на противоположное; при передаче единичного — не меняется. Длительность битового интервала определяется номинальной частотой передачи: 0,666… мкс для низкой скорости (LS, 1,5 Мбит/с); 83,3… нс для полной (FS, 12 Мбит/с) и 2,0833… нс для высокой (HS, 480 Мбит/с).

Состояние покоя (Bus Idle) на FS/LS соответствует длительному состоянию J, а на HS — состоянию SE0.

Признаком начала пакета является переход из состояния покоя в состояние K, что является первым битом синхропоследовательности (Sync), — последовательности нулей, которая в NRZI кодируется переключением состояний (J и K) в начале каждого битового интервала. Синхропоследовательность позволяет приемнику настроиться на нужною частоту и фазу синхронизации. Синхропоследовательность завершает единичный бит (нет смены состояния), последующие за ним биты относятся к идентификатору и телу пакета. На HS начальная часть синхропоследовательности может быть потеряна хабом (из-за задержки реакции на детектор сигнала). С учетом этого синхросполедовательность для HS удлинена до 32 бит (включая последний единичный бит). Проходя через 5 хабов, каждый из которых может потерять до 4 синхробит, синхропоследовательность может оказаться сокращенной до 12 бит.

Для того чтобы синхронизация не терялась на монотонном сигнале (при передаче длинной последовательности единиц), применяется техника вставки бит (bit stuffing): после каждых 6 подряд следующих единиц передатчик вставляет «0», приемник эти вставленные биты удаляет. Если принимается более 6 единиц подряд, это считается ошибкой вставки бит.

Конец пакета (EOP) на FS/LS обозначается сигналом SE0, длящимся 2 битовых интервала, за которым следует переход в состояние покоя (Bus Idle). На HS для признака EOP используется нарушение правила вставки бит. Здесь в качестве EOP используется передача последовательности 01111111 без вставки бит. Прием седьмой единицы вызовет индикацию ошибки вставки бит, которая на HS и является признаком конца пакета. Нормальный пакет при этом от действительно ошибочного будет отличаться целым количеством принятых байт (это условие может и не проверяться) и верным значением CRC. Начальный нолик (вызывающий смену состояния) в EOP облегчает точное определение границы тела пакета. В пакетах SOF поле EOP удлинено до 40 бит для обнаружения отключения устройства.

Особенности сигналов в режиме HS

Подробности Родительская категория: USB Категория: Физический интерфейс USB

Высокая скорость (480 Мбит/с — всего в 2 раза медленнее, чем Gigabit Ethernet) требует тщательного согласования приемопередатчиков и линий связи. На этой скорости может работать только кабель с экранированной витой парой для сигнальных линий. Для высокой скорости аппаратура USB должна иметь дополнительные специальные приемопередатчики. К разводке проводов на печатной плате устройства от интерфейсной микросхемы USB до разъема (или подключения кабеля) предъявляют жесткие требования (максимальная длина, совпадение длин сигнальных проводников, удаленность от других сигнальных цепей, окружение «землей»).

В отличие от формирователей потенциала для режимов FS и LS передатчики HS являются источниками тока, ориентированными на наличие резисторов-терминаторов на обеих сигнальных линиях. Роль терминаторов играют резисторы Rz1 и Rz2 (см. рис. 12.2): при работе на HS дифференциальный передатчик FS/LS формирует SE0, то есть оба его выхода заземляются и эти резисторы оказываются нагрузками для линий D+ и D-. Их сопротивление (с учетом выходного импеданса передатчика) составляет 2×45 = 90 Ом, что и обеспечивает согласование с волновым сопротивлением линии (90 Ом). Устройство и хаб включают свои HS-терминаторы (и отключают Ruf) после успешного взаимного подтверждения режима HS, выполняемого в процессе сброса устройства.

Дифференциальные токовые передатчики формируют импульсы тока с номинальным значением 17,78 мА, который протекает через нагрузку 22,5 Ом (два нагрузочных резистора на обоих концах каждой сигнальной линии соединяются параллельно). При передаче сигнала J ток пропускается в линию D+, при K — в D-. Таким образом обеспечивается дифференциальный сигнал передачи около ±400 мВ.

На вход дифференциального приемника сигнал придет ослабленным; чтобы исключить влияние шумов, в схему устройства введен детектор амплитуды сигнала с порогом 100–150 мВ. Сигнал с дифференциального приемника игнорируется, пока не сработает детектор амплитуды сигнала (в спецификации USB этот прием называется receiver squelch). От срабатывания детектора амплитуды до включения дифференциального приемника может быть задержка до 4 bt, но это приведет лишь к сокращению длины принятой синхропоследовательности в начале пакета.

К статическим (уровни) и динамическим (длительности и время нарастания и спада) параметрам сигналов на HS предъявляются жесткие требования, и существуют специальные шаблоны (Eye Pattern), в которые должны укладываться сигналы. Для тестирования могут быть использованы широкополосные (не уже 1 ГГц) дифференциальные осциллографы и генераторы; выпускаются и специализированные тестеры устройств USB 2.0. Для тестирования HS-устройств (включая и хабы) в USB 2.0 определены специальные управляющие запросы, переводящие выбранный порт в тестовый режим. В стандартных запросах определены следующие тесты:

  • Test_SE0_NAK — перевод порта в HS-режим для тестирования выходного импеданса, уровня сигнала SE0 и нагрузочных характеристик;
  • Test_J — передача состояния J (подача тока в D+) для проверки уровня сигнала, выводимого на линию D+;
  • Test_K — передача состояния K (подача тока в D-) для проверки уровня сигнала, выводимого на линию D-;
  • Test_Packet — передача пакетов фиксированной структуры, позволяющая проверять динамические параметры сигнала и подключенные к нему приемники. Тестовый пакет выглядит как пакет данных DATA0, у которого в поле данных последовательно расположены 6 тестовых образцов (test pattern). Далее приводятся последовательности сигналов, передающихся на шину в этих образцах (вставка бит уже произведена):
    — Pattern 1 — 36 пар «JK»;
    — Pattern 2 — 16 повторов «JJKK»;
    — Pattern 3 — 8 повторов «JJJJKKKK» (4J и 4K);
    — Pattern 4 — 8 повторов «JJJJJJJKKKKKKK» (7J и 7K);
    — Pattern 5 — 8 повторов «JJJJJJJK» (7J и 1K);
    — Pattern 6 — 10 повторов «JKKKKKKK» (1J и 7K).
  • Test_Force_Enable — принудительный перевод нисходящих портов хаба в режим HS, даже при отключенных устройствах (для настройки детектора отключения).

Специальная сигнализация: обнаружение подключения-отключения, сброс устройств, приостановка и пробуждение

Подробности Родительская категория: USB Категория: Физический интерфейс USB

Хаб обнаруживает подключение устройства по уровням напряжения на линиях D+ и D–:

  • при отключенном устройстве на линиях D+ и D- уровни сигнала низкие (состояние SE0), что обусловлено резисторами Rd1 и Rd2 хаба;
  • при подключении LS-устройства повышается уровень сигнала D- за счет резистора Rul в устройстве (переход в состояние LS-Idle);
  • при подключении FS/HS-устройства повышается уровень сигнала D+ за счет резистора Rul в устройстве (переход в состояние FS-Idle).

Последовательность обнаружения подключения и сброса устройств FS и LS приведена на рисунках а и б соответственно. Хаб следит за сигналами нисходящего порта и сигнализирует об их смене. После обнаружения смены состояния системное ПО выжидает около 100 мс (время на успокоение сигналов) и проверяет состояния порта. Обнаружив факт подключения и тип устройства (LS или FS/HS), ПО дает для этого порта команду сброса шины.

Для выполнения сброса шины (команда Bus Reset) хаб опускает уровень поднятого устройством сигнала (D+ или D) на 10–20 мс (то есть подает сигнал SE0 в течение 10–20 мс). Считается, что через 10 мс после этого сброса устройство должно быть готово к конфигурированию (отзываться только на обращения к EP0 по нулевому адресу устройства).

Сброс шины для устройства HS запускает протокол согласования скорости. При подключении, как и по сигналу сброса, HS-устройство устанавливает свои схемы в состояние FS (отключая терминаторы и включая Ruf). Таким образом, поначалу HS-устройство выглядит для хаба как FS-устройство. Для согласования скорости используется так называемое «чириканье» (chirp-sequence): в ответ на состояние SE0, введенное хабом для сброса (заземлением линии D+), HS-устройство своим дифференциальным токовым передатчикам вводит состояние «chirp-K» (пуская импульс тока в линию D-). На этот импульс HS-хаб ответит импульсом на линии D+, так что получится состояние «chirp-J». Такой обмен импульсами повторяется еще дважды; после успеха согласования и устройство и хаб принимают режим работы HS (и резистор Ruf отключается). Все это «чириканье» занимает 10–20 мс, после чего шина переходит в состояние покоя HS-Idle (длительный сигнал SE0). Теперь хосту надо снова опросить состояние порта хаба, чтобы уточнить режим подключенного устройства (FS или HS). Если HS-устройство подключено к FSпорту, хаб на «чириканье» устройства не ответит.

Отключение устройств FS/LS обнаруживается хабом просто по длительному (более 2 мкс) состоянию SE0. Этот факт хаб доводит до сведения системного ПО (USBD), чтобы устройство было вычеркнуто из всех рабочих списков. Отключение устройств HS таким способом обнаружить не удается, поскольку состояние шины (SE0) при отключении устройства не изменится. Для обнаружения отключения HS-устройства используют эффект отражения сигнала при потере согласованности линии. Специально для этих целей в схему хаба введен дополнительный детектор отключения, а в маркере микрокадра SOF признак EOP (0111…111) удлинен до 40 битовых интервалов. Транслируя SOF на высокоскоростной порт, детектор отключения следит за уровнем сигнала J, и если он превышает порог (625 мВ дифференциального сигнала), значит, нагрузки на другой стороне нет, то есть устройство отключено. Удлинение EOP необходимо, поскольку устройство может отключиться внутренне, и из-за задержки в кабеле устройства (2×26 нс) отраженный сигнал может задержаться до 25 нс. С целью сокращения накладных расходов это удлинение EOP сделали только для пакетов SOF, появляющихся всего раз в 125 мкс.

Команду приостановки устройства — Suspend хаб сигнализирует длительным состоянием покоя (Bus Idle). При этом он должен переставать транслировать все кадры, включая и маркеры микрокадров на порты, для которых подается эта команда. На порты, работающие в LS-режиме, маркеры кадров не транслируются; чтобы LS-устройство не приостанавливалось при отсутствии полезного трафика, ему вместо маркеров SOF хаб с тем же периодом посылает сигнал LS-EOP (SE0 в течении 1,33 мкс). Приостановка делается не менее чем на 20 мс — за это время устройство должно успеть перейти в приостановленное состояние и стать готовым к получению сигнала возобновления.

Команду приостановки HS-порта хаб сигнализирует покоем (SE0) в течение 3 мс, после чего переключает свои цепи в режим FS (отключает терминаторы), но помнит, что порт находится в режиме HS. Для HS-устройства команда приостановки поначалу неотличима от сброса. Чтобы их различить, через 3–3,125 мс непрерывного состояния SE0 HS-устройство переключает свои цепи в режим FS (отключает терминаторы и включает Ruf). Далее, через 100–875 мкс устройство проверяет состояние линий. Если обе лини D+ и D- оказались в низкоуровневом состоянии, значит, хаб подал команду сброса (и устройство должно выполнить chirp-последовательность). Если уровень D+ высокий, а D- низкий (FS-Idle), то это сигнал к приостановке. Таким образом, по состоянию сигналов на шине приостановка выглядит как покой LS/FS — то есть состояние J.

Сигналом к возобновлению работы (resume) является перевод шины в состояние K на длительное время (20 мс), достаточное для «оживления» устройств, после чего хаб посылает сигнал LS-EOP (SE0 в течение 1,33… мкс). После этого шина переходит в состояние покоя соответствующей скорости и начинает передаваться трафик. Сигнал возобновления может подать как хаб, так и приостановленное устройство; последний случай называется удаленным пробуждением. По сигналу возобновления устройство, работавшее в HS-режиме, и его порт хаба переключают свои цепи в HS-режим без всякого согласования (они помнят свой режим).

Удаленное пробуждение — Remote Wakeup — это единственный случай на USB, когда сигнальную инициативу проявляет устройство (а не хост). Сигнал пробуждения может подать только приостановленное устройство, для которого шина находится в FS/LS-состоянии J (резисторами подтягивается вверх D+ или D-). Для сигнализации пробуждения устройство на некоторое время (1–15 мс) формирует состояние K, которое воспримется хабом как сигнал Resume и транслируется им на восходящий порт и на все разрешенные нисходящие порты, включая и тот порт, с которого пришел данный сигнал.

Еще статьи.

  1. Питание от шины
  2. Управление потреблением: приостановка, возобновление и удаленное пробуждение

USB (Universal Serial Bus, универсальная последовательная шина)

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

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

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

История

USB шина появилась в 1996 году как попытка решения проблемы множественности интерфейсов. К тому времени персональные компьютеры (ПК) были оснащены большим количеством разнообразных внешних полезных и необходимых интерфейсов, но все они требовали своего специального разъема и, чаще всего, выделенного аппаратного прерывания (IRQ, Interrupt ReQuest).

USB была разработана группой из семи компаний(Compaq, Digital Equipment Corp, IBM PC Co., Intel, Microsoft, NEC и Northern Telecom).

Первая спецификация (версия 1.0) USB была опубликована в начале 1996 года, а осенью 1998 года появилась спецификация 1.1, исправляющая проблемы, обнаруженные в первой редакции. Весной 2000 года была опубликована версия 2.0, в которой предусматривалось 40-кратное повышение пропускной способности шины. Так, спецификация 1.0 и 1.1 обеспечивает работу на скоростях 12 Мбит/с и 1,5 Мбит/с, а спецификация 2.0 – на скорости 480 Мбит/с. При этом предусматривается обратная совместимость USB 2.0 с USB 1.х.

Окончательная спецификация USB 3.0 появилась в 2008 году. Созданием USB 3.0 занимались компании Intel, Microsoft, Hewlett-Packard, Texas Instruments, NEC и . NXP Semiconductors В спецификации USB 3.0 разъёмы и кабели обновлённого стандарта физически и функционально совместимы с USB 2.0. В дополнение к четырем линиям USB 2.0 в USB 3.0 добавляется еще четыре линии связи (две витых пары). Новые контакты в разъемах USB 3.0 расположены отдельно от старых на другом контактном ряду. Спецификация USB 3.0 повышает максимальную скорость передачи информации до 4,8 Гбит/с, таким образом, скорость передачи возрастает с 60 Мбайт/с до 600 Мбайт/с и позволяет передать 1 Тб не за 8-10 часов, а за 40 минут-1 час. Версия 3.0 так же может похвастаться увеличенной силой тока с 500 мА до 900 мА, поэтому пользователь может не только подпитывать от одного хаба большее количество устройств, но и сами устройства во многих случаях смогут избавиться от отдельных блоков питания.

Общая архитектура USB

Физическая архитектура USB определяется следующими правилами:

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

Самым верхним уровнем является корневой концентратор, который обычно совмещается с USB контроллером.

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

Пример подключения устройств USB

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

Логическая архитектура- звезда Отношения клиентского программного обеспечения и USB устройств

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

Составляющие USB

Шина USB состоит из следующих элементов:

  • хост-контроллер (host controller, коротко хост) – главный контроллер, который входит в состав системного блока компьютера и управляет работой всех устройств на шине USB. На шине USB допускается наличие только одного хоста. Системный блок персонального компьютера содержит один или несколько хостов, каждый из которых управляет отдельной шиной USB.
    В обязанности хоста входит:
    • слежение за подключением и отключением устройств;
    • организация управляющих потоков между USB-устройством и хостом;
    • организация потоков данных между USB-устройством и хостом;
    • контроль состояния устройств и ведение статистики активности;
    • снабжение подключенных устройств электропитанием.
  • устройство (device) может представлять собой хаб, функцию или их комбинацию (compound device); порт (port) – точка подключения;
  • хаб (hub, концентратор) – устройство, которое обеспечивает дополнительные порты на шине USB, т.е. хаб преобразует один порт (восходящий порт, upstream port) во множество портов (нисходящие порты, downstream ports). Архитектура допускает соединение нескольких хабов (не более 5). Хаб распознает подключение и отключение устройств к портам и может управлять подачей питания на порты. Каждый из портов может быть разрешен или запрещен и сконфигурирован на полную или ограниченную скорость обмена. Хаб обеспечивает изоляцию сегментов с низкой скоростью от высокоскоростных. Хаб может ограничивать ток, потребляемый каждым портом;
  • корневой хаб (root hub) – это хаб, входящий в состав хоста;
  • функция (function) – это переферийное USB-устройство или его отдельный блок, способный передавать и принимать информацию по шине USB. Перед использованием функция должна быть сконфигурирована хостом – ей должна быть выделена полоса в канале и выбраны опции конфигурации;
  • логическое USB-устройство (logical device) представляет собой набор конечных точек, с которыми возможен обмен данными. Число и функции точек зависят от устройства и выполняемых им функций, и определяются при производстве. В обязательном порядке присутствует точка с номером 0 — для контроля состояния устройства и управления им. До осуществления конфигурирования устройства через точку 0 остальные каналы не доступны.
    Каждая конечная точка устройства описывается следующими параметрами:
    • частотой обращения к шине и требованиями к задержкам;
    • необходимой полосой пропускания;
    • номером конечной точки;
    • требованиями к обработке ошибок;
    • максимальным размером кадра, который может быть принят или послан;
    • типом поддерживаемой передачи данных;
    • направлением осуществления передачи между конечной точной и хостом.

Свойства USB-устройств

  • адресация – устройство должно отзываться на назначенный ему уникальный адрес и только на него;
  • конфигурирование – после включения или сброса устройство должно предоставлять нулевой адрес для возможности конфигурирования его портов;
  • передача данных – устройство имеет набор конечных точек для обмена данными с хостом. Для конечных точек, допускающих разные типы передач, после конфигурирования доступен только один из них;
  • управление энергопотреблением – любое устройство при подключении не должно потреблять от шины ток, превышающий 100 мА. При конфигурировании устройство заявляет свои потребности тока, но не более 500 мА. Если хаб не может обеспечить устройству заявленный ток, устройство не будет использоваться;
  • приостановка – USB-устройство должно поддерживать приостановку (suspended mode), при которой его потребляемый ток не превышает 500 мкА. USB-устройство должно автоматически приостанавливаться при прекращении активности шины;
  • удаленное пробуждение – возможность удаленного пробуждения (remote wakeup) позволяет приостановленному USB-устройству подать сигнал хосту, который тоже может находиться в приостановленном состоянии. Возможность удаленного пробуждения описывается в конфигурации USB-устройства. При конфигурировании эта функция может быть запрещена.

Логические уровни обмена данными

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

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

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

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

    Взаимодействие компонентов USB представлено на схеме ниже:

    Взаимодействие компонентов USB

    В рассматриваемую структуру входят следующие элементы:

    Физическое устройство USB — устройство на шине, выполняющее функции, интересующие конечного пользователя.

    Client SW — ПО, соответствующее конкретному устройству, исполняемое на хост-компьютере. Может являться составной частью ОС или специальным продуктом.

    USB System SW — системная поддержка USB, независимая от конкретных устройств и клиентского ПО.

    USB Host Controller — аппаратные и программные средства для подключения устройств USB к хост-компьютеру.

    Принципы передачи данных

    Механизм передачи данных является асинхронным и блочным. Блок передаваемых данных называется USB-фреймом или USB-кадром и передается за фиксированный временной интервал. Оперирование командами и блоками данных реализуется при помощи логической абстракции, называемой каналом. Канал является логической связкой между хостом и конечной точкой внешнего устройства.

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

    Поток доставляет данные от одного конца канала к другому, он всегда однонаправленный. Один и тот же номер конечной точки может использоваться для двух поточных каналов — ввода и вывода. Поток может реализовывать следующие типы обмена: сплошной, изохронный и прерывания. Доставка всегда идет в порядке «первым вошел — первым вышел» (FIFO); с точки зрения USB, данные потока неструктурированны. Сообщения имеют формат, определенный спецификацией USB. Хост посылает запрос к конечной точке, после которого передается (принимается) пакет сообщения, за которым следует пакет с информацией состояния конечной точки. Последующее сообщение нормально не может быть послано до обработки предыдущего, но при отработке ошибок возможен сброс необслуженных сообщений. Двухсторонний обмен сообщениями адресуется к одной и той же конечной точке. Для доставки сообщений используется только обмен типа «управление».

    С каналами связаны характеристики, соответствующие конечной точке. Каналы организуются при конфигурировании устройств USB. Для каждого включенного устройства существует канал сообщений (Control Pipe 0), по которому передается информация конфигурирования, управления и состояния.

    Любой обмен по шине USB инициируется хост-контроллером. Он организует обмены с устройствами согласно своему плану распределения ресурсов.

    Контроллер циклически (с периодом 1,0 ± 0,0005 мс) формирует кадры (frames), в которые укладываются все запланированные передачи.

    Поток кадров USB

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

    В режиме высокоскоростной передачи пакеты SOF передаются в начале каждого микрокадра (период 125 ± 0,0625 мкс).

    Хост планирует загрузку кадров так, чтобы в них всегда находилось место для наиболее приоритетных передач, а свободное место кадров заполняется низкоприоритетными передачами больших объемов данных. Спецификация USB позволяет занимать под периодические транзакции (изохронные и прерывания) до 90% пропускной способности шины.

    Каждый кадр имеет свой номер. Хост-контроллер оперирует 32-битным счетчиком, но в маркере SOF передает только младшие 11 бит. Номер кадра циклически увеличивается во время EOF.

    Для изохронной передачи важна синхронизация устройств и контроллера. Есть три варианта синхронизации:

    • синхронизация внутреннего генератора устройства с маркерами SOF;
    • подстройка частоты кадров под частоту устройства;
    • согласование скорости передачи (приема) устройства с частотой кадров.

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

    Информация по каналу передается в виде пакетов (Packet). Каждый пакет начинается с поля синхронизации SYNC (SYNChronization), за которым следует идентификатор пакета PID (Packet IDentifier). Поле Check представляет собой побитовую инверсию PID.

    Структура пакета

    Структура данных пакета зависит от группы, к которой он относится.

    Последовательности пакетов

    Уровни передачи данных

    1. Клиентское ПО посылает IPR-запросы уровню USBD.

    2. Драйвер USBD разбивает запросы на транзакции по следующим правилам:

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

    3. Драйвер контроллера хоста принимает от системного драйвера шины перечень транзакций и выполняет следующие действия:

    • планирует исполнение полученных транзакций, добавляя их к списку транзакций;
    • извлекает из списка очередную транзакцию и передает ее уровню хост-контроллера интерфейса шины USB;

    4. Хост-контроллер интерфейса шины USB формирует кадры;

    5. Кадры передаются последовательной передачей бит по методу NRZI

    Таким образом, можно сформировать следующую упрощенную схему:

    1. каждый кадр состоит из наиболее приоритетных посылок, состав которых формирует драйвер хоста;

    2. каждая передача состоит из одной или нескольких транзакций;

    3. каждая транзакция состоит из пакетов;

    4. каждый пакет состоит из идентификатора пакета, данных (если они есть) и контрольной суммы.

    Типы сообщений в USB

    Спецификация шины определяет четыре различных типа передачи (transfer type) данных для конечных точек:

    • управляющие передачи (Control Transfers) — используются хостом для конфигурирования устройства во время подключения, для управления устройством и получения статусной информации в процессе работы. Протокол обеспечивает гарантированную доставку таких посылок. Длина поля данных управляющей посылки не может превышать 64 байт на полной скорости и 8 байт на низкой. Для таких посылок хост гарантированно выделяет 10% полосы пропускания;
    • передачи массивов данных (Bulk Data Transfers) — применяются при необходимости обеспечения гарантированной доставки данных от хоста к функции или от функции к хосту, но время доставки не ограничено. Такая передача занимает всю доступную полосу пропускания шины. Пакеты имеют поле данных размером 8, 16, 32 или 64 байт. Приоритет у таких передач самый низкий, они могут приостанавливаться при большой загрузке шины. Допускаются только на полной скорости передачи. Такие посылки используются, например, принтерами или сканерами;
    • передачи по прерываниям (Interrupt Transfers) — используются в том случае, когда требуется передавать одиночные пакеты данных небольшого размера. Каждый пакет требуется передать за ограниченное время. Операции передачи носят спонтанный характер и должны обслуживаться не медленнее, чем того требует устройство. Поле данных может содержать до 64 байт на полной скорости и до 8 байт на низкой. Предел времени обслуживания устанавливается в диапазоне 1—255 мс для полной скорости и 10—255 мс — для низкой. Такие передачи используются в устройствах ввода, таких как мышь и клавиатура;
    • изохронные передачи (Isochronous Transfers) — применяются для обмена данными в «реальном времени», когда на каждом временном интервале требуется передавать строго определенное количество данных, но доставка информации не гарантирована (передача данных ведется без повторения при сбоях, допускается потеря пакетов). Такие передачи занимают предварительно согласованную часть пропускной способности шины и имеют заданную задержку доставки. Изохронные передачи обычно используются в мультимедийных устройствах для передачи аудио- и видеоданных, например, цифровая передача голоса. Изохронные передачи разделяются по способу синхронизации конечных точек — источников или получателей данных — с системой: различают асинхронный, синхронный и адаптивный классы устройств, каждому из которых соответствует свой тип канала USB.

    Механизм прерываний

    Для шины USB настоящего механизма прерываний не существует. Вместо этого хост опрашивает подключенные устройства на предмет наличия данных о прерывании. Опрос происходит в фиксированные интервалы времени, обычно каждые 1 – 32 мс. Устройству разрешается посылать до 64 байт данных.

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

    Режимы передачи данных

    Шина USB имеет три режима передачи данных:

    • низкоскоростной (LS, Low-speed) 1.5 Мбит/с;
    • полноскоростной (LF, Full-speed) 12 Мбит/с;
    • высокоскоростной (HS, High-speed, только для USB 2.0) 480 Мбит/с.

    Подключение периферийных устройств к шине USB

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

    Спецификация 1.0 регламентировала два типа разъёмов:

    USB тип A (розетка, вилка) USB 2.0 тип B (вилка, розетка)

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

    USB mini

    Существуют также разъёмы типа Mini AB и Micro AB, с которыми соединяются соответствующие коннекторы как типа A, так и типа B.

    micro USB

    Так же существуют миниатюрные разъёмы — Micro USB.

    Поговорим о USB.

    Я не буду говорить ни о USB2 ни тем более о USB3. Это для меня в пока основном «высокие материи». Давайте поговорим о старом добром USB1.1.
    И пожалуйста не смейтесь. На самом деле, если Вы поищите в русскоязычном интернете техническую спецификацию на USB1.1 (я уже не говорю про USB2, а в USB3 наверное Intel вообще не публикует деталей), то вряд ли Вы найдете там что нибудь стоящее. В основном у нас можно найти общие сведения и общие фразы. Нас же, как разработчиков аппаратуры интересуют технические детали стандарта и возможность реализации устройств поддерживающих его.
    Еще конкретнее вопрос стоит так: сможем ли мы подключить платку Марсоход через USB к компьютеру?

    Естественно прежде всего нужно ознакомиться со спецификацией USB1.1. Теоретически нужно посетить сайт www.usb.org и взять там все, что нужно. Однако не все так просто. Взять оттуда скорее всего у Вас просто так не получится. Спецификации они почему-то продают http://www.usb.org/developers/estoreinfo/USB_product_order_form.pdf да и найти нужное в дебрях этого сайта не просто.
    Теперь спецификацию на USB1.1 можно взять на нашем сайте!

    техническая спецификация USB1.1 ( 2021447 bytes )

    Здесь же, в этой статье, я попробую описать основные принципы работы USB1.1.
    Сразу сделаю оговорку: во-первых, я не очень люблю USB1.1, слишком уж замудрено он придуман (мне кажется можно было сделать проще), во-вторых, естественно, в маленькой статье невозможно описать все. Прошу заметить, что в файле спецификации USB1.1 целых 327 ужасных страниц текста и картинок. Если у Вас есть мысль напечатать это на принтере, то не советую. Реально полезной информации там не очень много, зато «много букав».

    Итак, приступим.
    В разъеме USB1.1 всего четыре контакта:

    • Земля (4, обычно черный провод в кабеле);
    • DP (3, обычно зеленый провод в кабеле);
    • DM (2, обычно белый провод в кабеле);
    • +5V (1, обычно красный провод в кабеле).

    Таким образом, мы видим всего 2 сигнала для обмена данными между хостом (компьютером) и подключаемым устройством. Эти сигналы DP и DM (иногда их обозначают D+ и D-) – это дифференциальная пара. Сигнал передается по ним в противофазе. Это позволяет на приемном конце бороться с помехами.

    Как хост определяет, что подключено новое устройство? Довольно просто. На стороне хоста обе линии DP и DM притянуты к GND через резисторы 15кОм. Контроллер хоста проверяет состояние этих линий. Если на обеих линиях ноль, то это значит, что ничего не подключено. На стороне подключаемого устройства один из сигналов притянут через резистор 1,5кОм к напряжению питания. Таким образом, если устройство подключено, то одна из линий либо DP либо DM поднимается в состояние «единица» и хост контроллер видит, что подключено новое устройство.

    usb_low_speed

    Устройства для USB1.1 бывают двух типов: полноскоростные (full speed) и низкоскоростные (low speed). Посмотрите на эти две картинки:

    usb_full_speed

    Таким образом, полноскоростные устройства имеют подтягивающий резистор на +5В для сигнала D+, а низкоскоростные устройства – для сигнала D-.

    Частота передачи данных для полноскоростных устройств 12МГц, а для низкоскоростных 1,5МГц. Низкоскоростное устройство принимает и посылает данные до 8 байт длиной. Высокоскоростное устройство может посылать или принимать до 64 байт данных.

    Особо следует отметить, что эти две линии D+ и D- служат для передачи данных в обе стороны. Как же разрешаются конфликты на линиях, если оба и хост и подключенное устройство захотят передавать данные? Такая ситуация не должна случаться в принципе. Дело в том, что передача полностью управляется хост контроллером компьютера. Если хост контроллера должен прочитать данные с устройства, то он посылает соответствующую команду и переключается в режим приема, а затем ждет пакета от подключенного устройства.

    Хост контроллер компьютера ведет опрос подключенных устройств каждую миллисекунду – этот временной промежуток называется фреймом. В начале каждого фрейма хост контроллер посылает специальный SOF (Start Of Frame) пакет для полноскоростных подключенных устройств или SE0 для низкоскоростных устройств.

    Если устройство не получает SOF или SE0 некоторое время (несколько фреймов), то это означает, что оно должно уйти в спячку (suspend) и по возможности снизить энергопотребление.

    Отдельно нужно обратить внимание на состояние SE0. Это состояние, когда обе линии DP и DM находятся «в нуле». Это состояние используется в 3-х случаях.

    Во-первых, после подключения устройства программное обеспечение хоста дает ему команду «сброс» (Reset). Хост опускает обе линии DP и DM в «ноль» на время большее 10мс. Подключенное устройство должно воспринять это действие как общий «сброс».

    Во-вторых, как я уже сказал, для низкоскоростных утройств каждый фрейм начинается с состояния SE0 (обе линии DP и DM в нуле) длительностью 2 такта от 1.5МГц.

    В-третьих, каждый посланый пакет в любую сторону, от хоста к устройству или наоборот, всегда заканчивается состоянием EOP (End Of Packet), и этот EOP — это тот же самый SE0 – обе линии DP и DM в нуле на протяжении времени 2 бит передачи данных. Для полноскоростных устройств это 2 такта от 12МГц. Для низкоскоростных устройств это 2 такта от 1,5МГц.

    ls_usb_signals

    Все данные в любую сторону оформлены в виде пакетов. Давайте посмотрим как они выглядят на физическом уровне. Лучше всего изучать по картинкам, а они в спецификации USB1.1 какие-то не очень понятные. Я нарисовал свою картинку.

    Здесь видно, что подключено низкоскоростное устройство, так как фрейм начинается с SE0 – по времени 2 бита DP и DM находятся в нуле.

    Дальше видно 3 пакета: хост посылает пакет SETUP, посылает пакет DATA0 и получает от устройства пакет ACK. Каждый пакет всегда начинается со специального символа SYN, его значение 0x80. Байт передается младшими битами вперед. Кодировка несколько странная. Каждый нулевой бит кодируется изменением сигнала DP/DM на противоположный. Каждый единичный бит состояние линий не изменяется. Однако есть исключение – если в передаваемом потоке окажется подряд шесть единиц, то состояние линий DP/DM принудительно меняется на противоположный. Этот нулевой бит должен быть удален на приемном конце при приеме пакета. Этот алгоритм называется «bit stuffing». Обратите внимание на завершение пакетов состоянием SE0 – EOP (End Of Packet). Интервал между пакетами должен быть не менее времени 2 бит, на практике обычно больше. Это был физический уровень связи.

    Рассмотрим уровень протокола. Здесь все гораздо более запутанно. Без поллитра не разобраться (конечно если Вам больше восемнадцати). Для чего разработчики стандарта сделали все это так сложно я и сам не пойму.

    Существуют пакеты нескольких типов. В каждом типе есть под-типы (это мое определение, в спецификации так не говорят).
    Итак вот таблица:

    Тип пакета Идентификатор пакета PID в шестнадцатеричном виде Описание
    Token OUT 0xE1 Используется для передачи адреса устройства и номера канала (endpoint) во время транзакции передачи данных от хоста к уствойству
    Token IN 0x69 Используется для передачи адреса устройства и номера канала (endpoint) во время транзакции передачи данных от устройства к хосту
    Token SETUP 0x2D Используется для передачи адреса устройства и номера канала (endpoint) во время транзакции передачи данных от хоста к уствойству к специальному управляющему каналу (control pipe)
    Token SOF 0xA5 Маркер начала фрейма и номер фрейма
    Data DATA0 0xC3 Используется для передачи четного пакета данных
    Data DATA1 0x4B Используется для передачи нечетного пакета данных
    Handshake ACK 0xD2 Подтверждение о приеме данных
    Handshake NAK 0x5A Либо приемник не может принят данных либо передатчик не может послать
    Handshake STALL 0x1E Останов endpoint или служебный запрос не поддерживается
    Special PRE 0x3C Посылается USB хабу, когда требуется переключить скорость в низкоскоростную

    usb_token_pkt

    Рассмотрим формат основных пакетов: token, data, handshake.
    Не забудьте, что в линии USB пакеты посылаются начиная с символа SYN 0х80, а уж затем вот эти пакеты и завершаются они EOP (2 такта линии DP и DM в нуле).

    usb_data_pkt

    usb_handshake_pkt

    Для token и data еще нужно посчитать контрольные суммы. Их можно считать вот так (написано на языке C):

    //функция принимает двухбайтовое слово где адрес и номер канала, считает CRC5 и //вписывает контрольную сумму прямо в нужное место этого слова
    USHORT CalcCrc5ForUsbTokenPacket(USHORT a)
    ULONG b = 0x1f;
    USHORT d = a;
    for(int i=0; i if((d^b)&1)
    b >>= 1;
    b ^= 0x14;
    >
    else
    b >>= 1;
    d >>= 1;
    >

    b ^= 0xffffffff;
    b a |= b;
    return (USHORT)a;
    >

    usb_dialog

    //функция принимает указатель на пакет данных (без PID) и длину пакета
    //возвращает CRC16
    USHORT CalcCrc16ForUsbDataPacket(char *pData, int len)
    USHORT b = 0xFFFF;
    for(int i=0; i char a = *pData++;
    for(int j=0; j if((a^b)&1)
    b >>= 1;
    b ^= 0xa001;
    >
    else
    b >>= 1;
    a >>= 1;
    >
    >
    b ^= 0xffffffff;
    return (USHORT)b;
    >

    Ну а на последок, чтобы Вы оценили все «прелесть» диалога между хостом (компьютером) и подключенным устройством посмотрите на следующую картинку:

    Это снимок экрана с программы USB Tracker – устройства позволяющего записывать и анализировать весь трафик между хостом и устройством.

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

    USB (Universal Serial Bus)

    Шина USB (Universal Serial Bus, универсальная последовательная шина) появилась в начале 1996 года как попытка решения проблемы множественности интерфейсов. К тому времени персональные компьютеры (ПК) были оснащены большим количеством разнообразных внешних интерфейсов, полезных и необходимых, но обладающих одним недостатком: все они требовали своего специального разъема и, чаще всего, выделенного аппаратного прерывания (IRQ, Interrupt ReQuest).

    Первая спецификация (версия 1.0) USB была опубликована в начале 1996 года, а осенью 1998 года появилась спецификация 1.1, исправляющая проблемы, обнаруженные в первой редакции. Весной 2000 года была опубликована версия 2.0, в которой предусматривалось 40-кратное повышение пропускной способности шины. Так, спецификация 1.0 и 1.1 обеспечивает работу на скоростях 12 Мбит/с и 1,5 Мбит/с, а спецификация 2.0 – на скорости 480 Мбит/с. При этом предусматривается обратная совместимость USB 2.0 с USB 1.х, т.е. «старые» USB 1.х устройства будут работать с USB 2.0 контроллерами, правда, на скорости 12 Мбит/с.

    Разработчики шины ориентировались на создание интерфейса, обладающего следующими свойствами:

    o легкореализуемое расширение периферии ПК;

    o дешевое решение, позволяющее передавать данные со скоростью до 12 Мбит/с (480 Мбит/с для USB 2.0);

    o полная поддержка в реальном времени голосовых, аудио- и видеопотоков;

    o гибкость протокола смешанной передачи изохронных данных и асинхронных сообщений;

    o интеграция с выпускаемыми устройствами;

    o охват всевозможных конфигураций и конструкций ПК;

    o обеспечение стандартного интерфейса, способного быстро завоевать рынок;

    o создание новых классов устройств, расширяющих ПК.

    Спецификация USB определяет следующие функциональные возможности интерфейса:

    o простота использования для конечного пользования;

    · простота кабельной системы и подключений;

    · скрытие подробностей электрического подключения от конечного пользователя;

    · самоидентифицирующиеся устройства с автоматическим конфигурированием;

    · динамическое подключение и переконфигурирование периферийных устройств;

    o широкие возможности работы;

    · пропускная способность от нескольких Кбит/с до нескольких Мбит/с;

    · поддержка одновременно как изохронной, так и асинхронной передачи данных;

    · поддержка одновременных операций со многими устройствами (multiple connections);

    · поддержка до 127 устройств на шине;

    · передача разнообразных потоков данных и сообщений;

    · поддержка составных устройств (периферийных устройств, выполняющих несколько функций);

    · низкие накладные расходы передачи данных;

    o равномерная пропускная способность;

    · гарантированная пропускная способность и низкие задержки голосовых и аудиоданных;

    · возможность использования всей полосы пропускания;

    · поддержка разных размеров пакетов, которые позволяют настраивать функции буферизации устройств;

    · настраиваемое соотношение размера пакета и задержки данных;

    · управление потоком (flow control) данных на уровне протокола;

    · контроль ошибок и восстановление на уровне протокола;

    · динамическое добавление и удаление устройств прозрачно для конечного пользователя;

    · поддержка идентификации неисправных устройств;

    · исключение неправильного соединения устройств;

    o выгода для разработчиков;

    · простота реализации и внедрения;

    · объединение с архитектурой Plug and Play;

    o дешевая реализация;

    · дешевые каналы со скоростью работы до 1,5 Мбит/с;

    · оптимизация для интеграции с периферией;

    · применимость для реализации дешевой периферии;

    · дешевые кабели и разъемы;

    · использование выгодных товарных технологий;

    o возможность простого обновления.

    Практически все поставленные задачи были решены, и весной 1997 года стали появляться компьютеры, оборудованные разъемами для подключения USB-устройcтва

    Общая архитектура USB

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

    Физическая и логическая архитектура USB

    Физическая архитектура USB определяется следующими правилами:

    o устройства подключаются к хосту;

    o физическое соединение устройств между собой осуществляется по топологии многоярусной звезды, вершиной которой является корневой хаб;

    o центром каждой звезды является хаб;

    o каждый кабельный сегмент соединяет между собой две точки: хост с хабом или функцией, хаб с функцией илидругим хабом;

    o к каждому порту хаба может подключаться периферийное USB-устройство или другой хаб, при этом допускаются до 5 уровней каскадирования хабов, не считая корневого.

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

    Составляющие USB

    Шина USB состоит из следующих элементов:

    • хост-контроллер (host controller) – это главный контроллер, который входит в состав системного блока компьютера и управляет работой всех устройств на шине USB. Для краткости мы будем писать просто хост. На шине USB допускается наличие только одного хоста. Системный блок персонального компьютера содержит один или несколько хостов, каждый из которых управляет отдельной шиной USB;
    • устройство (device) может представлять собой хаб, функцию или их комбинацию (compound device);
    • порт (port) – точка подключения;
    • хаб (hub, другое название — концентратор) – устройство, которое обеспечивает дополнительные порты на шине USB. Другими словами, хаб преобразует один порт (восходящий порт, upstream port) во множество портов (нисходящие порты, downstream ports). Архитектура допускает соединение нескольких хабов (не более 5). Хаб распознает подключение и отключение устройств к портам и может управлять подачей питания на порты. Каждый из портов может быть разрешен или запрещен и сконфигурирован на полную или ограниченную скорость обмена. Хаб обеспечивает изоляцию сигментов с низкой скоростью от высокоскоростных. Хаб может ограничивать ток, потребляемый каждым портом;
    • корневой хаб (root hub) – это хаб, входящий в состав хоста;
    • функция (function) – это переферийное USB-устройство или его отдельный блок, способный передавать и принимать информацию по шине USB. Каждая функция представляет конфигурационную информацию, описывающую возможности периферийного USB-устройства и требования к ресурсам. Перед использованием функция должна быть сконфигурирована хостом – ей должна быть выделена полоса в канале и выбраны опции конфигурации;
    • логическоеUSB-устройство (logical device) представляет собой набор конечных точек.

    Свойства USB-устройств

    Спецификация USB достаточно жестко определяет набор свойств, которые должно поддерживать любое USB-устройство:

    o адресация – устройство должно отзываться на назначенный ему уникальный адрес и только на него;

    o конфигурирование – после включения или сброса устройство должно предоставлять нулевой адрес для возможности конфигурирования его портов;

    o передача данных – устройство имеет набор конечных точек для обмена данными с хостом. Для конечных точек, допускающих разные типы передач, после конфигурирования доступен только один из них;

    o управление энергопотреблением – любое устройство при подключении не должно потреблять от шины ток, превышающий 100 мА. При конфигурировании устройство заявляет свои потребности тока, но не более 500 мА. Если хаб не может обеспечить устройству заявленный ток, устройство не будет использоваться;

    o приостановка – USB-устройство должно поддерживать приостановку (suspended mode), при которой его потребляемый ток не превышает 500 мкА. USB-устройство должно автоматически приостанавливаться при прекращении активности шины;

    o удаленное пробуждение – возможность удаленного пробуждения (remote wakeup) позволяет приостановленному USB-устройству подать сигнал хосту, который тоже может находиться в приостановленном состоянии. Возможность удаленного пробуждения описывается в конфигурации USB-устройства. При конфигурировании эта функция может быть запрещена.

    Принципы передачи данных

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

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

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

    Механизм прерываний

    Для шины USB настоящего механизма прерываний (как, например, для последовательного порта) не существует. Вместо этого хост опрашивает подключенные устройства на предмет наличия данных о прерывании. Опрос происходит в фиксированные интервалы времени, обычно каждые 1 – 32 мс. Устройству разрешается посылать до 64 байт данных.

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

    Режимы передачи данных

    Пропускная способность шины USB, соответствующей спецификации 1.1, составляет 12Мбит/с (т.е. 1,5 Мбит/с). Спецификация 2.0 определяет шину с пропускной способностью 400 Мбайт/с. Полоса пропускания делится между всеми устройствами, подключенными к шине.

    Шина USB имеет три режима передачи данных:

    o низкоскоростной (LS, Low-speed);

    o полноскоростной (LF, Full-speed);

    o высокоскоростной (HS, High-speed, только для USB 2.0).

    Логические уровни обмена данными

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

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

    o уровень клиентского ПО в хосте:

    · обычно представляется драйвером USB-устройства;

    · обеспечивает взаимодействие пользователя с операционной системой с одной стороны и системным драйвером с другой;

    o уровень системного драйвера USB в хосте(USB, Universal Serial Bus Driver):

    · управляет нумерацией устройств на шине;

    · управляет распределением пропускной способности шины и мощности питания;

    · обрабатывает запросы пользовательских драйверов;

    o уровень хост-контроллера интерфейса шины USB (HCD, Host Controller Driver):

    · преобразует запросы ввода/вывода в структуры данных, по которым выполняются физические транзакции;

    · работает с регистрами хоста.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *