Пакеты квитирования
Для подтверждения приема, управления потоком и сигнализации об ошибках используются пакеты квитирования, так же как и в других протоколах обмена. Для режима FS (full speed) имеется три пакета квитирования: NAK, ACK и STALL. Все пакеты квитирования не содержат ни контрольной суммы, ни каких либо частей, кроме PID. Как упоминалось выше пакет PID, делится на два полубайта, с одинаковым значением, это и служит защитой от искажения самого пакета квитирования. Пакет ACK подтверждает, успешный прием переданного маркерного пакета или пакета данных. Пакет NAK сообщает о невозможности принять маркер пакет или пакет данных, прямо сейчас. Например, USB устройство занято другой работой, или не успевает обрабатывать поступающие данные, занято обработкой предыдущего пакета. Протоколом допустимо, что USB устройство может квитировать любой принятый пакет данных или пакет маркера, пакетом NAK, кроме пакета SETUP. На принятый пакет SETUP, устройство не должно отвечать пакетом NAK, пакет SETUP обязателен к рассмотрению. Образно можно сказать, что пакетом NAK USB устройство сообщает о необходимости подождать и не торопиться.
Пакет STALL передается USB устройством в случае серьезных ошибок, чтобы сообщить хосту о невозможности дальнейшей работы. Например, в принтере кончилась бумага и попытки передавать данные лишены смысла. Для таких ситуаций USB устройство отправит пакет STALL, сообщая этим, что адресат заблокирован, и бессмысленно загружать шину попытками передачи данных.
Остается невыясненным, а как обрабатывается ситуация, когда пакет поврежден? Если проверка целостности пакета покажет, что он искажен? На принятые, искаж.нные пакеты, ни USB устройство, ни хост, не должны никак отвечать. Точнее говоря, они должны выдержать некоторый временной промежуток молчания, тайм-аут. По отсутствию пакета квитирования передатчик догадается, что пакет искажен и повторит передачу. Если несколько повторов передача будет неудачной, хост перейдет в аварийный режим.
Тип пакета |
Обозначение |
Значение |
маркер |
OUT
IN
SOF
SETUP |
0001
1001
0101
1101 |
квитирования |
ACK
NAK
STALL |
0010
1010
1110 |
данных |
DATA0
DATA1 |
0011
1011 |
.
|