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

Конечная точка USB (endpoint)

Хост обменивается данными не с устройством USB в целом, а с его конечными точками — отдельными каналами внутри устройства. У каждой точки свой номер, направление и тип передачи, а нулевая точка есть у любого устройства.

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

Конечная точка (endpoint) — адресуемый канал внутри устройства USB: буфер, в который хост пишет данные или из которого их читает. Хост обращается к точке по адресу устройства, номеру точки и направлению, а номер занимает в пакете 4 бита — от 0 до 15.

Номер и направление

Направление считается со стороны хоста: точка IN отдаёт данные хосту, точка OUT принимает их от хоста. В дескрипторе точки поле bEndpointAddress хранит номер в младших четырёх битах и направление в старшем: 0x81 — точка 1 IN, 0x02 — точка 2 OUT. Точки IN и OUT с одинаковым номером — разные точки.

У каждой точки есть тип передачи — управляющая, прерывания, bulk или изохронная — и наибольший размер пакета (wMaxPacketSize). Всё это хост читает из дескриптора конечной точки.

Нулевая точка

По спецификации USB 2.0 каждое устройство обязано иметь управляющий канал на точке 0 — Default Control Pipe. Она работает в обе стороны, доступна сразу после сброса и служит для перечисления и настройки. Дескриптора у неё нет: её размер пакета записан в дескрипторе устройства. Остальные точки начинают работать только после того, как хост выберет конфигурацию.

Сколько точек бывает

СкоростьКроме точки 0
Low Speedне больше двух (только управляющие или прерывания)
Full и High Speedдо 15 IN и 15 OUT

Реальное число задаёт контроллер USB конкретного микроконтроллера. Например, у ESP32-S3 в режиме устройства — точка 0 и шесть настраиваемых, см. термин USB OTG.

Не путать с конечной точкой сети (endpoint в смысле IP-адреса и порта) и с каналом (pipe): канал — это логическая связь программы хоста с конкретной точкой.

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

Сколько конечных точек может быть у устройства USB?

По спецификации USB 2.0 у Full и High Speed — нулевая точка и до 15 дополнительных точек IN и 15 OUT, поле номера в пакете — 4 бита. У Low Speed — нулевая точка и не больше двух дополнительных. На практике число ограничивает контроллер USB в микроконтроллере: например, у ESP32-S3 в режиме устройства кроме нулевой точки их шесть.

Что такое IN и OUT у конечной точки?

Направление считается от хоста. IN — данные идут к хосту, OUT — от хоста к устройству. В дескрипторе точки направление задаёт старший бит поля bEndpointAddress: 0x81 — точка 1 IN, 0x01 — точка 1 OUT. Это две разные точки, хотя номер у них один.

Чем особенна нулевая конечная точка?

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

Источники

  1. USB-IF. Universal Serial Bus Specification, Revision 2.0 (пакет usb_20_20250603) — разд. 5.3.1.1–5.3.1.2: все устройства поддерживают управляющий канал на точке 0 (Default Control Pipe); Low Speed — не больше двух дополнительных точек, Full Speed — до 15 дополнительных точек IN и 15 OUT; остальные точки нельзя использовать до конфигурирования; разд. 8.3.2.2: 4-битное поле ENDP в токенах IN, OUT, SETUP; Low Speed — не больше трёх каналов на функцию; разд. 9.6.6, табл. 9-13: bEndpointAddress — биты 3…0 номер, бит 7 направление (0 — OUT, 1 — IN, для управляющих игнорируется); bmAttributes биты 1…0 — тип передачи 00 управляющая, 01 изохронная, 10 bulk, 11 прерывания; wMaxPacketSize; для точки 0 дескриптора нет
  2. Espressif Systems. ESP32-S3 Series Datasheet, version 2.2 — USB OTG, режим устройства: точка 0 всегда есть (EP0 IN и EP0 OUT), ещё шесть точек 1–6 настраиваются как IN или OUT; одновременно активны не больше пяти точек IN, включая EP0 IN

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