Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шины.PCI,.USB.и.FireWire

.pdf
Скачиваний:
60
Добавлен:
19.03.2016
Размер:
6 Mб
Скачать

Таблица 13.6. Дескриптор конечной точки

Сме

Поле

Длина

Содержание

щение

 

 

 

 

 

 

 

0

bLength

1

Размер дескриптора (7)

1

bDescriptorType

1

Тип дескриптора (5)

2

bEndpointAddress

1

Адрес точки:

 

 

 

Биты [3:0] — номер точки;

 

 

 

Биты[6:4] — резерв (0);

 

 

 

Бит 7 — направление (игнорируется для EP0):

 

 

 

0 = OUT, 1 = IN

3

bmAttributes

1

Атрибуты точки:

 

 

 

Биты [1:0] — тип точки: 00 = Control,

 

 

 

01 = Isochronous, 10 = Bulk, 11 = Interrupt;

 

 

 

Биты [5:2] используются только для изохронных

 

 

 

точек, для остальных резерв (0):

 

 

 

Биты [3:2] — тип синхронизации: 00 = нет

 

 

 

синхронизации, 01 = асинхронная, 10 = адаптивная,

 

 

 

11 = синхронная;

 

 

 

Биты [5:4] — тип использования: 00 = данные,

 

 

 

01 = обратная связь, 10 = данные

 

 

 

с предоставлением неявной обратной связи,

 

 

 

11 = резерв

4

wMaxPacketSize

2

Биты [10:0] — максимальный размер пакета;

 

 

 

Биты [12:11] — число дополнительных транзакций

 

 

 

в микрокадре, только для широкополосных точек,

 

 

 

для остальных — резерв (0);

 

 

 

Биты [15:13] — резерв (0)

6

bInterval

1

Для точек периодических транзакций — интервал

 

 

 

обслуживания (см. главу 11), для HS точек

 

 

 

непериодического вывода — допустимая частота

 

 

 

посылки NAK (см. главу 10)

 

 

Таблица 13.7. Строковый дескриптор

 

 

 

 

 

Сме

Поле

Длина

Содержание

щение

 

 

 

 

 

 

 

0

bLength

1

Размер дескриптора (N+2)

1

bDescriptorType

1

Тип дескриптора (3)

2

bString

N

Строка байтов

 

 

 

 

Запросы к устройствам USB (управляющие передачи)

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

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

стандартные запросы для всех устройств. Список запросов и форматы данных определены спецификацией USB;

запросы для класса. Список запросов и форматы данных определены стандар$ том для данного класса устройств;

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

Все устройства USB имеют основной канал управления через точку EP0, к которой выполняются основные стандартизованные запросы. В устройствах могут быть и другие точки с типом Control, для них будут свои специфические запросы, но формат стадии установки у них должен быть таким же, как и для EP0, чтобы про$ должение управляющей транзакции определялось из него тем же стандартным спо$ собом. Однако дополнительные точки типа Control в устройствах встречаются не часто, что объясняется сложностью их реализации. В большинстве случаев вполне можно обходиться управлением через EP0, используя «фирменные» запросы (Ven dor request).

Устройство должно отвергать запрос, если он не поддерживается или имеет не$ правильные параметры. Время исполнения запроса (от подачи команды до под$ тверждения или отвержения) спецификацией ограничивается: общее ограничение — до 5 секунд, но запрос установки адреса должен исполняться не дольше 50 мс (иначе процесс нумерации устройств был бы слишком затяжным).

На стадии установки (Setup Stage) в 8$байтном поле данных устройству передает$ ся собственно запрос (табл. 13.8), в котором указывается и направление, в котором будет передача на стадии передачи данных. Запрос идентифицируется обязатель$ ными полями bmRequestType и bRequest; содержимое полей wValue, wIndex

и wLength используется не во всех запросах, неиспользуемые поля должны быть нулевыми. Стадия данных (Data Stage) используется не во всех запросах (когда ее нет, wLength = 0). На стадии состояния (Status Stage) устройство подтверждает успешное выполнение запроса (пакетом ACK) или отвергает его (пакетом STALL). До тех пор пока устройство не завершило отработку запроса (или не отвергло его), оно отвечает пакетами NAK. Получение пакета STALL от управляющей конечной точки является нормальным ответом, не требующим разблокирования данной точки.

