USB

Транзакции управляющих передач

Управляющие передачи предназначены для подачи команды (Write Control) или запроса (Read Control) устройству с индикацией результата выполнения. Передачи состоят из двух или трех стадий и выполняются с помощью нескольких транзакций:

  • стадия установки, Setup Stage, предназначена для передачи управляющего сообщения от хоста к устройству. Это сообщение описывает команду (запрос), которую должно выполнить устройство. Команда может быть связана с передачей или приемом данных;
  • стадия передачи данных, Data Stage, предназначена для посылки дополнительной управляющей информации (в передаче Write Control) или приема информации от устройства (в передаче Read Control). Эта стадия может отсутствовать, если не требуется ввод информации, а выводимая информация умещается в сообщении стадии установки;
  • стадия передачи состояния, Status Stage, предназначена для уведомления хоста о факте и результате (успешно или нет) завершения исполнения команды.

Стадия установки выполняется в виде одной транзакции, начинающейся с маркера Setup. Далее хост посылает 8-байтный пакет данных (DATA0) с сообщением-запросом, имеющим стандартную структуру. Устройство подтверждает успешный прием этого пакета ответом ACK и приступает к отработке командызапроса. Отсутствие ответа заставит хост повторить запрос.

Стадия передачи данных (только для трехстадийных передач) выполняется хостом при помощи одной или нескольких транзакций IN (передача Read Control) или OUT (передача Write Control), обеспечивая управление потоком и надежную доставку с помощью повторов и чередования номеров. Первая транзакция фазы данных начинается с пакета DATA1.

Переход к стадии передачи состояния хост сигнализирует транзакцией, в которой направление передачи данных противоположно тому, что было на предыдущей стадии (Setup или DATA). Если стадии данных не было или выполнялась передача Write Control, хост выполняет транзакцию IN. Если выполнялась передача Read Control, хост выполняет транзакцию OUT (выводит пакет DATA1 с нулевой длиной данных) или посылает маркер PING (в USB 2.0). На этой стадии интерес представляет только ответ ПУ:

  • если устройство еще не завершило выполнение команды, оно будет отвечать пакетом NAK. Хост должен будет повторять эту транзакцию до получения иного ответа;
  • если устройство успешно выполнило команду, оно на транзакцию IN ответит пакетом DATA1 нулевой длины, а на транзакцию OUT (или маркер PING) ответит подтверждением ACK;
  • если устройство завершило выполнение команды, но с ошибкой, то оно ответит пакетом STALL. Для управляющих точек данный ответ является обычным, не вызывает блокировки канала и не требует специальных действий для продолжения работы.

До получения ответа, указывающего на завершение выполнения команды, хост не имеет права обращаться к данной конечной точке с новой командой. Таким образом обеспечивается сериализация выполнения команд: устройство не «захлебнется» потоком команд, которые оно не в состоянии быстро исполнить; вводимые данные будут отвечать состоянию устройства на момент подачи команды-запроса, которой могли предшествовать управляющие записи. Такая упорядоченность (синхронизация) потоков ввода и вывода для устройств USB непосредственно не обеспечивается никакими другими типами передач. Управляющие передачи во всех устройствах USB поддерживают нулевые точки (EP0); поддержка управляющих передач для клиентских конечных точек бывает далеко не всегда.



Sitelinkx by eXtro-media.de
Яндекс.Метрика