КРАТКОЕ
ОПИСАНИЕ ИНТЕРФЕЙСA USB
Физические спецификации интерфейса
Максимальная скорость передачи . 12 Мбит/c
Режим низкоскоростной передачи . 1.5 Мбит/с
Обе скорости работают на одной шине благодаря динамическому переключению скоростей.
Режим низкоскоростной передачи предназначен для поддержки ограниченного числа
медленных устройств, таких как мышь. Включение большого числа таких устройств
значительно снижает пропускную способность шины.
Определение скоростных характеристик устройства и самого факта включения его
на шину производится благодаря имеющихся в устройстве pullup-резисторов, подключенных
к сигналу D+ или D-. Подключение к сигналу D+ сигнализирует
подключение полноскоростного устройства, к D- - низкоскоростного. Синхроимульсы
передаются закодированными вместе с информацией. Самосинхронизирующаяся последовательность
реализована по схеме NRZI with bit stuffing. NRZI - Non Return to Zero Invert
to ones - метод без возврата к нулю с инвертированием для единиц. Этот метод
представляет собой модификацию простого потенциального метода кодирования, называемого
Non Return to Zero (NRZ), когда для представления 1 и 0 используются потенциалы
двух уровней. В методе NRZI также используется два уровня потенциала сигнала,
но потенциал, используемый для кодирования текущего бита зависит от потенциала,
который использовался для кодирования предыдущего бита (так называемое, дифференциальное
кодирование). Если текущий бит имеет значение 1, то текущий потенциал представляет
собой инверсию потенциала предыдущего бита, независимо от его значения. Если
же текущий бит имеет значение 0, то текущий потенциал повторяет предыдущий.
Из описания метода NRZI видно, что для обеспечения частых изменений сигнала,
а значит и для поддержания самосинхронизации приемника, нужно исключить из кодов
слишком длинные последовательности нулей. Это действие называется bit stuffing.
Поле синхронизации, предшествующее каждому пакету, позволяет приемнику синхронизироваться.
Электрические спецификации интерфейса
Шина USB предоставляет передачу данных и питание по четырем проводам. Передача
информации ведется по двум проводам на каждом отрезке точка-точка. Схематическое
изображение соеденительного шнура в разрезе показано на рисунке:
Кабель USB так же имеет провода Vbus и GND, несущие напряжение питания к устройствам.
Vbus номинально +5 в на источнике. Сегменты кабеля могут быть различной длины
с различным материалом проводника, в зависимости от необходимого падения напряжения
и прочих атрибутов, таких как энергопотребление устройства и гибкость кабеля.
В плане обеспечения гарантированного входного напряжения и согласования волновых
сопротивлений на каждой стороне кабеля используются терминирующие цепи. Так
же с помощью этих цепей происходит определение подключения устройства и его
скоростные требования.
Механические спецификации интерфейса
Все устройства в системе имеют восходящие и нисходящие соединители, механически
не взаимозаменяемые. Разъемы имеют два контакта от витой пары сигнальных проводов
и два контакта питания.
Распределение питания на шине USB
Любое подключенное к хосту или хабу устройство может получать питание от него
или использовать свое питание. Первые называются .bus-powered., вторые.self-powered..
Энергосбережение на шине USB
Системное программное обеспечение хоста USB руководит энергосбережением в сети,
посылая устройствам команды войти или выйти из режима энергосбережения. Это
особенно актуально для портативных компьютеров.
Физическая и логическая топология системы
Логически шина и устройства USB образуют звезду, основной точкой которой является
хост.
Физически картина выглядит следующим образом:
Устройства USB могут подключаться непосредственно к хосту, но так как количество
устройств может быть велико, предусмотрено подключение через специальные концентраторы
. хабы. Хост имеет свой встроенный хаб, так называемый корневой. На рисунке
обозначен также .compound device.. В качестве такого устройства может выступать
контроллер мыши и клавиатуры в одном корпусе, где информация с двух различных
источников постоянно подключена к локальному хабу. С точки зрения хоста compound
device . это хаб с постоянно подключенными источниками.
Протокол шины USB
USB . полностью контролируемая хостом шина. В системе USB может быть только
один мастер (управляющий элемент) . компьютер-хост. Любая транзакция в ней осуществляется
передачей до трех пакетов. Хост, в соответствии с определенной
временной диаграммой генерирует признаки, руководящие передачей по шине. В таком
пакете признака содержится информация о типе передачи, ее направлении, адресе
получателя и номере канала (конечной точки в получателе). Устройство на шине
определяет, что пакет предназначен ему, декодируя соответствующие адресные поля.
Устройства USB только отвечают на запросы хоста и не могут передавать информацию
друг другу.
Фактически может быть только один случай, когда устройство может инициировать
передачу без активности хоста. После помещения хостом устройства в режим пониженного
энергопотребления, устройство может сигнализировать свое
пробуждение. Это единственный способ прервать цепочку, ведомую хостом. Все остальное
на шине происходит только благодаря тому, что хост делает запросы устройствам,
и устройства отвечают на эти запросы.
Устройства и каналы шины USB
Каждое устройство на шине USB имеет несколько так называемых .конечных точек.
- endpoints. Эти пронумерованные точки являются концами логических каналов данных
между хостом и устройством. Таким образом, между хостом и устройством
реализуется мнококанальная передача данных. Каналы симплексны. Идентификационный
номер устройства дается ему хостом при подключении устройства к шине, номера
же конечных точек задаются при изготовлении устройства.
Любое устройство должно поддерживать endpoint 0, так как это средство конфигурирования
устройства по умолчанию в USB (Default Control Pipe) после включения или получения
сигнала сброса по шине. Все остальные ep и каналы появляются после конфигурирования
устройства хостом. DCP может так же использоваться специфичным клиентским ПО
хоста. В этом случае системное ПО хоста USB является посредником между клиентским
ПО и DCP устройства.
Конечные точки имеют собственные характеристики, их необходимо знать клиентскому
ПО для определения типа соединения:
-частота передачи
-требования по пропускной способности канала
-номер ep
-требования по обработке ошибок
-максимальный размер пакета, который может отправлять/принимать эта ep
-тип передачи (режим)
-направление передачи
Виртуальные каналы между конечными точками устройства и ПО хоста гипотетически
могут реализовывать два типа передачи:
Поток (stream) . не имеет определенной структуры в системе USB
Сообщение (message) . имеет определенную в USB структуру
Признаки и идентификаторы пакетов на шине USB
Передача по шине USB состоит из пакетов данных, идентифицированных специальными
кодами, называемыми Packet ID (идентификаторами пакетов). PID показывает, какого
типа пакет был передан. Существует четыре типа PID, показанных в таблице.
ТипИмя
TokenIN, OUT, SOF, SETUP
DataDATA0, DATA1
HandshakeACK, NAK, STALL
SpecialPRE
Нижеследующий рисунок иллюстрирует передачу по шине USB от хоста к устройству.
Пакет 1 . признак передачи, индицируемый OUT PID. Признак отображает, что данные
от хоста будут переданы по шине. Пакет 2 содержит данные, о чем говорит PID
DATA1. Пакет 3 . handshake, отправляется устройством с использованием ACK PID
для подтверждения хосту, что устройство получило дынные без ошибок. Вторая передача
начинается с еще одного признака OUT 4, далее следуют данные 5, на этот раз
предваряемые PID DATA0. В конце передачи устройство опять подтверждает успешную
передачу, передавая ACK PID.
Наличие DATA1 и DATA0 обусловлено коррекцией ошибок. Как описано выше, ACK .
это сигнал хосту, что периферия получила дынные без ошибки (поля CRC в пакетах
используются для определения ошибок). Но что произойдет, если пакет повредится
во время передачи ? Для определения этого, каждая сторона устанавливает data
toggle bit, переключаемый между передачами пакетов данных. Состояние этого флажка
сравнивается с PID, приходящим с данными, с каждым DATA0 или DATA1. При передаче
данных хост или устройство посылают перемежающиеся DATA0-DATA1 идентификаторы
пакетов. Путем сравнения идентификатора DATA с состоянием внутреннего переключаемого
флажка, хост или устройство могут определить поврежденный handshake packet.
Признак SETUP предназначен только для передач типа CONTROL. Они предваряют 8
байт данных, из которых периферия определяет запросы хоста. Признак SOF приходит
каждую миллисекунду, обозначая фрэйм USB.
Существуют три PID согласования: ACK, NAK и STALL:
ACK . означает, что данные были приняты без ошибок;
NAK . означает .занято, передайте еще раз.. Это не означает ошибки, так как
ошибка . это отсутствие ответа;
STALL . означает, что произошло нечто непредвиденное (возможно как результат
потери связи или несогласования программного обеспечения разных уровней). Устройство
посылает STALL, показывая, что не поняло запрос.
PID PRE предшествует передаче на малой скорости (1.5 Мбит). Мы его игнорируем.
Получение данных от хоста
Для передачи данных устройству, хост передает признак OUT, за которым следуют
данные. Если устройство имеет возможность принять данные и принимает их без
ошибки, оно возвращает ACK хосту. Если оно занято, оно отсылает NAK.
Передача данных хосту
Периферийное устройство ждет прихода от хоста запроса IN. Если хост не посылает
эти запросы, данные навсегда останутся в буфере устройства.
Понятие фрэйма в USB
Хост в системе USB обеспечивает распределение времени, передавая SOF (начало
фрэйма) каждую миллисекунду. Пакет SOF включает в себя инкрементирующийся 11-разрядный
счетчик фрэймов.
Типы передач передачи (режимы) на шине USB
В системе USB возможны четыре типа передачи. Они соответствуют требованиям различных
типов данных, передаваемых по шине:
Control;
Bulk;
Interrupt;
Isochronous.
Режим Bulk
Передача типа Bulk - "прорывная", пакетами по 8, 16, 32, 64 байта.
Доставка информации гарантирована по причине автоматической перепосылки поврежденных
данных. Хост позволяет передавать пакеты bulk, когда шина освобождается. Этот
тип передачи применяется для принтера, сканера или модема. Данные, передаваемые
таким способом имеют встроенный контроль передачи, обеспечиваемый пакетами согласования.
Режим Interrupt
Этот тип передачи похож на bulk, но передача происходит только для IN каналов.
Блок данных может иметь длину от 1 до 64 байт. Каналы interrupt типа имеют ассоциированный
временной интервал, через эти интервалы хост посылает признак IN.
Режим Isochronous
Режим предназначен для передачи потоковой, критичной ко времени информации,
такой как аудио или видео информация, целесообразно применять этот режим передачи.
Для такой информации время доставки . основное требование. В каждом фрейме USB
определенная жесткая часть времени отводится для передачи типа isochronous.
Заглядывая вперед скажем, что такая передача не имеет признаков согласования
(ACK/NAK/STALL) и не имеет перепосылок. Определение
ошибок происходит только на уровне согласования контрольной суммы CRC16. Передача
isochronous не использует механизм переключения флажков DATA, передается всегда
PID DATA0.
Режим Control
Этот тип передачи используется для конфигурирования и посылки команд устройству.
Так как эти задачи жизненно важны для функционирования системы, при передаче
типа control обеспечивается наилучшая защита от ошибок. Хост резервирует часть
каждого фрэйма для передачи control. Передачи control состоят из двух или трех
стадий. Стадия SETUP содержит 8 байт
управляющих данных. Опциональная стадия DATA содержит дополнительные данные,
если необходимо. Стадия STATUS позволяет устройству индицировать благополучное
завершение процесса конфигурирования.
Включение в систему и нумерация устройств на шине USB
При включении нового устройства в шину хост производит последовательность перепеси.
устройств:
Хост посылает запрос "Get_Descriptor/Device" на адрес 0 (впервые подключенные
устройства отвечают по адресу 0); Устройство обязательно отвечает на запрос,
посылая байты идентификатора обратно хосту, говорящие, что за устройство подключено;
Хост посылает устройству запрос "Set_Address", дающий уникальный адрес
устройству, позволяющий отличить это устройство от других, подключенных к шине;
Хост посылает еще запросы "Get_Descriptor", запрашивая остальную информацию
об устройстве. Из этих ответов хост узнает, как много каналов устройство имеет,
его требования по питанию, необходимую пропускную способность канала и какой
драйвер загрузить. Этот процесс "переписи" называется Enumeration
(нумерация).