Основная концепция USB разработки драйверов устройств

Ссылки: https://blog.csdn.net/zqixiao_09/article/details/50984074

А, USB-устройство состоит из трех функциональных модулей, USB-интерфейс шины USB, устройства и функции логического блока:

  • Интерфейс USB: USB устройство последовательного интерфейса двигателя SIE
  • USB логическое устройство: системное программное обеспечение USB рассматривается как совокупность конечных точек
  • Функциональные блоки: клиентское программное обеспечение рассматривается как набор интерфейсов

Во- вторых, с точки зрения архитектуры устройство, USB - устройство рядом конфигурации, интерфейса и конечной точки , а именно устройство USB соответствует дескриптор устройства, который может содержать одну или более конфигураций, каждая конфигурация может содержать один или несколько интерфейсов каждый интерфейс может содержать некоторое количество конечных точек. И где конфигурация интерфейса представляет собой USB абстрактных функции устройства, и текущая передача данных завершена к конечной точке необходимо указать интерфейс для конфигурирования и использовать его в USB перечислении ;

Три, USB-устройство будет описано с помощью различных дескрипторов, архитектура которого устройство, таких как дескриптор устройства, дескриптор конфигурации, дескриптор интерфейса, конца дескриптор, строк дескриптор, они, как правило, хранящихся в устройстве USB в неподвижной программе;

Дескриптор устройства: представляет собой устройство USB, состоящее из одного или более конфигурации, для объяснения общего устройства и информации , указывающая номер , содержащийся в конфигурации, устройство USB может иметь дескриптор устройства ;

. 1  STRUCT в usb_device_descriptor
 2  {
 3.      _ _U8 bLength; // длина дескриптора 
4.      _ _U8 bDescriptorType; // номер типа дескриптора 
5.   
6.      _ _Le16 bcdUSB; // версия USB - 
7.      _ _U8 bDeviceClass; // код устройства класса USB выделено 
. 8      _ _u8 bDeviceSubClass; // подклассу код USB выделено 
9.      _ _u8 bDeviceProtocol; // код протокола USB выделено 
10      _ _u8 bMaxPacketSize0; // Endpoint0 максимальный размер пакета 
11.      _ _le16 idVendor; // ИД изготовителя 
12     _Le16 idProduct _; // Число 
13      _ _le16 bcdDevice; // серийный номер устройства 
14      _ _u8 iManufacturer; // Описание Индекс поставщика Строка 
15      _ _u8 iProduct ,; // строка описания индекса продукта 
16      _ _u8 iSerialNumber; / / индексации устройство , описанное номер строки серийный 
17.      _ _u8 bNumConfigurations; // количество возможных конфигураций 
18 является } _attribute_ _ _ _ _ ((упакованы));

Дескриптор 2 конфигурации: режим высокой мощности устройства USB и в режиме малой мощности может соответствовать конфигурациям, что USB-устройство для пояснения характеристик каждой конфигурации, таких как число, содержащегося в интерфейсе;

. 1  структура usb_config_descriptor
 2  {
 3.      _ _U8 bLength; // длина дескриптора 
4.      _ _U8 bDescriptorType; // дескриптор типа номер 
5.      
6.      _ _Le16 wTotalLength; // размер конфигурации всех возвращаемых данных 
7.      _ _U8 bNumInterfaces; // Настройка количество интерфейсов , поддерживаемых 
8.      _ _u8 bConfigurationValue; // Set_Configuration требуемое значение параметра команды 
. 9      _ _u8 IConfiguration; // строка , описывающая конфигурацию значения индекса 
10      _ _u8 bmAttributes; // выбор режима питания 
. 11      _ _u8 bMaxPower; //Максимальный ток устройства извлекается из шины 
12, } _attribute_ _ _ _ _ ((упакованы));

