Transmisión USB, codificación, formato de datos, domina los conocimientos necesarios de usb

1. Punto final: un búfer de datos ubicado en el dispositivo o host USB, que se utiliza para almacenar y enviar varios datos USB, cada punto final tiene una dirección definida única y diferentes características de transmisión (como punto final de entrada, punto final de salida, punto final de configuración, punto final de transferencia masiva )

2. Cuadro: el concepto de tiempo.En USB, un cuadro es 1MS, que es una unidad independiente e incluye una serie de acciones de bus.USB divide un cuadro en varias partes, cada una de las cuales es una acción de transmisión USB.

3. Enlace ascendente y descendente: el dispositivo al host es el enlace ascendente y el host al dispositivo es el enlace descendente

Comencemos con un formato de preguntas y respuestas.

Pregunta 1: ¿Cuál es la estructura de la línea de transmisión USB?

Respuesta 1: una línea de transmisión USB consta de cuatro líneas: línea de tierra, línea de alimentación, D+, D-. D+ y D- son líneas de entrada diferencial, que utilizan un voltaje de 3,3 V (tenga en cuenta que es el mismo que el nivel de 5 V de CMOS diferente), y la línea de alimentación y la línea de tierra pueden proporcionar un voltaje de 5V al dispositivo, la corriente máxima es de 500MA (se puede configurar en la programación, en cuanto al mecanismo de implementación del hardware, no se preocupe).

Pregunta 2: ¿Cómo se transmiten los datos en la línea de transmisión USB?

Respuesta 2: Los datos se envían de menor a mayor en el cable USB.

Pregunta 3: ¿El esquema de codificación de USB?

Respuesta 3: USB utiliza inversión sin retorno a cero para transmitir datos. Cuando los datos diferenciales en la línea de transmisión se ingresan 0, se invierten, y cuando se ingresa 1, se mantiene el valor original. Para garantizar la precisión de la transmisión de la señal, al enviar un Cuando se envía el paquete, el dispositivo de transmisión realizará una operación de inserción de bits (es decir, insertará un 0 después de cada 6 1 consecutivos en el flujo de datos), lo que forzará el cambio del código NRZI. Este conocimiento es suficiente, estos son manejados por hardware especializado.

Pregunta 4: ¿Cuál es el formato de datos de USB?

Respuesta 4: Al igual que otros, los datos USB se componen de cadenas de números binarios. Primero, la cadena de números constituye un dominio (hay siete tipos), el dominio constituye un paquete, el paquete constituye una transacción (ENTRADA, SALIDA, CONFIGURACIÓN) y la transacción finalmente constituye una transmisión (transferencias de interrupción, transferencias paralelas, transferencias masivas y transferencias de control). A continuación, se presenta brevemente el dominio, el paquete, la transacción y el transporte; preste atención a la relación entre ellos.

(1) Dominio: es la unidad más pequeña de datos USB, que consta de varios bits (cuántos bits están determinados por el dominio específico), el dominio se puede dividir en siete tipos:

1. Campo de sincronización (SYNC), ocho bits, el valor se fija en 0000 0001, se utiliza para sincronizar el reloj local con la entrada

2. El campo de identificación (PID), que se compone de identificador de cuatro dígitos + código inverso del identificador de cuatro dígitos, indica el tipo y formato del paquete, que es una parte muy importante, aquí se puede calcular que hay 16 tipos de códigos de identificación USB Consulte la pregunta 5 para conocer las categorías específicas.

3. Dominio de dirección (ADDR): dirección de siete bits, que representa la dirección del dispositivo en el host, la dirección 000 0000 se nombra como dirección cero, que es la primera vez que un dispositivo se conecta al host, antes de ser configurado y enumerado por el host La dirección predeterminada, para que pueda saber por qué un host USB solo puede conectar 127 dispositivos.

4. Campo de punto final (ENDP), cuatro bits, se puede ver que un dispositivo USB tiene un máximo de 16 puntos finales.

5. Campo de número de cuadro (FRAM), 11 bits, cada cuadro tiene un número de cuadro específico, la capacidad máxima del campo de número de cuadro es 0x800, que es de gran importancia para la transmisión síncrona (la transmisión síncrona es uno de los cuatro tipos de transmisión, por favor ver más abajo).

6. Campo de datos (DATOS): La longitud es de 0~1023 bytes. En diferentes tipos de transmisión, la longitud del campo de datos es diferente, pero debe ser un número entero de bytes de longitud.

