FUNCIONAMIENTO PUERTO USB



El bus serie USB es síncrono, y utiliza el algoritmo de codificación NRZI ("Non Return to Zero Inverted").  En este sistema existen dos voltajes opuestos;  una tensión de referencia corresponde a un "1", pero no hay retorno a cero entre bits, de forma que una serie de unos corresponde a un voltaje uniforme; en cambio los ceros se marcan como cambios del nivel de tensión, de modo que una sucesión de ceros produce sucesivos cambios de tensión entre los conductores de señal.

A partir de las salidas proporcionadas por los concentradores raíz (generalmente conectores del tipo "A"  ) y utilizando concentradores adicionales, pueden conectarse más dispositivos hasta el límite señalado.



Nota:  actualmente la mayoría de las placas-base incluyen un controlador USB integrado en el chipset.  Para sistemas antiguos que no dispongan de USB pueden instalarse tarjetas PCI (e incluso PC-CARD para portátiles) que incluyen un controlador de host y un concentrador raíz con varios conectores de salida.

El protocolo de comunicación utilizado es de testigo, que guarda cierta similitud con el sistema Token-Ring de IBM.  Puesto que todos los periféricos comparten el bus y pueden funcionar de forma simultanea, la información es enviada en paquetes;  cada paquete contiene una cabecera que indica el periférico a que va dirigido.  Existen cuatro tipos de paquetes distintos:  Token; Datos; Handshake, y Especial; el máximo de datos por paquete es de 8; 16; 32 y 64 Bytes.  Se utiliza un sistema de detección y corrección de errores bastante robusto tipo CRC ("Cyclical Redundancy Check").



El funcionamiento está centrado en el host, todas las transacciones se originan en él. Es el controlador host el que decide todas las acciones, incluyendo el número asignado a cada dispositivo (esta asignación es realizada automáticamente por el controlador "host" cada vez que se inicia el sistema o se añade, o elimina, un nuevo dispositivo en el bus), su ancho de banda, etc.  Cuando se detecta un nuevo dispositivo es el host el encargado de cargar los drivers oportunos sin necesidad de intervención por el usuario.

El sistema utiliza cuatro tipo de transacciones que resuelven todas las posibles situaciones de comunicación.  Cada transacción utiliza un mínimo de tres paquetes, el primero es siempre un Token que avisa al dispositivo que puede iniciar la transmisión.






Transferencia de control ("Control transfer"):  Ocurre cuando un dispositivo se conecta por primera vez.  En este momento el controlador de host envía un paquete "Token" al periférico notificándole el número que le ha asignado.

Transferencia de pila de datos ("Bulk data transfer"):  Este proceso se utiliza para enviar gran cantida de datos de una sola vez.  Es útil para dispositivos que tienen que enviar gran cantidad de datos cada vez, como escáneres o máquinas de fotografía digital.

Transferencia por interrupción ("Interrupt data transfer"):  Este proceso se utiliza cuando se solicita enviar información por el bus en una sola dirección (de la función al host).

Transferencia de datos isócrona ("Isochronous data transfer"):  Este proceso se utiliza cuando es necesario enviar datos en tiempo real.  Los datos son enviados con una cadencia precisa ajustada a un reloj,  de modo que la transmisión es a velocidad constante.




Nota:  Las comunicaciones asíncronas ponen más énfasis en garantizar el envío de datos, y menos en su temporización ("cuando" lleguan); por su parte las comunicaciones isócronas son justamente lo contrario, ponen más énfasis en la oportunidad de la transmisión que en la velocidad.  Esta sincronización es importante en situaciones como la reproducción de video, donde no debe existir desfase entre las señales de video y audio.