Гнезда USB: а - типа "А", б - типа "В", в - символическое обозначение
Рисунок 7.5. Гнезда USB: а - типа "А", б - типа "В", в - символическое обозначение
Питание устройств USB возможно от кабеля (Bus-Powered Devices) или от собственного блока питания (Self-Powered
Devices). Хост обеспечивает питанием непосредственно под- ключенные к нему ПУ. Каждый хаб, в свою очередь, обеспе- чивает питание устройств, подключенных к его нисходящим портам. При некоторых ограничениях топологии допуска- ется применение хабов, питающихся от шины. На Рисунок 7.6 приведен пример схемы соединения устройств USB. Здесь клавиатура, перо и мышь могут питаться от шины.
Модель передачи данных
Каждое устройство USB представляет собой набор незави- симых конечных точек (Endpoint), с которыми хост-контрол- лер обменивается информацией. Конечные точки описыва- ются следующими параметрами:
требуемой частотой доступа к шине и допустимыми за- держками обслуживания;
требуемой полосой пропускания канала;
номером точки;
требованиями к обработке ошибок;
максимальными размерами передаваемых и принимаемых пакетов;
типом обмена;
направлением обмена (для сплошного и изохронного об- менов).
Каждое устройство обязательно имеет конечную точку с но- мером 0, используемую для инициализации, общего управ- ления и опроса его состояния. Эта точка всегда сконфи- гурирована при включении питания и подключении устройства к шине. Оно поддерживает передачи типа "управ- ление" (см. далее).
Кроме нулевой точки, устройства-функции могут иметь до- полнительные точки, реализующие полезный обмен данны- ми. Низкоскоростные устройства могут иметь до двух до- полнительных точек, полноскоростные - до 16 точек ввода и 16 точек вывода (протокольное ограничение). Точки не могут быть использованы до их конфигурирования (уста- новления согласованного с ними канала).
Каналом {Pipe) в USB называется модель передачи данных между хост-контроллером и конечной точкой (Endpoint)
ус- тройства. Имеются два типа каналов: потоки (Stream)
и со- общения (Message). Поток доставляет данные от одного конца канала к другому, он всегда однонаправленный.
Один и тот же номер конечной точки может использоваться для двух поточных каналов - ввода и вывода. Поток может реализо- вывать следующие типы обмена: сплошной, изохронный и прерывания. Доставка всегда идет в порядке "первым во- шел - первым вышел" (FIFO); с точки зрения USB, данные потока неструктурированы. Сообщения имеют формат, опре- деленный спецификацией USB. Хост посылает запрос к ко- нечной точке, после которого передается (принимается) па- кет сообщения, за которым следует пакет с информацией состояния конечной точки. Последующее сообщение нор- мально не может быть послано до обработки предыдущего, но при отработке ошибок возможен сброс необслуженных сообщений. Двухсторонний обмен сообщениями адресуется к одной и той же конечной точке. Для доставки сообщений используется только обмен типа "управление".
С каналами связаны характеристики, соответствующие конеч- ной точке (полоса пропускания, тип сервиса, размер буфера
и т. п.). Каналы организуются при конфигурировании уст- ройств USB. Для каждого включенного устройства существует канал сообщений (Control Pipe 0), по которому передается информация конфигурирования, управления и состояния.
Типы передачи данных
USB поддерживает как однонаправленные, так и двунаправ- ленные режимы связи. Передача данных производится меж- ду ПО хоста и конечной точкой устройства. Устройство мо- жет иметь несколько конечных точек, связь с каждой из них (канал) устанавливается независимо.
Архитектура USB допускает четыре базовых типа передачи данных:
Управляющие посылки (Control Transfers), используемые для конфигурирования во время подключения и в процессе работы для управления устройствами. Протокол обеспе- чивает гарантированную доставку данных. Длина поля данных управляющей посылки не превышает 64 байт на полной скорости и 8 байт на низкой.
Сплошные передачи (Bulk Data Transfers) сравнительно больших пакетов без жестких требований ко времени до- ставки. Передачи занимают всю свободную полосу про- пускания шины.
Пакеты имеют поле данных разме- ром 8, 16, 32 или 64 байт. Приоритет этих передач самый низкий, они могут приостанавливаться при большой за- грузке шины. Допускаются только на полной скорости передачи.
йй Прерывания (Interrupt) -
короткие (до 64 байт на полной скорости, до 8 байт на низкой) передачи типа вводимых символов или координат. Прерывания имеют спонтанный характер и должны обслуживаться не медленнее, чем того требует устройство. Предел времени обслуживания уста- навливается в диапазоне 1-255 мс для полной скорости и 10-255 мс - для низкой.
Изохронные передачи (Isochronous Transfers) - непрерыв- ные передачи в реальном времени, занимающие предва- рительно согласованную часть пропускной способности шины и имеющие заданную задержку доставки. В случае
обнаружения ошибки изохронные данные передаются без повтора - недействительные пакеты игнорируются. При- мер - цифровая передача голоса. Пропускная способность определяется требованиями к качеству передачи, а задерж- ка доставки может быть критичной, например, при реа- лизации телеконференций.
Полоса пропускания шины делится между всеми установ- ленными каналами. Выделенная полоса закрепляется за ка- налом, и если установление нового канала требует такой полосы, которая не вписывается в уже существующее рас- пределение, запрос на выделение канала отвергается.
Архитектура US В предусматривает внутреннюю буфериза- цию всех устройств, причем чем большей полосы пропуска- ния требует устройство, тем больше должен быть его буфер. USB должна обеспечивать обмен с такой скоростью, чтобы задержка данных в устройстве, вызванная буферизацией, не превышала нескольких миллисекунд.
Изохронные передачи классифицируются по способу син- хронизации конечных точек - источников или получателей данных - с системой: различают асинхронньш, синхронный и адаптивный классы устройств, каждому из которых соот- ветствует свой тип канала USB.
Протокол
Все обмены (транзакции) по USB состоят из трех пакетов. Каждая транзакция планируется и начинается по инициати- ве контроллера, который посылает пакет-маркер {Token Packet). Он описывает тип и направление передачи, адрес ус- тройства USB и номер конечной точки.
В каждой транзак- ции возможен обмен только между адресуемым устройством (его конечной точкой) и хостом. Адресуемое маркером уст- ройство распознает свой адрес и готовится к обмену. Источ- ник данных (определенный маркером) передает пакет данных (или уведомление об отсутствии данных, предназначенных для передачи). После успешного приема пакета приемник данных посылает пакет подтверждения (Handshake Packet).
Планирование транзакций обеспечивает управление поточ- ными каналами. На аппаратном уровне использование от-
каза от транзакции (NAck)
при недопустимой интенсивнос- ти передачи предохраняет буферы от переполнения сверху и снизу. Маркеры отвергнутых транзакций повторно пере- даются в свободное для шины время. Управление потоками позволяет гибко планировать обслуживание одновременных разнородных потоков данных.
Устойчивость к ошибкам
обеспечивают следующие свойства USB:
Высокое качество сигналов, достигаемое благодаря диф- ференциальным приемникам/передатчикам и экраниро- ванным кабелям.
Защита полей управления и данных CRC-кодами.
Обнаружение подключения и отключения устройств и конфигурирование ресурсов на системном уровне.
Самовосстановление протокола с тайм-аутом при потере пакетов.
Управление потоком для обеспечения изохронности и управления аппаратными буферами.
Независимость функций от неудачных обменов с други- ми функциями.
Для обнаружения ошибок передачи каждый пакет имеет кон- трольные поля CRC-кодов, позволяющие обнаруживать все одиночные и двойные битовые ошибки. Аппаратные сред- ства обнаруживают ошибки передачи, а контроллер автома- тически производит трехкратную попытку передачи. Если повторы безуспешны, сообщение об ошибке передается кли- ентскому ПО.
Форматы пакетов
Байты передаются по шине последовательно, начиная с млад- шего бита. Все посылки организованы в пакеты. Каждый пакет начинается с поля синхронизации Sync, которое пред- ставляется последовательностью состояний KJKJKJKK
(коди- рованную по NRZI), следующую после состояния Idle.
По- следние два бита (КК) являются маркером начала пакета SOP, используемым для идентификации первого бита идентифи- катора пакета PID. Идентификатор пакета является 4-бит-
ным полем PID[3:0],
идентифицирующим тип пакета (табл. 7.2), за которым в качестве контрольных следуют те же 4 бита, но инвертированные.
Тип PID | Имя PID | PID[3:0] | Содержимое и назначение |
Token | OUT | 0001 | Адрес функции и номер конечной точки - маркер транзакции функ- ции |
Token | IN | 1001 | Адрес функции и номер конечной точки - маркер транзакции хоста |
Token | SOF | 0101 | Маркер начала кадра |
Token | SETUP | 1101 | Адрес функции и номер конечной точки - маркер транзакции с управ- ляющей точкой |
Data | DataO Datal | 0011 1011 | Пакеты данных с четным и нечетным PID чередуются для точной идентификации под- тверждений |
Handshake | Ack | 0010 | Подтверждение безошибочного приема пакета |
Handshake | NAK | 1010 | Приемник не сумел принять или передатчик не сумел передать данные. Может использоваться для управления потоком данных (неготовность). В транзакциях пре- рываний является признаком отсутствия необслуженных преры- ваний |
Handshake | STALL | 1110 | Конечная точка требует вмеша- тельства хоста |
Special | PRE | 1100 | Преамбула передачи на низкой скорости |
и OUT следующими являются адресные поля: 7-битный адрес функции и 4-битный адрес конечной точки. Они позволяют адресовать до 127 функций USB (нулевой адрес используется для конфигурирования) и по 16 конечных точек в каждой функции.
В пакете SOF имеется 11-битное поле номера кадра (Frame Number Field), последовательно (циклически) увеличиваемое для очередного кадра.
Поле данных может иметь размер от 0 до 1023 целых байт. Размер поля зависит от типа передачи и согласуется при установлении канала.
Поле СКС-кола
присутствует во всех маркерах и пакетах дан- ных, оно защищает все поля пакета, исключая PID.
CRC для маркеров (5 бит) и данных (11 бит) подсчитываются по раз- ным формулам.
Каждая транзакция инициируется хост-контроллером посыл- кой маркера и завершается пакетом квитирования.
После- довательность пакетов в транзакциях иллюстрирует Рисунок 7.7.
Хост-контроллер организует обмены с устройствами согласно своему плану распределения ресурсов. Контроллер цикли- чески (с периодом 1 мс) формирует кадры (Frames), в кото- рые укладываются все запланированные транзакции. Каж- дый кадр начинается с посылки маркера SOF (Start Of Frame), который является синхронизирующим сигналом для всех устройств, включая хабы. В конце каждого кадра выделяет- ся интервал времени EOF (End Of Frame), на время которого хабы запрещают передачу по направлению к контроллеру. Каждый кадр имеет свой номер. Хост-контроллер опериру- ет 32-битным счетчиком, но в маркере SOF передает только младшие 11 бит. Номер кадра увеличивается (циклически) во время EOF. Хост планирует загрузку кадров так, чтобы в них всегда находилось место для транзакций управления и прерывания. Свободное время кадров может заполняться сплошными передачами (Bulk Transfers).