Все обмены (транзакции) по USB состоят из трех пакетов. Каждая транзакция планируется и начинается по инициативе хост-контроллера, который посылает маркер-пакет (т. е. пакет типа token). Он описывает тип и направление передачи, адрес устройства USB и номер конечной точки. В каждой транзакции возможен обмен только между устройством (его конечной точкой) и хостом. Адресуемое маркером устройство распознает свой адрес и готовится к обмену. Источник данных, определенный маркером, передает пакет данных или уведомление об отсутствии данных, предназначенных для передачи. После успешного приема пакета приемник данных посылает пакет подтверждения (т.е. пакет типа Handshake).

Обмен данными

Где А - передача данных от хоста, Б - передача данных хосту.

Периферийное устройство не может выдавать на шину какую-либо информацию по собственной инициативе и не может самостоятельно посылать запросы прерываний.

Спецификация USB определяет следующие типы транзакций.
Передача команды:

  • хост посылает маркер SETUP, содержащий номер функции и номер конечной точки, для которой предназначена команда;
  • хост посылает выбранной конечной точке пакет данных со сброшенным битом синхронизации (т. е. пакет типа Data0), содержащий 8-байтный код команды;
  • функция посылает хосту пакет подтверждения.
Изохронная передача данных:
  • хост посылает маркер OUT, содержащий номер функции и номер конечной точки, для которой предназначены данные;
  • хост посылает выбранной конечной точке пакет данных со сброшенным битом синхронизации (т. е. пакет типа Data0).
Передача данных с подтверждением:
  • хост посылает маркер OUT, содержащий номер функции и номер конечной точки, для которой предназначены данные;
  • хост посылает выбранной конечной точке пакет данных;
  • функция посылает хосту пакет подтверждения.
Изохронный прием данных:
  • хост посылает маркер IN, содержащий номер функции и номер конечной точки, от которой запрашиваются данные;
  • выбранная конечная точка передает хосту пакет данных со сброшенным битом синхронизации (т. е. пакет типа Data0).
Прием данных с подтверждением:
  • хост посылает маркер IN, содержащий номер функции и номер конечной точки, от которой запрашиваются данные;
  • выбранная конечная точка передает хосту пакет данных или пакет подтверждения (NAK - данные не готовы, STALL - сбой);
  • если хост получил пакет данных, он посылает пакет подтверждения.