Перейти к содержанию

Типы передач USB

Флешке важно, чтобы ни один байт не потерялся, а звуковой карте — чтобы звук шёл без пауз, даже ценой редкой ошибки. Поэтому USB предлагает четыре типа передач с разными гарантиями, и каждая конечная точка работает в одном из них.

Обновлено Редакция GAW

Типы передач (transfer types) — четыре режима, в которых конечные точки USB обмениваются данными с хостом. Каждый даёт свои гарантии: доставку без потерь, постоянную полосу или ограниченную задержку. Тип задаётся для каждой конечной точки в её дескрипторе — двумя младшими битами поля bmAttributes.

Сравнение по USB 2.0

ТипКодЧто гарантируетНаибольший пакет (Low / Full / High Speed)
Управляющие (control)00доставку, обязательны на точке 08 / 8–64 / 64 байта
Изохронные (isochronous)01полосу и постоянную скорость, без повторов— / 1023 / 1024 байта
Массивные (bulk)10доставку с повторами, но не полосу и не задержку— / 8–64 / 512 байт
Прерывания (interrupt)11наибольший период опроса, повтор в следующем периоде8 / 64 / 1024 байта

«Прерывания» здесь — не аппаратное прерывание: хост сам опрашивает такую точку с заданным периодом, а слово отражает назначение — редкие небольшие сообщения с ограниченной задержкой.

Как выбирают тип

  • Управляющие передачи служат для перечисления и настройки и всегда идут через нулевую точку.
  • Прерывания — небольшие порции данных с гарантированной частотой опроса: клавиатуры, мыши и другие устройства класса HID.
  • Bulk — большие объёмы, где важна целостность: флешки, виртуальные COM-порты. Для двустороннего обмена нужны две bulk-точки, по одной на направление.
  • Изохронные — звук и видео: данные идут с постоянной скоростью, а испорченный пакет не повторяется.

Контроллер USB микроконтроллера может поддерживать не все типы на всех каналах. Например, в режиме хоста у ESP32-S3 управляющий канал работает только с управляющими передачами, а остальные каналы — с bulk, изохронными и прерываниями.

Не путать с режимами скорости Low, Full и High Speed: тип передачи описывает гарантии обмена, а скорость — физический уровень шины.

Частые вопросы

Какой тип передачи выбрать для своего устройства USB?

Для небольших порций данных с гарантированной частотой опроса — прерывания. Для больших объёмов, где важна целостность, а не сроки, — bulk. Для потоков с постоянной скоростью, где повтор испорченного пакета бесполезен, — изохронные. Какой тип требует стандартный класс устройства, указывает спецификация класса. Управляющие передачи есть всегда на нулевой точке.

Почему у Low Speed нет bulk?

Спецификация USB 2.0 прямо запрещает устройствам Low Speed иметь bulk-точки (разд. 5.8.3). А по разд. 8.3.2.2 у них, кроме нулевой точки, может быть не больше двух каналов, и это либо управляющие каналы, либо точки прерываний — изохронных нет. Пакеты у Low Speed — до 8 байт.

Гарантирует ли bulk скорость передачи?

Нет. Bulk гарантирует доставку — при ошибке пакет повторяется, — но получает только ту полосу, что осталась после остальных типов. На свободной шине bulk очень быстрый, на загруженной данные могут идти медленно.

Источники

  1. USB-IF. Universal Serial Bus Specification, Revision 2.0 (пакет usb_20_20250603) — разд. 5.5: управляющие передачи, размер пакета Full Speed 8, 16, 32 или 64 байта, High Speed — 64, Low Speed — 8; разд. 5.6: изохронные — гарантированный доступ к полосе с ограниченной задержкой, постоянная скорость, без повторов при ошибке, до 1023 байт на точку Full Speed, до 1024 на High Speed; разд. 5.7: прерывания — гарантированный наибольший период обслуживания, повтор в следующем периоде, до 8 байт (Low), 64 (Full), 1024 (High); разд. 5.8: bulk — доступ к полосе по остатку, повторы при ошибках, гарантированная доставка без гарантии полосы и задержки, пакеты 8–64 байта на Full Speed и 512 на High Speed, у Low Speed bulk-точек быть не должно; для двустороннего обмена bulk нужны два канала; разд. 8.3.2.2: у Low Speed — точка 0 и не больше двух каналов: управляющие или прерывания; табл. 9-13: bmAttributes биты 1…0 — 00 управляющая, 01 изохронная, 10 bulk, 11 прерывания
  2. Espressif Systems. ESP32-S3 Series Datasheet, version 2.2 — разд. 4.2.1.7, режим хоста USB OTG: управляющий канал из двух каналов IN и OUT поддерживает только управляющие передачи, всего восемь каналов; управляющий канал состоит из двух (IN и OUT), остальные каналы — bulk, изохронные и прерывания (в тексте v2.2 они названы «семью», что не сходится с 8 − 2)

Нашли ошибку?