Directorio de artículos
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?
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 :
1.1 Tipo PID (es decir, tipo de paquete)
1.2 Paquetes de token
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:
1.4 Los paquetes de datos
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
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
[Dispositivo ocupado] Procesamiento de transacciones de entrada
[Error de dispositivo] Procesamiento de transacciones de entrada
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
[Dispositivo ocupado] procesamiento de transacciones de salida
[Error de dispositivo] procesamiento de transacciones de salida
2.3 CONFIGURACIÓN del procesamiento de transacciones
Configurar el procesamiento de transacciones de [Normal]
Configurar el procesamiento de transacciones de [Dispositivo ocupado]
Configurar el procesamiento de transacciones de [Error de dispositivo]
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).
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.
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
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.
- La secuencia de lectura y escritura masiva
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.
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.