Bulk Транзакции
Тип транзакций Bulk характеризуется способностью гарантировать доставку данных без ошибок между хостом и функцией посредством обнаружения ошибок и повторений. Транзакции Bulk используют три фазы транзакции, состоящие из маркера, данных, и пакетов квитирования как показано на Рисунок 8-9. При некоторых условиях управлении потоком данных и остановке, фаза данных может быть заменена на квитирование, в результате получаются две фазы транзакций, в которых данные не передаются.
Рисунок 8-9. Формат Транзакции Bulk
Когда хост хочет получить данные bulk, он выдает маркер IN. Конечная точка функции отвечает, возвращая или пакет DATA или если это невозможно квитирование NAK или STALL. NAK указывает, что функция временно неспособна возвращать данные, в то время как STALL указывает, что конечная точка постоянно останавливается и требует вмешательства программного обеспечения хоста. Если хост получает пакет достоверных данных, он отвечает квитированием ACK. Если хост обнаруживает ошибку при получении данных, он вообще не возвращает пакет квитирования функции.
Когда хост хочет передавать данные bulk, он сначала выдает маркерный пакет OUT за которым следует пакет данных. Затем функция возвращает одно из трех квитирований. ACK указывает, что пакет данных был получен без ошибок и сообщает хосту о том что, он может посылать следующий пакет из последовательности. NAK указывает, что данные были получены без ошибок, но хост должен снова послать данные, потому что функция была в тот момент временно неспособна принимать данные (например, из-за заполнения буфера). Если конечная точка была остановлена, то возвращается STALL, чтобы указать, что хост не должен повторять передачу, потому что имеется условие ошибки в функции. Если пакет данных был получен с ошибками в CRC или во вставке бит, то квитирование не возвращается.
Рисунок 8-10 показывает использование последовательности бит, и данные PID для bulk чтения и записи. Синхронизация пакетов данных достигается с помощью использования бит переключения последовательности данных и PIDов DATA0/DATA1. Конечные точки Bulk должны иметь свои биты последовательности переключения, инициализированные с помощью отдельной управляющей конечной точки.
Рисунок 8-10. Bulk Чтения и Записи
Хост всегда инициализирует первую транзакцию передачи по шине как PID DATA0. Вторая транзакция использует PID DATA1, и последующие передачи данных чередуются для остатка от bulk передачи. Передатчик пакета данных переключается после получения ACK, и переключается после получения и принятия правильного пакета данных (обратитесь к Разделу 8.6).(The data packet transmitter toggles upon receipt of ACK, and the receiver toggles upon receipt and acceptance of a valid data packet)