7. Campo de verificación (CRC): un método para verificar los campos que no son PID en paquetes de token y paquetes de datos (consulte la clasificación de paquetes a continuación). método de verificación. En cuanto al método de verificación específico, no diré mucho aquí. Consulte la información relevante. Solo es necesario tener en cuenta que la división del código CRC es una operación de módulo 2, que es diferente de la división en el sistema decimal

(2) Paquete: hay cuatro tipos de paquetes compuestos por dominios, a saber, paquetes de token, paquetes de datos, paquetes de protocolo de enlace y paquetes especiales. Los primeros tres son paquetes importantes. La estructura de dominio de los diferentes paquetes es diferente. La introducción es la siguiente.

1. Paquete de token: se puede dividir en paquete de entrada, paquete de salida, paquete de configuración y paquete de inicio de cuadro (tenga en cuenta que el paquete de entrada aquí se usa para configurar el comando de entrada, y el paquete de salida se usa para configurar el comando de salida, no el número de datos)

El formato del paquete de entrada, el paquete de salida y el paquete de configuración es el mismo:

SYNC+PID+ADDR+ENDP+CRC5 (código de verificación de cinco dígitos)

(Para la explicación de las abreviaturas anteriores, consulte la introducción del dominio anterior y para la definición específica del código PID, consulte la Pregunta 5)

El formato del paquete de inicio de trama:

SYNC+PID+11 bits FRAM+CRC5 (código de verificación de cinco bits)

2. Paquete de datos: se divide en paquete DATA0 y paquete DATA1.Cuando el USB envía datos, cuando la longitud de los datos enviados a la vez es mayor que la capacidad del punto final correspondiente, el paquete de datos debe dividirse en varios paquetes , enviado por lotes, paquete DATA0 Se envía alternativamente con el paquete DATA1, es decir, si el primer paquete de datos es DATA0, entonces el segundo paquete de datos es DATA1. Pero hay excepciones En la transmisión síncrona (uno de los cuatro tipos de transmisión), todos los paquetes de datos son DATA0, y el formato es el siguiente:

SINCRONIZACIÓN+PID+0~1023 bytes+CRC16

3. Paquete de protocolo de enlace: el paquete con la estructura más simple, el formato es el siguiente

SINCRONIZACIÓN+PID

(Tenga en cuenta que cada uno de los paquetes anteriores tiene diferentes tipos. USB1.1 define diez tipos de paquetes. Para obtener más información, consulte la Pregunta 5)

(3) Transacciones: Hay tres transacciones principales: transacción IN, transacción OUT y transacción SETUP. Cada transacción consta de tres etapas: paquete de token, paquete de datos y paquete de protocolo de enlace. El significado de etapa aquí se debe al envío de estos paquetes. Hay un cierto orden cronológico, las tres etapas de la transacción son las siguientes:

1. Fase de paquete de token: iniciar una transacción de entrada, salida o establecimiento

2. Etapa del paquete de datos: envíe los datos correspondientes según la entrada y la salida

3. Fase de paquete Handshake: Devuelve el estado de recepción de datos, esta fase no está presente en las transacciones IN y OUT de transmisión síncrona, lo cual es especial.

Los tres tipos de transacciones son los siguientes (una transacción se describe en tres fases a continuación):

1. EN transacción:

Etapa de paquete de token: el host envía un paquete de entrada con un PID de IN al dispositivo, notificando al dispositivo que envíe datos al host;

Fase de paquete de datos: el dispositivo hará tres respuestas según la situación (nota: la fase de paquete de datos no siempre transmite datos, y entrará en la fase de paquete de protocolo de enlace por adelantado según la situación de transmisión)

1) El punto final del dispositivo es normal y el dispositivo envía paquetes de datos al host (DATA0 y DATA1 alternativos);

2) Cuando el dispositivo está ocupado y no puede enviar un paquete de datos al host, envía un paquete no válido NAK, la transacción IN finaliza antes y la siguiente transacción IN no continúa;

3) El punto final del dispositivo correspondiente está deshabilitado y se envía el paquete de error STALL, la transacción finaliza por adelantado y el bus entra en estado inactivo.

Fase de paquete de protocolo de enlace: después de que el host reciba los datos correctamente, enviará un paquete ACK al dispositivo.