Таблица 13.8. Информация, передаваемая на стадии установки

Сме

Поле

Длина

Содержание

щение

 

 

 

 

 

 

 

 

 

 

 

0

bmRequestType

1

Характеристики запроса:

 

 

 

D7: направление передачи данных: 0 = от хоста

 

 

 

к устройству, 1 = от устройства к хосту;

 

 

 

D6...5: Тип 0 = стандартный, 1 = для класса,

 

 

 

2 = специфичный, 3 = зарезервирован

 

 

 

D4...0: Получатель: 0 = Устройство, 1 = Интерфейс,

 

 

 

2 = Точка, 3 = Другой, 4...31 = зарезервировано

 

 

 

 

 

 

 

 

 

 

продолжение

 

 

 

 

Таблица 13.8 (продолжение)

Сме

Поле

Длина

Содержание

щение

 

 

 

 

 

 

 

1

bRequest

1

Запрос

2

wValue

2

Параметр запроса

4

wIndex

2

Индекс или смещение (использование

 

 

 

определяется запросом)

6

wLength

2

Число байт, передаваемых в фазе данных

 

 

 

 

Стандартные запросы к устройствам

Стандартные запросы относятся ко всем устройствам USB, хотя для ряда устройств есть исключения: управление альтернативными установками интерфейсов не тре$ буется, если нет альтернатив; установка меток времени нужна (и возможна) толь$ ко для устройств с изохронными точками. Стандартные запросы адресуются к EP0, признак стандартного запроса — в поле типа bmRequestType D[6:5] = 0. Типы и ко$ ды стандартных запросов приведены в табл. 13.9.

Таблица 13.9. Стандартные запросы к устройствам

Запрос

bmRequestType

bRequest

Clear_Feature

00000000b

1

 

00000001b

 

 

00000010b

 

Get_Configuration

10000000b

8

Get_Descriptor

10000000b

6

Get_Interface

10000001b

10

Get_Status

10000000b

0

 

10000001b

 

 

10000010b

 

Set_Address

00000000b

5

Set_Configuration

00000000b

9

Set_Descriptor

00000000b

7

Set_Feature

00000000b

3

 

00000001b

 

 

00000010b

 

Set_Interface

00000001b

11

Synch_Frame

10000010b

12

 

 

 

Запрос установки адреса Set_Address адресуется только ко всему устройству, в поле wValue передается адрес, назначаемый устройству.

Запросы обращения к дескрипторам Get_Descriptor и Set_Descriptor адресуются толь$ ко ко всему устройству. Здесь поле wValue в старшем байте содержит тип дескрип$

тора (1, 2, 3, 6 или 7 для Get и только 1, 2 или 3 для Set), в младшем — индекс строки (для дескрипторов типа 3) или номер конфигурации (для дескрипторов типа 2 или 7). Поле wIndex используется только для строковых дескрипторов для зада$ ния языка (Languge ID). Поле wLength задает длину дескриптора. Если реальная длина считываемого дескриптора больше запрошенной, то считывается только его начало; если меньше, то устройство в транзакции возвращает только реальное ко$ личество байтов.

Запросы управления конфигурацией Get_Configuration и Set_Configuration также адресуются только к устройству. В запросе установки (Set) используется только поле wValue — в его младшем байте передается номер устанавливаемой конфигу$ рации. В запросе чтения (Get) используется только поле wLength (= 1) — ожидает$ ся один байт ответа, содержащий номер текущей конфигурации.

Запросы управления альтернативными установками Get_Interface и Set_Interface

адресуются к интерфейсу, номер которого указывается в поле wIndex. В запросе установки (Set) в младшем байте поля wValue передается номер альтернативной установки. В запросе чтения (Get) поле wLength (= 1) указывает на ожидание од$ ного байта ответа, содержащего номер текущей альтернативной установки для дан$ ного интерфейса.

Запрос установки метки времени Synch_Frame, адресуемый к устройству, в поле wIndex содержит номер точки, к которой относится данная метка. Поле wLength (= 2) указывает на 2 байта передаваемых данных — номера кадра для данной метки.

