Capítulo de intercambio de conocimientos [6] Comprensión profunda del protocolo de comunicación USB

1 Conceptos básicos

Una [transmisión] (control, lote, interrupción, isócrona): consta de múltiples [transacciones];

Una [Transacción] (ENTRADA, SALIDA, CONFIGURACIÓN): consta de uno o más [Paquetes].

Los datos USB se transfieren entre [software host] y [punto final específico del dispositivo USB]. La asociación entre [software host] y [punto final específico del dispositivo USB] se denomina [tuberías]. Un dispositivo USB puede tener varias tuberías.

1.Paquete

El paquete es la unidad básica de transmisión de información en el sistema USB. Todos los datos se empaquetan y transmiten en el bus. Los datos se transmiten en el bus USB en unidades de paquetes y los paquetes solo se pueden transmitir dentro de cuadros. El período de trama del bus USB de alta velocidad es de 125 us, y el período de trama del bus USB de velocidad completa y de baja velocidad es de 1 ms. El inicio de la trama está representado por un paquete específico (paquete SOF) y el final de la trama es EOF. EOF no es un paquete, sino un estado de nivel. No se permite la transmisión de datos durante EOF.

Nota: Aunque el período de fotograma del bus USB de alta velocidad y el bus USB de velocidad completa/baja velocidad son diferentes, el número de fotograma en el paquete SOF aumenta a la misma velocidad, porque en el sistema USB de alta velocidad, el El número de cuadro en el paquete SOF es en realidad el valor alto del contador. 11 bits, los tres bits más bajos no se utilizan como número de microcuadro, por lo que el período de incremento del número de cuadro también es 1 ms.

¿Qué está pasando en el bus USB?
Insertar descripción de la imagen aquí
Un paquete es la unidad más pequeña de transmisión de datos en el bus USB y no se puede interrumpir ni interferir con él; de lo contrario, se producirá un error. Varios paquetes de datos constituyen una transmisión de transacción, y una transmisión de transacción no se puede interrumpir. Varios paquetes que pertenecen a una transmisión de transacción deben ser continuos y no pueden completarse entre cuadros. Una transferencia consta de una o varias transferencias de transacciones y se puede completar en varios marcos.

El paquete USB consta de cinco partes, a saber, campo de sincronización (SYNC), campo de identificador de paquete (PID), campo de datos, campo de verificación de redundancia cíclica (CRC) y campo de fin de paquete (EOP). El formato básico del paquete es el siguiente :
Insertar descripción de la imagen aquí
1.1 Tipo PID (es decir, tipo de paquete)
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
1.2 Paquetes de token
Insertar descripción de la imagen aquí
Este formato es adecuado para IN, OUT, SETUP y PING.

Dirección de transmisión de datos PID

EN Dispositivo->Host

Host de salida->Dispositivo

CONFIGURACIÓN Host->Dispositivo

Dispositivo PING->Host

1.3 Paquetes de inicio de trama (SOF) Los
paquetes SOF se envían desde el host al dispositivo.

Para el bus de máxima velocidad, se envía cada 1,00 ms ±0,0005 ms;

Para el bus de alta velocidad, se envía cada 125 μs ±0,0625 μs;

La estructura del paquete SOF se muestra en la siguiente figura:
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
1.4 Los paquetes de datos
Insertar descripción de la imagen aquí
tienen cuatro tipos de paquetes de datos: DATOS0, DATOS1, DATOS2 y MDATA, y se distinguen por PID. DATA0 y DATA1 están definidos para admitir la sincronización de alternancia de datos.

1.5 Paquetes de apretón de manos
Insertar descripción de la imagen aquí

ACK: Para transacciones IN, será emitido por el host; para transacciones OUT, SETUP y PING, será emitido por el dispositivo.
NAK:
En la fase de datos, para transacciones IN, será enviado por el dispositivo; en la fase de protocolo de enlace, para transacciones OUT y PING, también será enviado por el dispositivo; el host nunca envía paquetes NAK.

2. Transacción

El proceso de recibir o enviar información de datos en un USB se llama transacción, es decir: La entrega de un servicio a un punto final. Una transacción consta de un paquete del sistema, y ​​los paquetes que la componen dependen de la transacción específica. Puede constar de los siguientes paquetes:

Un paquete de token, un
paquete de datos opcional,
un paquete de protocolo de enlace opcional
y un paquete especial opcional.

2.1 Procesamiento de transacciones de entrada (IN)

Procesamiento de transacciones de entrada: Indica el proceso en el que el host USB recibe un paquete de datos de un dispositivo USB en el bus.
[Normal] Procesamiento de transacciones de entrada
Insertar descripción de la imagen aquí
[Dispositivo ocupado] Procesamiento de transacciones de entrada
Insertar descripción de la imagen aquí
[Error de dispositivo] Procesamiento de transacciones de entrada
Insertar descripción de la imagen aquí

2.2 Procesamiento de transacciones de salida (OUT)

Procesamiento de transacciones de salida: indica el proceso en el que el host USB envía un paquete de datos a un dispositivo USB en el bus para su recepción.

[Normal] procesamiento de transacciones de salida
Insertar descripción de la imagen aquí
[Dispositivo ocupado] procesamiento de transacciones de salida
Insertar descripción de la imagen aquí
[Error de dispositivo] procesamiento de transacciones de salida
Insertar descripción de la imagen aquí

2.3 CONFIGURACIÓN del procesamiento de transacciones

Configurar el procesamiento de transacciones de [Normal]
Insertar descripción de la imagen aquíConfigurar el procesamiento de transacciones de [Dispositivo ocupado]
Insertar descripción de la imagen aquí
Configurar el procesamiento de transacciones de [Error de dispositivo]
Insertar descripción de la imagen aquí

3. Tipo de transferencia USB

En la transmisión USB se definen 4 tipos de transmisión:

Transferencia de control

Interrumpir transferencia

Transferencia masiva

Isócrono

3.1 Transferencia de control
La transferencia de control consta de 2 a 3 etapas:

Configuración

Fase de datos (ningún control de datos no tiene esta fase) (DATOS)

Estado

Cada fase consta de una o más transmisiones de transacciones (fase de datos) (Transacción).

Los datos de control son utilizados por el software del sistema USB para configurar el dispositivo (durante la enumeración). Otro software de controlador puede optar por utilizar la transferencia de control para implementar funciones específicas. La transferencia de datos no se puede perder.

3.1.1 Fase de establecimiento

El host obtiene información de configuración del dispositivo USB y establece los valores de configuración del dispositivo. El intercambio de datos en la fase de establecimiento incluye el paquete de token SETUP, seguido del paquete de datos DATA0 y el paquete de protocolo de enlace ACK. Su función es realizar un intercambio de datos de configuración (concepto vago) y definir el contenido de esta transmisión de control (es decir, el número de paquetes de datos de ENTRADA o SALIDA en la Etapa de Datos y la dirección de envío se han establecido en la Etapa de Configuración).
Insertar descripción de la imagen aquí

3.1.2 Etapa de datos

Según la dirección de transmisión de datos en la fase de datos, la transmisión de control se puede dividir en 3 tipos:

Lectura de control (leer descriptor USB)

Controlar escritura (configurar dispositivo USB)

Sin control de datos

Etapa de transmisión de datos: se utiliza para transmitir datos entre el host y el dispositivo.

control de lectura

Sirve para leer datos del dispositivo al host y leer el descriptor del dispositivo USB de datos. El proceso se muestra en [Lectura de control] en la siguiente figura. Para cada paquete de datos, primero, el host enviará un paquete de token IN para indicar que desea leer datos. Luego, el dispositivo envía los datos al host a través del paquete de datos DATA1/DATA0. Finalmente, el host responderá de la siguiente manera: cuando los datos se han recibido correctamente, el host envía un paquete de token ACK; cuando el host está ocupado, envía un paquete de protocolo de enlace NAK; cuando ocurre un error, el host envía un STALL paquete de apretón de manos.
control de escritura

Es para transferir datos desde el host al dispositivo. Los datos transferidos son la información de configuración del dispositivo USB. El proceso se muestra en la siguiente figura [Control Wirte]. Para cada paquete de datos, el host enviará un paquete de token de SALIDA para indicar que se van a enviar los datos. Inmediatamente después, el host transmite los datos al dispositivo a través del paquete de datos DATA1/DATA0. Finalmente, el dispositivo responderá de la siguiente manera: cuando los datos se han recibido correctamente, el dispositivo envía un paquete de token ACK; cuando el dispositivo está ocupado, el dispositivo envía un paquete de protocolo de enlace NAK; cuando ocurre un error, el dispositivo envía un STALL paquete de protocolo de enlace.
Insertar descripción de la imagen aquí

3.1.3 Fase de estado

Fase de estado: se utiliza para indicar que todo el proceso de transferencia ha finalizado por completo.

La dirección de transmisión en la fase de estado debe ser opuesta a la dirección de la fase de datos, es decir, originalmente era un paquete de token IN y esta fase debe ser un paquete de token OUT; por el contrario, si originalmente era un paquete de token OUT , esta fase debe ser un paquete de token IN.

Para [Lectura de control], el host enviará un paquete de token de SALIDA, seguido de un paquete DATA1 de longitud 0. En este momento, el dispositivo también tomará las acciones correspondientes y enviará un paquete de protocolo de enlace ACK, un paquete de protocolo de enlace NAK o un paquete de protocolo de enlace STALL.

En términos relativos, para la transmisión [Escritura de control], el host enviará un paquete de token IN y luego el dispositivo enviará un paquete DATA1 de longitud 0 que indica la fase de estado de finalización. Luego, el host tomará las acciones correspondientes: enviar un protocolo de enlace ACK paquete de protocolo de enlace NAK o paquete de protocolo de enlace STALL.

3.2 Transferencia masiva

Se utiliza para transmitir grandes cantidades de datos, lo que requiere una transmisión sin errores pero sin requisitos de tiempo. Es adecuado para impresoras, dispositivos de almacenamiento, etc.

La transferencia masiva es una transferencia confiable y requiere un paquete de protocolo de enlace para indicar el resultado de la transferencia. Si la cantidad de datos es relativamente grande, se utilizarán múltiples transmisiones de transacciones por lotes para completar la transmisión de todos los datos. Durante el proceso de transmisión, el PID del paquete de datos se invierte de la manera DATA0-DATA1-DATA0-... para garantizar la sincronización del extremo emisor y el extremo receptor.

USB permite menos de 3 errores de transmisión consecutivos y volverá a intentar la transmisión. Si tiene éxito, el contador de errores se borrará; de lo contrario, el contador se acumulará. Después de más de tres veces, el HOST considera que la función del punto final es incorrecta (STALL) y abandona la tarea de transmisión del punto final.

Una transferencia por lotes (Transferencia) consta de una a varias transferencias de transacciones por lotes (Transacción).

Sincronización de inversión: el remitente envía paquetes de datos en el orden DATA0-DATA1-DATA0-…. Solo la transmisión exitosa de la transacción causará la inversión de PID, lo que significa que el remitente invertirá el PID y enviará los siguientes datos solo después de recibir el paquete ACK. ; de lo contrario, se volverá a intentar la transmisión de la transacción. De manera similar, si el extremo receptor descubre que los paquetes de datos recibidos no se invierten en este orden, por ejemplo, se reciben dos DATA0 seguidos, entonces el extremo receptor piensa que el segundo DATA0 es una retransmisión del DATA0 anterior.

Garantiza una transmisión de datos "precisa" entre el host y el dispositivo mediante la "detección de errores" y la "retransmisión" a nivel de hardware, es decir, una transmisión confiable. Consta de tres paquetes (es decir, transacción IN o transacción OUT):

1 token
2 datos
3 apretón de manos

Insertar descripción de la imagen aquí

Para token IN (即: transacción IN)

ACK: Indica que el host recibió los datos correctamente

NAK: indica que el dispositivo no puede devolver o recibir datos temporalmente (por ejemplo: el dispositivo está ocupado)

STALL: indica al dispositivo que se detenga permanentemente y requiere la intervención del software del host (como: error del dispositivo)

Para token OUT (即: transacción OUT)

Si el paquete de datos recibido es incorrecto, como un error de CRC, el dispositivo no envía ningún paquete de protocolo de enlace.

ACK: el dispositivo recibió el paquete de datos correctamente y notificó al host que envíe el siguiente paquete de datos en secuencia.

NAK: el dispositivo recibió el paquete de datos correctamente y notificó al host que retransmita los datos debido a la condición temporal del dispositivo (por ejemplo, el búfer está lleno).

STALL: Indica que el punto final del dispositivo se ha detenido y notifica al host que no retransmita.

  1. La secuencia de lectura y escritura masiva
    Insertar descripción de la imagen aquí
    consta de una transacción IN o OUT del sistema.

3.3 Interrumpir Transferencia

Las transferencias interrumpidas consisten en transacciones ENTRADA o SALIDA.

El proceso de transferencia por interrupción es el mismo que el de la transferencia por lotes, excepto que no se admite PING. La única diferencia entre ellos es que el punto final donde ocurre la transmisión de transacciones es diferente, la longitud máxima de paquete admitida es diferente, la prioridad es diferente y otras cosas que son transparentes para los usuarios.

Cuando el host programa una tarea de transmisión de interrupción, iniciará una transmisión de interrupción de acuerdo con el intervalo de consulta especificado en el descriptor del punto final de interrupción correspondiente. Las transferencias interrumpidas tienen una prioridad más alta, solo superada por las transferencias sincrónicas.

De manera similar, la transmisión interrumpida también utiliza el mecanismo de inversión de PID para garantizar la sincronización de datos en los extremos de envío y recepción. La siguiente figura es el diagrama de flujo de la transmisión de interrupciones.

El modo de transferencia de interrupción siempre se utiliza para consultar el dispositivo y determinar si hay datos para transferir. Por lo tanto, la dirección de la transferencia interrumpida es siempre del dispositivo USB al host.
Insertar descripción de la imagen aquí
DATA0 o DATA1 contienen información de interrupción, no datos de interrupción.

3.4 Transferencia Isócrona

Consta de dos paquetes:

simbólico

datos

La transmisión isócrona no admite "apretón de manos" ni "capacidades de retransmisión", por lo que es una transmisión poco confiable.

La transmisión síncrona no es confiable, por lo que no tiene un paquete de protocolo de enlace y no admite la inversión de PID. Cuando el host programa la transmisión de transacciones, la transmisión síncrona tiene la máxima prioridad.

La transmisión síncrona es adecuada para datos que deben llegar a una velocidad fija o en un momento específico y puede tolerar errores ocasionales. La transmisión en tiempo real se utiliza generalmente para micrófonos, parlantes, cámaras UVC y otros equipos. La transmisión en tiempo real solo requiere dos etapas del paquete de información: token y datos, y no hay paquete de protocolo de enlace, por lo que los datos no se retransmitirán si hay un error en la transmisión.
Insertar descripción de la imagen aquí

DIRECCIÓN

Supongo que te gusta

Origin blog.csdn.net/zhi_Alanwu/article/details/127767324
Recomendado
Clasificación