2. Transacción de SALIDA:

Fase de paquete de token: el host envía un paquete de salida con un PID de SALIDA al dispositivo, notificándole al dispositivo que reciba datos;

Etapa del paquete de datos: relativamente simple, es decir, el host enviará datos al dispositivo, DATA0 y DATA1 se alternan

Fase de paquete de protocolo de enlace: el dispositivo hará tres respuestas según la situación

1) El punto final del dispositivo recibe correctamente, el dispositivo devuelve ACK al host entrante, notificando al host que se pueden enviar nuevos datos, si el paquete de datos tiene un error de verificación de CRC, no devolverá ninguna información de protocolo de enlace;

2) Si el dispositivo está ocupado y no puede enviar paquetes de datos al host, enviará un paquete no válido NAK para notificar al host que envíe datos nuevamente;

3) El punto final del dispositivo correspondiente está deshabilitado, el paquete de error STALL se envía, la transacción finaliza por adelantado y el bus ingresa directamente al estado inactivo.

3. Transacción SETUP:

Etapa de paquete de token: el host envía un paquete de salida con un PID de CONFIGURACIÓN al dispositivo, notificando al dispositivo que reciba datos;

Etapa del paquete de datos: relativamente simple, es decir, el host enviará datos al dispositivo. Tenga en cuenta que solo hay un paquete DATA0 fijo en 8 bytes. El contenido de estos 8 bytes es el comando de solicitud de dispositivo USB estándar (hay 11 en total, el específico Consulte la pregunta 7)

Fase de paquete de protocolo de enlace: después de que el dispositivo recibe la información del comando del host, devuelve ACK, luego de lo cual el bus entra en un estado inactivo y se prepara para la siguiente transmisión (generalmente una transmisión que consiste en una transacción IN o OUT después de una transacción SETUP)

(4) Transmisión:

La transmisión consta de transacciones de SALIDA, ENTRADA y CONFIGURACIÓN. Hay cuatro tipos de transmisión, transmisión de interrupción, transmisión por lotes, transmisión síncrona y transmisión de control. La estructura de la transmisión de interrupción y la transmisión por lotes es la misma, y ​​la transmisión síncrona tiene la estructura más simple. La transferencia de control es la transferencia más importante y compleja.

1. Transmisión de interrupción: compuesta por transacción de SALIDA y transacción de ENTRADA, utilizada en la transmisión de datos de dispositivos HID como teclado y mouse

2. Transmisión masiva: se compone de transacción de SALIDA y transacción de ENTRADA. Se utiliza para la transmisión de datos de gran capacidad. No tiene una velocidad de transmisión fija y no ocupa ancho de banda. Cuando el bus está ocupado, el USB dará prioridad a otros tipos. de transmisión de datos y detener temporalmente la transferencia. como disco U

3. Transmisión síncrona: Consiste en transacciones de SALIDA y transacciones de ENTRADA. Hay dos lugares especiales. Primero, no hay fase de paquete de retorno en las transacciones de ENTRADA y SALIDA de transmisión síncrona; segundo, en la fase de paquete de datos, todos los paquetes de datos son DATA0, como transmisión de video y audio

4. Transmisión de control: la transmisión más importante y más compleja, la transmisión de control consta de tres etapas (etapa de configuración inicial, etapa de datos opcional, etapa de información de estado), cada etapa puede considerarse como una transmisión, es decir, control El transmisión se compone en realidad de tres transmisiones, que se utilizan para

Después de que el dispositivo USB se conecta al host por primera vez, el host intercambia información, las direcciones del dispositivo y lee los descriptores del dispositivo a través de la transmisión de control, para que el host reconozca el dispositivo e instale el controlador correspondiente. Esto es lo que todo desarrollador de USB debe hacer. estar preocupado por. pregunta.

1. Paso de configuración inicial: es una transmisión que consiste en transacciones SET

2. Paso de datos opcional: Es una transmisión que consiste en transacciones IN o OUT. Este paso es opcional, dependiendo de si el paso de configuración inicial requiere datos de lectura/escritura (comando de solicitud estándar enviado por la fase de paquete de la transacción SET). Decidir )

3. Paso de información de estado: como su nombre lo indica, este paso es para obtener información de estado, que es una transmisión compuesta de transacciones IN o OUT, pero debe tenerse en cuenta que las transacciones IN y OUT aquí son diferentes de las transacciones INT y OUT anteriores. transacciones en dos puntos:

1) La dirección de transmisión es opuesta, generalmente IN significa que el dispositivo envía datos al host, OUT significa que el host envía datos al dispositivo; aquí, IN significa que el host envía datos al dispositivo y OUT significa que el dispositivo envía datos al dispositivo. host, esto es para una combinación de datos opcional de pasos;

2) En este paso, los paquetes de datos en la fase de paquete de datos son todos de longitud 0, es decir, SYNC+PID+CRC16

Excepto por los dos puntos anteriores, los demás son iguales, así que no diré mucho aquí.

(Pensando: ¿Cómo se deben configurar estos modos de transmisión en el trabajo real?)

Pregunta 5: ¿Qué son los códigos de identificación?

Respuesta 5: Como se mencionó anteriormente, el código de identificación se compone de datos de cuatro dígitos, por lo que puede representar dieciséis tipos de códigos de identificación. En la especificación USB 1.1, solo se utilizan diez tipos de códigos de identificación y dieciséis tipos de códigos de identificación. se utilizan en USB2.0. , La función del código de identificación es describir los atributos del paquete. El código de identificación está asociado con el paquete. Primero, introduzca brevemente los tipos de paquetes de datos. Los paquetes de datos se dividen en cuatro tipos : paquetes de token, datos, paquetes de protocolo de enlace y paquetes especiales (consulte la pregunta 7 para obtener una clasificación específica), existen los siguientes dieciséis tipos de códigos de identificación:

Paquete de fichas:

0x01 La salida (OUT) inicia una transferencia en la dirección del host al dispositivo y contiene la dirección y la etiqueta del dispositivo

0x09 La entrada (IN) inicia una transferencia en la dirección del dispositivo al host y contiene la dirección y la etiqueta del dispositivo

0x05 Start of Frame (SOF) indica el inicio de un cuadro y contiene el número de cuadro correspondiente

0x0d SETUP inicia una transferencia de control para que el host inicialice el dispositivo

paquete de datos :

0x03 Paquete de datos pares (DATA0),

0x0b Paquete impar (DATA1)

Paquete de apretón de manos:

0x02 Acuse de recibo de un paquete sin errores (ACK)

0x0a no es válido, el lado de recepción (envío) está ocupado y no puede recibir (enviar) información

Error 0x0e, el punto final está prohibido o no admite la solicitud de canalización de control

Preámbulo de paquete especial 0x0C, utilizado para iniciar la transmisión de datos de dispositivos de baja velocidad en puertos de enlace descendente

Pregunta 6: ¿Cómo identifica el host USB el dispositivo USB?

Respuesta 6: Cuando el dispositivo USB se conecta al host, el host enumerará y configurará el dispositivo a través de una serie de acciones (la configuración es un estado de enumeración y el estado representa un estado temporal). Estos estados son los siguientes:

1. Adjunto: después de que el dispositivo se conecta al host, el host descubre el acceso del dispositivo al detectar el cambio de nivel en la línea de señal;

2. Powered state (Powered): Es para suministrar energía al dispositivo, la cual se divide en el valor de la fuente de alimentación por defecto cuando el dispositivo está conectado, y el valor de la fuente de alimentación después de la etapa de configuración (según el valor máximo requerido en el datos, que se pueden configurar por programación)

3. Estado predeterminado (predeterminado): antes de configurar el USB, se comunica con el host a través de la dirección predeterminada 0;

4. Estado de la dirección: después de la configuración, después de que se reinicia el dispositivo USB, puede comunicarse con el host de acuerdo con la dirección única que le asignó el host.Este estado es el estado de la dirección;

5. Configurado: obtenga información diversa del dispositivo a través de varios comandos de solicitud USB estándar y cambie o configure cierta información del dispositivo.

6. Suspendido: el dispositivo alimentado por bus no tiene operación de bus dentro de 3 ms, es decir, si el bus USB está en un estado inactivo, el dispositivo automáticamente entrará en estado suspendido.Después de entrar en el estado suspendido, el consumo total de energía actual no no exceda 280UA.

Pregunta 7: ¿Cuál es exactamente el comando de solicitud de dispositivo USB estándar mencionado en la Respuesta 4?

Respuesta 7: El comando de solicitud de dispositivo USB estándar se usa en la fase del paquete de datos (es decir, DATA0, que consta de ocho bytes) en el "paso de configuración inicial" en la transferencia de control. Consulte el contenido de las preguntas y respuestas 4. Hay un total de 11 comandos de solicitud de dispositivo USB estándar, todos los cuales tienen un tamaño de 8 bytes y tienen la misma estructura. Constan de 5 campos (el campo es la parte de datos del comando de solicitud estándar). La estructura es la siguiente (los números entre paréntesis indican el número de bytes, las primeras letras bm, b, w representan mapa de bits, byte, byte doble respectivamente):

bmRequestType(1)+bRequest(1)+wvalue(2)+wIndex(2)+wLength(2)

El significado de cada campo es el siguiente:

1, tipo de solicitud bm: D7D6D5D4D3D2D1D0

D7=0 host a dispositivo

= 1 dispositivo para alojar;

D6D5=00 comando de solicitud estándar

=01 comando de solicitud de clase

=10 comandos definidos por el usuario

=11 valor reservado

D4D3D2D1D0=00000 El destinatario es el dispositivo

=00001 El destinatario es el dispositivo

=00010 El receptor es el punto final

=00011 El destinatario es otro destinatario

= otros otros valores reservados

2. bRequest: Solicitar código de comando. En los comandos USB estándar, cada comando define un número, y el valor del número es el valor del campo. El número y el nombre del comando son los siguientes (tenga en cuenta que el código de comando aquí debe usarse en combinación con otros campos, se puede decir que el código de comando es el núcleo del código de comando de solicitud estándar, y es precisamente debido a estos códigos de comando que se determinan los 11 comandos de solicitud estándar USB):

0) 0 GET_STATUS: se utiliza para devolver el estado de un receptor específico

1) 1 CLEAR_FEATURE: se usa para borrar o deshabilitar ciertas funciones del receptor

2) 3 SET_FEATURE: Se utiliza para habilitar o activar algunas funciones del receptor de comandos

3) 5 SET_ADDRESS: se utiliza para asignar una dirección al dispositivo

4) 6 GET_DEscriptOR: Utilizado por el host para obtener el descriptor específico del dispositivo

5) 7 SET_DEscriptOR: Modifique el descriptor relevante en el dispositivo, o agregue un nuevo descriptor

6) 8 GET_CONFIGURATION: utilizado por el host para obtener el valor de configuración del dispositivo actual del dispositivo (tenga en cuenta que es diferente al anterior)

7) 9 SET_CONFIGURATION: utilizado por el host para indicar la configuración requerida adoptada por el dispositivo

8) 10 GET_INTERFACE: se utiliza para obtener el número de descriptor de interfaz actual

9) 11 SET_INTERFACE: utilizado por el host para solicitar al dispositivo que describa la interfaz con un descriptor

10) 12 SYNCH_FRAME: utilizado por el dispositivo para configurar e informar el marco de sincronización de un punto final

Los 11 comandos anteriores son realmente tan largos como un trozo de tela. Lea el libro. No diré mucho aquí. La transmisión de control es el enfoque de USB, y estos 11 comandos son el enfoque de la transmisión de control, por lo que estos 11 comandos son la máxima prioridad Si se entiende esto, USB es incluso una entrada.

Pregunta 8: El descriptor se ve a menudo en los comandos de solicitud USB estándar ¿Cuál es el origen de esto?

Respuesta 8: El descriptor es un descriptor, que es una estructura de datos completa, que puede implementarse mediante programación, como lenguaje C, y almacenarse en un dispositivo USB para describir todas las propiedades de un dispositivo USB. El host USB solicita el dispositivo a través de un serie de comandos envió esta información. Su función es transmitir información al host a través de comandos como en la sección de preguntas y respuestas, para que el host pueda saber qué función tiene el dispositivo, a qué tipo de dispositivo pertenece, cuánto ancho de banda ocupa, qué tipo de transmisión método a usar, y la cantidad de datos Tamaño, solo después de que el host determine esta información, el dispositivo realmente puede comenzar a funcionar, por lo que el descriptor también es una parte muy importante, debe dominarse. Hay 5 descriptores estándar y USB define números para estos descriptores:

1 - descriptor de dispositivo

2 - Descriptor de configuración

3 - descriptor de carácter

4 - Descriptor de interfaz

5 - Descriptor de punto final

Existe una cierta relación entre los descriptores anteriores. Un dispositivo tiene solo un descriptor de dispositivo, y un descriptor de dispositivo puede contener múltiples descriptores de configuración, y un descriptor de configuración puede contener múltiples descriptores de interfaz. Una interfaz usa varios Para cada punto final, hay varios puntos finales descriptores. Este descriptor está compuesto por ciertos campos, los cuales se describen a continuación:

1. Descriptor del dispositivo

estructura _DEVICE_DEscriptOR_STRUCT

{

BYTE bLength; //El tamaño del descriptor del dispositivo en bytes, que es 0x12

BYTE bDescriptorType; //Número de tipo de descriptor, 0x01

WORD bcdUSB; //Número de versión USB

BYTE bDeviceClass; //El código de clase de dispositivo asignado por USB, 0x01~0xfe es la clase de dispositivo estándar, 0xff es el tipo definido por el fabricante

//0x00 no está definido en el descriptor del dispositivo, como HID

BYTE bDeviceSubClass; //Código de subclase asignado por usb, igual que arriba, el valor es especificado y asignado por USB

BYTE bDeviceProtocl; //Código de protocolo del dispositivo asignado por USB, igual que arriba

BYTE bMaxPacketSize0; //El tamaño máximo de paquete del punto final 0

WORD idVendor; //ID del proveedor

WORD idProduct; //Número de producto

WORD bcdDevice; //Número de fábrica del dispositivo

BYTE iManufacturer; //Describe el índice de la cadena del fabricante

BYTE iProduct; //Describe el índice de la cadena del producto

BYTE iSerialNumber; //Describe el índice de la cadena del número de serie del dispositivo

BYTE bNumConfiguration; //Número de configuraciones posibles

}

2. Descriptor de configuración

estructura _CONFIGURATION_DEscriptOR_STRUCT

{

BYTE bLength; //El tamaño del descriptor del dispositivo en bytes, que es 0x12

BYTE bDescriptorType; //Número de tipo de descriptor, 0x01

WORD wTotalLength; //Configurar el tamaño de todas las cantidades devueltas

BYTE bNumInterface; //Número de interfaces soportadas por esta configuración

BYTE bConfigurationVale; //Valores de parámetros requeridos por el comando Set_Configuration

BYTE iConfiguration; //El valor de índice de la cadena que describe la configuración

BYTE bmAttribute; //Selección del modo de alimentación

BYTE MaxPower; //La corriente máxima que el dispositivo extrae del bus

}

3. Descriptor de caracteres

estructura _STRING_DEscriptOR_STRUCT

{

BYTE bLength; //El tamaño del descriptor del dispositivo en bytes, que es 0x12

BYTE bDescriptorType; //Número de tipo de descriptor, 0x01

BYTE SomeDescriptor[36]; //Cadena codificada en UNICODE

}

4. Descriptor de interfaz

estructura _INTERFACE_DEscriptOR_STRUCT

{

BYTE bLength; //El tamaño del descriptor del dispositivo en bytes, que es 0x12

BYTE bDescriptorType; //Número de tipo de descriptor, 0x01

BYTE bInterfaceNunber; //El número de la interfaz

BYTE bAlternateSetting;//Número de descriptor de interfaz alternativo

BYTE bNumEndpoints; //El número de puntos finales utilizados por esta interfaz, excluyendo el punto final 0

BYTE bInterfaceClass; //Tipo de interfaz

BYTE bInterfaceSubClass;//Subtipo de interfaz

BYTE bInterfaceProtocol;//El protocolo seguido por la interfaz

BYTE iInterface; //El valor de índice de cadena que describe la interfaz

}

5. Descriptor de punto final

estructura _ENDPOIN_DEscriptOR_STRUCT

{

BYTE bLength; //El tamaño del descriptor del dispositivo en bytes, que es 0x12

BYTE bDescriptorType; //Número de tipo de descriptor, 0x01

BYTE bEndpointAddress; //Dirección del punto final y atributos de entrada y salida

BYTE bmAttribute; //El atributo de tipo de transferencia del punto final

WORD wMaxPacketSize; //El tamaño máximo de paquete recibido y enviado por el punto final

BYTE bInterval; //El intervalo de tiempo para que el host consulte el punto final

}

Después de comprender las ocho preguntas anteriores, puede ingresar al siguiente paso del aprendizaje USB

Supongo que te gusta

Origin blog.csdn.net/daocaokafei/article/details/124135511
Recomendado
Clasificación