Запрос чтения состояния Get_Status может адресоваться к устройству, интерфей$ су или конечной точке. Здесь поле wIndex определяет номер объекта (интерфейса или точки, для устройства — ноль), поле wLength указывает число байтов ожидае$ мых данных состояния. Трактовка данных состояния зависит от адресата:

в стандартном запросе состояния устройства (wLength = 2) определено значе$ ние лишь младших бит слова: D0 (Self Powered) — признак автономности питания (0 — питается от шины); D1 (Remote Wakeup) — возможность подачи сигнала удаленного пробуждения (0 — нет); D2 (Port Test): 1 — порт находит$ ся в режиме тестирования;

чтение состояния интерфейса в стандартном запросе информации не дает (воз$ вращает нули). Однако он может использоваться в запросе для класса; так, на$ пример, для принтеров этот запрос (при wLength = 1) возвращает байт состояния, аналогичный состоянию LPT$порта (принтер выбран, ошибка, конец бумаги);

в стандартном запросе состояния конечной точки (wLength = 2) определено значение лишь младшего бита слова: D0 (Halt) — признак остановки конечной точки (на транзакции с ней устройство отвечает пакетом STALL).

Запросы управления свойствами Set_Feature (установить свойство) и Clear_Feature

(сбросить свойство) также могут адресоваться к устройству, интерфейсу или ко$ нечной точке. Здесь поле wIndex определяет номер объекта (интерфейса или точ$ ки, для устройства — ноль), поле wValue задает номер свойства. Набор стандарт$ ных управляемых свойств невелик:

управление возможностью подачи удаленного пробуждения (Device_Remote_ Wakeup), адресат — устройство, wValue = 1;

управление остановкой (блокировкой) конечной точки (Endpoint_Halt), адре$ сат — конечная точка, wValue = 0. Остановленная (заблокированная) конечная точка будет на все транзакции отвечать пакетом STALL. Сброс признака оста$ нова разблокирует и инициализирует точку, включая начальную установку переключателя (Toggle Bit);

управление тестовым режимом приемопередатчиков (Test_Mode), адресат — устройство, wValue = 2. Здесь используется и поле wIndex, определяющее вы$ полняемый тест: 01 — Test_ J, 02 — Test_K, 03 — Test_SE0_Nack, 04 — Test_Packet, 05 — Test_Force_Enable. Значения 06–3Fh зарезервированы для стандартных тестов, C0–FFh отданы разработчикам устройств. Данным запросом можно только включить тест; для выключения теста устройство приходится выклю$ чать и включать питание устройства, поскольку управляющие запросы оно уже не воспринимает.

Хабы USB

Хаб является ключевым элементом системы PnP в архитектуре USB. Хаб выпол$ няет множество функций, в частности:

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

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

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

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

управляет энергопотреблением: подает питающее напряжение на нисходящие порты; селективно генерирует сигнал приостановки портов, транслирует эти сигналы в разных направлениях (см. главу 12).

Рис. 14.1. Структура хаба USB 2.0

Структура хаба USB 2.0 приведена на рис. 14.1. Хаб состоит из набора портов, кон$ троллера хаба (устройство$функция USB, подключенная к внутреннему порту), повторителя, транслятора транзакций, маршрутизирующей логики портов и це$ пей управления подачей питания. Хаб USB 1.x проще: в нем отсутствует трансля$ тор транзакций и логика маршрутизации нисходящих портов — они все подклю$ чаются к повторителю.

Порты

Со стороны восходящего порта хаб выглядит как и любое устройство USB (см. пра$ вую часть рис. 14.2). Этот порт всегда включен и разрешен, для хабов USB 1.x он всегда полноскоростной, для USB 2.0 восходящий порт всегда высокоскоростной, хотя может работать и в полноскоростном режиме.