3 интерфейса Дескрипторы: для массового интерфейса хранения, который используется CD-ROM, когда передача файлов, аудио интерфейс, который используется, когда пользователь играет компакт-диск. Интерфейс представляет собой набор конечных точек, может содержать один или несколько альтернативных настроек, пользователь может быть в изменении состояния конфигурации количества и характеристик интерфейса USB содержит текущее время, это характерно для каждого пользовательского интерфейса Описание USB устройства, например, принадлежит устройство класс и его подклассы;

. 1  структура usb_interface_descriptor
 2  {
 3.      _ _U8 bLength;            // длина дескриптора 
. 4      _ _u8 bDescriptorType; // дескриптор типа 
5.      
6.      _ _U8 bInterfaceNumber;    // номер интерфейса 
. 7      _ _u8 bAlternateSetting; // запасной интерфейс дескриптора No. 
8      _u8 bNumEndpoints _;       // конечные точки интерфейса не включено 0 
9.      _ _u8 bInterfaceClass;     // Тип интерфейса 
10      _ _u8 bInterfaceSubClass; // интерфейсы подтип 
11.      _ _u8 bInterfaceProtocol; //Круги протокол интерфейса 
12      _ _u8 IInterface; // строка описания значение индекса интерфейса 
13 является } _attribute_ _ _ _ _ ((упакованы));

4 конечная точка дескриптора; конечные точки являются реальной физической единицей в устройстве USB, то есть, передача данных USB выполняется между устройством USB и каждым конечной точкой хостом. Каждая конечная точка имеет единственное число конечных точек, каждая конечная точка направления передачи данных определяется как правило, поддерживается, то есть вход в и выход OUT, использование адреса устройства, и номер конечной точки может указывать направление передачи конечной точки. 0 специальная конечная точка, то есть ввод данных в систему и выход из двух физических блоков данных, а также управления может поддерживать только передачу всех USB-устройств должна содержать количество конечной точки 0, используют в качестве контроля по умолчанию трубы с, система USB-программное обеспечение является использование конфигурация трубопроводов и USB-логическое устройство в связи; 0 конечная точка не должна быть использована только в более поздней конфигурации. Конечные точки USB-устройство может содержать множество не равно нулю, для низкоскоростных устройств содержат до двух дополнительных конечных точек, для полной скорости / высокоскоростной устройство содержит до 15 дополнительных конечных точек;

. 1  структура usb_endpoint_descriptor
 2  {
 . 3      _ _u8 bLength; // длина дескриптора 
. 4      _ _u8 bDescriptorType; // дескриптор типа 
. 5      _ _u8 bEndpointAddress; // Конечная точка Адрес: 0 ~ 3 номер конечной точки, бит 7 является направление (0 -OUT, то In- 1). 
6.      _ _u8 bmAttributes; // атрибут конечной точки: бит [0: 1] указывает значение управления 00, 01 обозначает синхронизацию, выраженные в виде величин 02, 03 , как прерывание 
. 7      _ _le16 wMaxPacketSize; / // / конечная точка в соответствии с максимальным размером пакета или передавать 
8.      _ _u8 bInterval; // временной интервал данные опроса , передающие конечную точку
 9                             // для групповой передачи конечной точки и конечной точкой передачи управления, это поле игнорируются
 10                          // для конечная точка изохронных передач, это поле должно быть 1 
. 11     _ _U8 bRefresh;
12      _ _u8 bSynchAddress;
13 } _ _ _attribute_ ((упакованы));

5 Строки Descriptor: описание какой-либо конкретной информации, например, название производителя, серийный номер, его содержание было дано в виде Unicode, который может быть прочитан с помощью клиентского программного обеспечения, дескриптор строки не является обязательным;

. 1  структура usb_string_descriptor
 2  {
 3.      _ _U8 bLength; // длина дескриптора 
4.      _ _U8 bDescriptorType; // дескриптор типа 
5.      
6.      _ _Le16 WDATA [ 1. ];
 . 7 } _ _ _ _ _attribute_ ((упакованы));

Внутривенно

В-пятых,

рекомендация

отwww.cnblogs.com/bo1990/p/11424342.html