Управляющие посылки

в начало

Управляющие посылки (control transfers) содержат минимум две стадии : инициализацию (SETUP stage) и стадию определения состояния (Status). Управляющие посылки могут также содержать и стадию данных, выполняющуюся между стадиями SETUP stage и Status. Во время стадии инициализации в транзакции типа SETUP пакет данных используется для передачи информации управляющей точке функции. Транзакция SETUP подобна транзакции OUT и отличается лишь идентификатором (PID). На рисунок 3.27 pic>frame@img/410.hlpпредставлен формат транзакции SETUP.

Рис.3.27.

Функция, получившая пакет SETUP, должна подтвердить правильность принятого пакета данных путем выдачи пакета подтверждения ACK. В случае ошибки в данных функция не генерирует пакет подтверждения.

Если присутствует стадия данных, то она состоит из одной или более транзакций типа IN или OUT. Все транзакции стадии данных должны быть одного направления (либо IN, либо OUT). Количество байтов, передавемых во время стадии данных и направление транзакций определяется на стадии инициализации.

Стадия состояния является последней в управляющей посылке. Стадию состояния характеризует направление передачи данных, противоположное предыдущей стадии. Если, например, стадия данных состояла из транзакций типа OUT, то стадия состояния включает в себя только транзакции IN. На рисунке 3.28 pic>frame@img/411.hlpпредставлены различные варианты управляющих посылок.

Рис.3.28.

Стадия cостояния информирует хост-контроллер о результате выполнения предшествующих стадий установки и данных. Всего возможно три варианта стадии состояния:

§ Последовательность команд выполнилась успешно.

§ Последовательность команд не выполнена.

§ Функция всё ещё находится в состоянии выполнения команд.

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

 

Таблица 3.18.

 

Для начала стадии состояния контрольной пересылки типа чтение хост-контроллер посылает маркерный пакет типа OUT и пакет данных нулевого размера по каналу управления. В ответ функция в пакете подтверждения посылает информацию о своём состоянии в соответстви с таблицей.

Для инициации стадии состояния котрольной записи хост посылает маркер IN в управляющий канал. Информацию о своём состоянии функция формирует в соответствии с таблицей, причём существует ряд важных особенностей. NAK оповещает хост о том, что функция находится всё ещё в состоянии обработки команды и хосту необходимо продолжать выполнение стадии состояния (т.е. посылку маркеров IN). В случае нормального завершения команды функция ждет подтверждения ACK от хоста, а в процессе ожидания продолжает отправлять пакеты данных нулевой длины.

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