Нисходящие порты хаба имеют комплект приемопередатчиков, изображенный в ле$ вой части того же рисунка. Хост управляет нисходящими портами и определяет их состояние, посылая запросы к контроллеру хаба. Каждый из этих портов может определить, подключено ли к нему устройство и на какой скорости оно работает. Порт может быть селективно разрешен (enabled) или запрещен (disabled) по ко$ манде от хоста; запрещение может быть и аппаратным. Аппаратно порт запрещает$ ся по событию подключения$отключения, а также по ошибке, обнаруженной ха$ бом. Хаб игнорирует сигналы от запрещенных портов и не транслирует на них трафик. На порт может быть подана команда сброса, инициирующая соответству$ ющую сигнализацию и уточнение типа устройства (проверяется признак HS$уст$ ройства). Также селективно любой порт может быть приостановлен (suspended), после чего для него может быть подана команда возобновления (resume) с соот$ ветствующей сигнализацией. В плане подачи питания порт может быть запи тан (powered) или нет. Управление подачей питания может быть как селектив$ ным, так и общим для всех портов. Порт может оказаться не запитанным по причине срабатывания токовой защиты, причем защита тоже может быть как селективной, так и общей. В последнем случае порт может оказаться не запитанным и из$за пе$ регрузки другого нисходящего порта. Для HS$порта возможна еще и подача ко$ манды тестирования.

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

не запитан (Not powered) — на порт не подается питание по запросу Clear_Port_ Power от хоста или из$за аварии питания (срабатывание токовой защиты или потеря внешнего питания). Не запитанный порт не пригоден ни к каким интер$ фейсным взаимодействиям. Только после подачи питания он может распознать подключение устройства и с ним взаимодействовать. Питание включается за$ просом Set_Port_Power;

не подключен (Disconnected) — порт способен только к обнаружению подключе$ ния устройства. В это состояние порт переходит из любого последующего по обнаружению отключения устройства;

запрещен (Disabled) — устройство подключено, но трафик и сигналы возобнов$ ления не транслируются. В это состояние порт переходит из любого последую$ щего по запросу Port_Disable, по сигналу сброса на восходящем порте, а также при обнаружении хабом серьезной ошибки, требующей изоляции данного порта;

разрешен (Enabled) — устройство подключено и с ним возможен полноценный обмен данными и сигналами. В это состояние из любого другого (запитанного) порт переводится сбросом (запросом Port_Reset); кроме того, из состояния за прещен — запросом Set_Port_Enable, из состояния приостановлен — запросом Clear_Port_Suspend;

приостановлен (Suspended) — порт подает сигнал приостановки, трафик не транс$ лируется, от порта воспринимается только сигнал возобновления и отключе$ ния устройства. В это состояние порт переходит по запросу Set_Port_Suspend; вернуться в состояние разрешен можно по сигналу удаленного пробуждения, запросу Clear_Port_Suspend или запросу Port_Reset.

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

Хабы могут иметь световые индикаторы состояния нисходящих портов (пару све$ тодиодов или один двухцветный), управляемые аппаратно (логикой хаба) или программно (хост$контроллером):

не светится — порт не используется;

зеленый — нормальная работа;

желтый — ошибка подключенного устройства или перегрузка порта (порт авто$ матически отключен);

зеленый мигающий — программа требует внимания пользователя (Software attention);

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

Контроллер хаба

Контроллер хаба является программно$видимым устройством USB, взаимодей$ ствуя с которым хост управляет конфигурированием устройств и соединениями на шине. Как и всякое устройство USB, контроллер хаба имеет набор дескрипто$ ров, его описывающих (см. главу 13). Для хабов определен специальный класс ус$ тройств (класс 09, подкласс 00). Интерфейс хаба (кроме обязательной нулевой кон$ трольной точки) содержит конечную точку типа Interrupt IN для информирования хоста о смене состояния. Управление хабом в целом и его портами выполняется с помощью специальных запросов к точке EP0. Их описание в табл. 14.1–14.4 дает полное представление о возможностях управляемости и наблюдаемости хаба.

Повторитель

Повторитель хаба обеспечивает динамические соединения между портами для трансляции пакетов и сигналов возобновления. В состоянии покоя повторителя все порты работают на прием и ожидают признака начала кадра или сигнала во$ зобновления. По этим событиям устанавливается то или иное соединение портов (рис. 14.2).

