Конкретная роль и значение конечных точек в реальном процессе связи USB очень важны, но их несколько сложно понять. Я приведу некоторые знания в виде памятки.
(Примечание: 1. EP в тексте означает Конечную точку;
Конечная точка — это приемник или источник данных связи между хостом и устройством. Связь между хостом и устройством в конечном итоге будет использоваться для каждой конечной точки устройства, что является логическим завершением потока связи между хостом и устройством. Ряд независимых конечных точек вместе образуют логическое USB-устройство, которое расположено в красном поле ниже в структуре системы:
Каждое USB-устройство имеет уникальный адрес устройства. Адрес устройства назначается хостом при подключении устройства к хосту. Хост в основном использует этот адрес устройства для доступа к USB-устройству. Однако внутренний адрес устройства будет разделен на более подробные сведения, и устройство будет разделять некоторые конечные точки. Каждая конечная точка будет иметь уникальный номер конечной точки в устройстве. Этот номер конечной точки задается при проектировании устройства. Например, конечная точка 0, конечная точка 1 и т. д. Устройство может содержать до 16 конечных точек, каждая с адресом 0–15. (В Интернете также есть сообщения о том, что их десятки, и их необходимо изучить)
Каждый адрес конечной точки соответствует направлению. Например, конечная точка 3-ВХОД и конечная точка 3-ВЫХОД имеют совершенно разные значения. Но нужно обратить внимание на одну из специальных конечных точек — конечную точку 0. Каждое USB-устройство должно иметь конечную точку 0, которая используется для нумерации устройства и выполнения некоторых основных функций управления на устройстве. Конечная точка 0 также называется конечной точкой управления. . И еще одно отличие ее от других конечных точек заключается в том, что направление передачи данных конечной точки 0 является двунаправленным, то есть конечная точка 0 может как отправлять данные хосту, так и принимать данные, отправленные хостом, в то время как другие конечные точки являются односторонними.
Хотя существует 16 конечных точек, мы обычно используем только 3, а именно:
1), EP0: передача информации о конфигурации и управлении;
2), EP1: выполнить ввод данных IN_EP;
3), EP2: выполнить вывод данных OUT_EP.
Примечание. За исключением конечной точки 0, остальные конечные точки не могут взаимодействовать с хостом до настройки устройства. Их можно активировать только после сообщения хосту характеристик этих конечных точек и их подтверждения.
Характеристики конечной точки определяют тип связи, которую она осуществляет с клиентским программным обеспечением. Конечная точка имеет некоторые из следующих характеристик:
Дескриптор конечной точки в USB-устройстве описывает информацию о конечной точке. Формат дескриптора конечной точки следующий:
typedef struct _USB_ENDPOINT_DESCRIPTOR_
{
BYTE bLength,
BYTE bDescriptorType,
BYTE bEndpointAddress,
BYTE bmAttributes,
WORD wMaxPacketSize,
BYTE bInterval
}USB_ENDPOINT_DESCRIPTOR;
Конкретные объяснения каждой переменной заключаются в следующем:
bLength: размер дескриптора. Исправлено значение 0x07.
bDescriptorType: тип дескриптора интерфейса. Исправлено значение 0x05.
bEndpointType: адрес конечной точки USB-устройства. Бит 7, направление, можно игнорировать для конечных точек управления, 1/0: IN/OUT. Биты 6-4, зарезервированы. BIt3-0: номер конечной точки.
bmAttributes: атрибуты конечной точки. Бит 7-2, зарезервирован. Бит 1-0: 00 управление, 01 синхронизация, 02 пакетная обработка, 03 прерывание.
wMaxPacketSize: максимальный размер пакета, полученного или отправленного этой конечной точкой.
bInterval: интервал времени для опроса конечной точки передачи данных. Игнорируется для массовой передачи и конечных точек передачи управления. Должно быть 1 для конечных точек синхронной передачи и находится в диапазоне от 1 до 255 для конечных точек передачи прерываний.
Конвейер — это соединение передачи данных между главным программным обеспечением (областью буфера данных) и конечными точками USB-устройства. Это абстракция потока связи между ними (фактически передача данных завершается интерфейсом шины USB). Каналы соответствуют конечным точкам USB-устройства один за другим, и передача данных каждого канала не зависит друг от друга.
Для конвейерных каналов существует два формата связи: поток и сообщение. Эти два формата связи являются разными и взаимоисключающими.
1) «Поток» относится к потоку данных, который не имеет формата, определенного USB. Данные в канале потока имеют форму потока, то есть содержимое данных не имеет структуры, требуемой USB. Данные поступают с одного конца канала потока в том же порядке, в котором они выходят из другого конца канала потока (сначала вход, сначала выход), а поток связи в канале потока всегда однонаправлен.
2) «Сообщение» относится к потоку данных определенного формата, определенного USB. Отношения между каналами сообщений и конечными точками отличаются от отношений между каналами потока и конечными точками. Сначала хост отправляет запрос USB-устройству, затем происходит передача данных, наконец, фаза состояния (эта часть представляет собой процесс запроса команды); Чтобы учесть изменения в запросах/данных/статусе, каналы сообщений требуют, чтобы данные имели формат, обеспечивающий возможность надежной передачи и подтверждения команд. Каналы сообщений обеспечивают двунаправленный поток информации.
Конкретная конечная точка может принадлежать только одному из четырех режимов передачи. Существует четыре типа передачи данных: передача управления, пакетная передача, синхронная передача и передача с прерыванием. При нормальных обстоятельствах конечная точка обычно называется конечной точкой, в которой она работает, например: конечная точка управления, конечная точка пакета, конечная точка синхронизации и конечная точка прерывания. Конечная точка 0 является конечной точкой управления устройства по умолчанию. Она существует и может использоваться после включения устройства. Все передачи до установки конфигурации передаются через конечную точку 0.