Передача данных от хост-контроллера к устройству

При выполнении операции (транзакции) «вывод данных в периферийное устройство» хост-контроллер через некоторое время после выдачи пакета-маркера с признаком OUT выдает на интерфейс пакет данных с признаком DATA.

После успешного приема пакета данных периферийное устройство-приемник данных посылает пакет подтверждения (Handshake Packet) с признаком ACK.

Рисунок 27.3 иллюстрирует последовательность пакетов с различными типами идентификаторов при передаче данных по интерфейсу USB от хост-контроллера к устройству.

 

Пакет 1- пакет маркер     Пакет 2 – пакет данных     Пакет 3 - подтверждениее    
O U T   A D D R     E N D P     C R C     D A T A     Данные   C R C     A C K  
               

 

Пакет 4- пакет маркер     Пакет 5 – пакет данных     Пакет 6 - подтверждение    
O U T   A D D R     E N D P     C R C     D A T A     Данные   C R C     A C K  
               

 

Рис. 27.3. Последовательность пакетов с различными типами идентификаторов

Пакет 1 - признак передачи, тип пакета - OUT. Признак отображает, что данные от хост- -контроллера будут переданы по интерфейсу в следующей фазе.

Пакет 2 содержит данные, о чем говорит идентификатор PID - DATA1.

Пакет 3 – подтверждение обмена (handshake), отправляется периферийным устройством с использованием идентификатора ACK для подтверждения хост-контроллеру, что периферийное устройство получило данные без ошибок. Вторая передача начинается с еще одного пакета с идентификатором OUT 4, далее следуют данные 5, на этот раз предваряемые идентификатором DATA0. В конце передачи периферийное устройство опять подтверждает успешную передачу, передавая пакет с идентификатором ACK.

Наличие DATA1 и DATA0 обусловлено коррекцией ошибок. Как описано выше, ACK - это сигнал хост-контроллеру, что внешнее устройство получило данные без ошибки (поля CRC в пакетах используются для определения ошибок). Но что произойдет, если пакет повредится во время передачи? Для определения этого, каждая сторона устанавливает специальный разряд (data toggle bit), переключаемый между передачами пакетов данных. Состояние этого разряда (флажка) сравнивается с PID, приходящим с данными, с каждым DATA0 или DATA1. При передаче данных хост-контроллер или периферийное устройство посылают перемежающиеся DATA0-DATA1 идентификаторы пакетов. Путем сравнения идентификатора DATA с состоянием внутреннего переключаемого флажка, хост-контроллер или периферийное устройство могут определить поврежденный пакет согласования (handshake packet).