конечная точка USB для Linux
конечная точка USB для Linux

Предисловие

Конкретная роль и значение конечных точек в реальном процессе связи USB очень важны, но их несколько сложно понять. Я приведу некоторые знания в виде памятки.

(Примечание: 1. EP в тексте означает Конечную точку;

1. Концепция конечной точки.

Конечная точка — это приемник или источник данных связи между хостом и устройством. Связь между хостом и устройством в конечном итоге будет использоваться для каждой конечной точки устройства, что является логическим завершением потока связи между хостом и устройством. Ряд независимых конечных точек вместе образуют логическое USB-устройство, которое расположено в красном поле ниже в структуре системы:

2. Классификация конечных точек

Каждое 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, остальные конечные точки не могут взаимодействовать с хостом до настройки устройства. Их можно активировать только после сообщения хосту характеристик этих конечных точек и их подтверждения.

3. Характеристики конечных точек

Характеристики конечной точки определяют тип связи, которую она осуществляет с клиентским программным обеспечением. Конечная точка имеет некоторые из следующих характеристик:

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

4. Дескриптор конечной точки

Дескриптор конечной точки в USB-устройстве описывает информацию о конечной точке. Формат дескриптора конечной точки следующий:

Язык кода:javascript
копировать
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 для конечных точек передачи прерываний.

5. Конечные точки и конвейеры

1. Понятие трубопровода

Конвейер — это соединение передачи данных между главным программным обеспечением (областью буфера данных) и конечными точками USB-устройства. Это абстракция потока связи между ними (фактически передача данных завершается интерфейсом шины USB). Каналы соответствуют конечным точкам USB-устройства один за другим, и передача данных каждого канала не зависит друг от друга.

2. Классификация форматов труб.

Для конвейерных каналов существует два формата связи: поток и сообщение. Эти два формата связи являются разными и взаимоисключающими.

1) «Поток» относится к потоку данных, который не имеет формата, определенного USB. Данные в канале потока имеют форму потока, то есть содержимое данных не имеет структуры, требуемой USB. Данные поступают с одного конца канала потока в том же порядке, в котором они выходят из другого конца канала потока (сначала вход, сначала выход), а поток связи в канале потока всегда однонаправлен.

2) «Сообщение» относится к потоку данных определенного формата, определенного USB. Отношения между каналами сообщений и конечными точками отличаются от отношений между каналами потока и конечными точками. Сначала хост отправляет запрос USB-устройству, затем происходит передача данных, наконец, фаза состояния (эта часть представляет собой процесс запроса команды); Чтобы учесть изменения в запросах/данных/статусе, каналы сообщений требуют, чтобы данные имели формат, обеспечивающий возможность надежной передачи и подтверждения команд. Каналы сообщений обеспечивают двунаправленный поток информации.

6. Тип передачи конечной точки

Конкретная конечная точка может принадлежать только одному из четырех режимов передачи. Существует четыре типа передачи данных: передача управления, пакетная передача, синхронная передача и передача с прерыванием. При нормальных обстоятельствах конечная точка обычно называется конечной точкой, в которой она работает, например: конечная точка управления, конечная точка пакета, конечная точка синхронизации и конечная точка прерывания. Конечная точка 0 является конечной точкой управления устройства по умолчанию. Она существует и может использоваться после включения устройства. Все передачи до установки конфигурации передаются через конечную точку 0.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода