Пакет подтверждения

в начало

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

Рис.3.25.

Handshake-пакеты могут передаваться как в фазе подтверждения (наиболее часто), так и в фазе данных. Существует три типа пакетов подтверждения:

§ ACK подтверждает, что пакет данных и PID приняты без ошибок. Подтверждение ACK соответствует лишь тем транзакциям, которые передают данные и в которых подтверждения ожидаются. ACK может быть возвращён хост-контроллером в случае транзакта типа IN и устройством - для транзактов OUT и SETUP.

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

§ STALL возвращается функцией в ответ на транзакцию типа IN или после фазы данных тразакции OUT. STALL сообщает о том, что устройство не может принять или передать данные, либо о том, что канал управления не отвечает на запросы. Хост-контроллер не может вернуть STALL ни при каких условиях.