Рис. 14.2. Соединения, обеспечиваемые повторителем хаба: а — покой; б — трансляция пакета с восходящего порта; в — трансляция пакета с нисходящего порта; г — трансляция восходящего возобновления от разрешенного порта

В трансляции пакетов участвуют только разрешенные порты (восходящий разре$ шен всегда). Если какой$либо разрешенный порт обнаружил начало пакета, то ус$ танавливается соединение в соответствии с рис. 14.2 б или в, и повторитель транс$ лирует пакет, дожидаясь его конца (признака EOP). По концу пакета повторитель опять переходит в состояние покоя. Из рисунков видно, что нисходящий трафик транслируется широковещательно. Восходящий трафик транслируется сугубо на$ правленно, так, что его «видят» только хабы, расположенные в цепочке от устрой$ ства к хосту, но не другие устройства.

Сигнал возобновления (resume) транслируется несколько иначе. С восходящего порта сигнал resume транслируется во все нисходящие порты, кроме запрещенных и се$ лективно приостановленных. Сигнал resume, обнаруженный на нисходящем раз$ решенном порте, подхватывается хабом и транслируется в восходящий порт и во все нисходящие порты (включая и порт$источник сигнала), кроме запрещенных и селективно приостановленных. С селективно приостановленного порта сигнал возобновления подхватывается и транслируется обратно только в этот же порт, после чего хаб завершает сигнализацию возобновления (LS EOP) и переводит порт в разрешенное состояние.

Обнаружение и локализация неисправных устройств

Хаб обеспечивает живучесть шины USB, автоматически запрещая работу нисхо$ дящих портов, от которых исходит угроза для работоспособности шины. Неисп$ равное устройство, подключенное к порту, может не вовремя «замолчать» (поте$ рять активность) или, наоборот, что$то «бормотать» (babble). Эти ситуации отслеживает ближайший к устройству хаб и запрещает восходящие передачи от такого устройства не позже чем по границе микрокадра. Хаб следит за тем, чтобы восходящие пакеты не пересекали границу микрокадра. Для этого в хабе имеется счетчик, который определяет следующие моменты в микрокадрах:

EOF1 — после этого момента не имеет права начинаться пакет от устройства;

EOF2 — начиная с этой точки, хаб ждет начала пакета только с восходящего порта (ожидается SOF).

Во время восходящей трансляции пакета (пока повторитель ожидает EOP) воз$ можны особые ситуации:

обнаружен признак начала пакета на другом разрешенном порте — это колли зия; реакция хаба на нее может быть двоякой. Первый вариант — «испортить» трансляцию передачей к хосту вместо тела пакета постоянного состояния K или J. Хост$контроллер поймет эту ситуацию, правда, ценой потери чужого пакета. Второй вариант — игнорировать этот признак, пока не завершится текущая трансляция пакета. При этом хост о данной проблеме не узнает;

признак конца пакета в текущей трансляции не обнаружен, а время в микро$ кадре уже подошло к EOF2 — эта «болтливость» считается ошибкой для нисхо$ дящего порта, с которого идет трансляция. По этой ошибке хаб автоматически запрещает данный порт и фиксирует это изменение состояния в своем регист$ ре. Еще одной причиной автоматического запрещения разрешенного порта яв$ ляется его состояние, отличное от покоя, с момента EOF2 до конца микрокадра.

Если восходящее соединение устанавливается после EOF1, то повторитель вместо трансляции кадра передает признак FS EOP, чтобы вышестоящий хаб не запретил работу порта, к которому подключен данный хаб. Если с нисходящего порта, вы$ звавшего эту ситуацию, не придет EOP до EOF2, то этот порт будет автоматически запрещен.

При трансляции пакетов и сигналов для LS портов повторитель выполняет ин$ вертирование сигнала, поскольку представление состояний J и K для них иное (см. главу 12). Кроме того, нисходящий трафик не транслируется на порты LS, пока не придет специальный пакет PRE. После пакета PRE «вниз» на LS$порт трансли$ руется только один пакет. Вместо маркеров SOF на LS$порт передается признак LS EOP, чтобы устройство не приостановилось.

Для HS портов повторитель устроен функционально сложнее — здесь требуется ресинхронизация (re$clocking). Помехи в линии и по питанию влияют на момент