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.