Capítulo 3. Bus serie universal (USB)
Contenido de este capítulo
Introducción
Este capítulo trata sobre el estándar USB y su funcionamiento, con especial
énfasis en los temas relacionados con la implementación del osciloscopio.
El estándar USB
El bus serie universal (Universal Serial Bus, o simplemente USB) es un estándar
diseñado para conectar dispositivos, a través de un bus serie. Fue
originalmente pensado para conectar dispositivos a computadoras, eliminando la
necesidad de conectar tarjetas PCI (o similares), como así también conectar y
desconectar los dispositivos sin tener que reiniciar la PC (hot-swap). Sin
embargo, hoy en día también se utiliza en consolas de juegos e incluso en
algunos equipos de audio y video.
El diseño del protocolo USB está a cargo del USB Implementers Forum (USB-IF),
una organización compuesta por varias empresas del ramo de la computación y la
electrónica, entre las que se encuentran Apple Computer, Hewlett-Packard,
Microsoft e Intel.
La versión actual del protocolo USB es la 2.0, pero su especificación a tenido
varias revisiones a lo largo de la historia, las cuales se muestran en la
siguiente tabla.
| Estándar | Publicación | Detalles |
| USB 0.9 | Noviembre, 1995 | Primer borrador |
| USB 1.0 | Enero, 1996 | Velocidad baja y velocidad completa |
| USB 1.1 | Setiembre, 1998 | Añade detalles y precisiones a la versión 1.0. |
| USB 2.0 | Abril, 2000 | Incorpora modo de alta velocidad |
Tabla 3.1 Revisiones del estándar USB
La versión 1.1 es el estándar mínimo que debe cumplir todo dispositivo USB hoy
en día. La última versión (2.0) soporta tasas de transferencia de altas
velocidades, comparables (o incluso superiores) a la de un disco duro o
almacenamiento magnético, lo cual ha permitido ampliar el uso del USB a
aplicaciones de video y almacenamiento masivo. Una de las razones a la cual se
atribuye su gran popularidad es que todas las versiones del protocolo son
compatibles hacia atrás. Es decir, que cualquier dispositivo 2.0 puede ser
conectado a un dispositivo 1.0, aunque funcionará la velocidad del más lento.
Las tres velocidades de transferencia soportadas son:
| Velocidad | bytes/s | bits/s |
| Baja | 183 Kbytes/s | 1.5Mbit/s |
| Velocidad completa | 1.4 Mbytes/s | 12Mbit/s |
| Alta velocidad | 57 Mbytes/s | 480 Mbit/s |
Tabla 3.2 Velocidades de transferencias USB
El tipo de Alta velocidad fue introducido en la revisión USB 2.0, mientras que
los otros ya existían desde la 1.0. Los de baja velocidad generalmente son
dispositivos de interacción con la computadora como ratones, teclados y
joysticks.
Topología
USB tiene un diseño asimétrico ya que consiste de un host controlador conectado
a múltiples dispositivos conectados en daisy-chain.
USB conecta varios dispositivos a un_host controlador a través de un cadenas de
hubs. Los hubs (al igual que en redes) son dispositivos que permiten, a partir
de un único punto de conexión, poder conectar varios dispositivos, es decir,
disponer de varios puntos de conexión. De esta forma se crea una especie de
estructura de árbol. El estándar admite hasta 5 niveles de ramificación por
host controlador con un límite absoluto de 127 dispositivos conectados al mismo
bus (incluyendo los hubs). Siempre existe un hub principal (conocido como el
hub raíz) que está conectado directo al host controlador.
Un mismo dispositivo USB puede cumplir varias funciones. Por ejemplo, un mouse
puede ser también lector de tarjetas, y de esa forma sería como dos
dispositivos conectados al bus USB. Por lo tanto es muy común hablar de
funciones en lugar de dispositivos.
Funcionamiento
Los dispositivos (o mejor dicho, las funcionas) tienen asociados unos canales lógicos unidireccionales (llamados
pipes) que conectan al host controlador con una entidad lógica en el dispositivo llamada
endpoint. Los datos son enviados en paquetes de largo variable (potencia de 2). Típicamente estos paquetes son de 64, 128 o más bytes.
Estos endpoints (y sus respectivos pipes) son numerados del 0 al 15 en cada dirección, por lo cual un dispositivo puede tener hasta 32 endpoints (16 de entrada y 16 de salida). La dirección se considera siempre desde el punto de vista del host controlador. Así un endpoint de salida será un canal que transmite datos desde el host controlador al dispositivo. Un endpoint solo puede tener una única dirección. El endpoint 0 (en ambas direcciones) está reservado para el control del bus.
Cuando un dispositivo es conectado al bus USB, el host controlador le asigna una dirección única de 7 bit (llamado proceso de enumeración) que es utilizada luego en la comunicación para identificar el dispositivo (o, en particular, la función). Luego, el host controlador consulta continuamente a los dispositivos para ver si tiene algo para mandar, de manera que ningún dispositivo puede enviar datos sin la solicitud previa explícita del host controlador.
Para acceder a un endpoint se utiliza una configuración jerárquica de la siguiente manera: un dispositivo/función conectado al bus tiene un único descriptor de dispositivo, quien a su vez tiene uno (o varios) descriptores de configuración. Estos últimos guardan generalmente el estado del dispositivo (ej: activo, suspendida, ahorro de energía, etc). Cada descriptor de configuración tiene uno (o más) descriptores de interfaz, y éstos a su vez tienen una configuración por defecto (aunque puede tener otras). Y éstos últimos finalmente son los que contienen los endpoint, que a su vez pueden ser reutilizados entre varias interfaces (y distintas configuraciones).
Como puede verse, la comunicación USB es bastante compleja y extremadamente más complicada que una simple comunicación serie.
Tipos de transferencia
Los canales también se dividen en cuatro categorías según el tipo de transmisión:
- transferencias de control - usado para comandos (y respuestas) cortos y simples. Es el tipo de transferencia usada por el pipe 0
- transferencias isócronas - proveen un ancho de banda asegurado pero con posibles pérdidas de datos. Usado típicamente para audio y video en tiempo real
- transferencias interruptivas - para dispositivos que necesitan una respuesta rápida (poca latencia), por ejemplo, mouse y otros dispositivos de interacción humana
- transferencias masivas - para transferencias grandes y esporádicas utilizando todo el ancho de banda disponible, pero sin garantías de velocidad o latencia. Por ejemplo, transferencias de archivos.
En realidad las transferencias interruptivas no son tales ya que los dispositivos no pueden enviar datos sin recibir autorización del host controlador. Por lo tanto, las transferencias interruptivas simplemente le dan más prioridad al sondeo del host controlador.
Señalización y conectores
Las señales USB son transmitidas en un par trenzado (cuyos hilos son
denominados D+ y D-) utilizando señalización diferencial half-duplex
minimizando el ruido electromagnético en tramos largos. El diseño eléctrico
permite un largo máximo de 5 metros, sin necesidad de un repetidor
intermediario.
Existen dos tipos de conectores: estándar y mini. Los estándar son los que
típicamente encontramos en un computador y vienen en dos tipos: A y B. El tipo
A es el que es chato y se encuentra del lado del host controlador, mientras que
el tipo B es el cuadrado y se encuentra del lado del dispositivo. Todos los
cables son machos, mientras que los enchufes (ya sea en la computadora o los
dispositivos) son hembra. No existen intercambiadores de género puesto que las
conexiones cíclicas no están permitidas en un bus USB. Los conectores mini
siguen la misma política que los estándar pero son utilizados para dispositivos
pequeños como Palm y celulares.
Los pines de un cable USB son los siguientes:
| Pin | Color | Función |
| 1 | Rojo | V.BUS (4.4 - 5.25 V) |
| 2 | Blanco | D- |
| 3 | Verde | D+ |
| 4 | Negro | Tierra |
| 5 | en corto con pin 4 en conector Mini-A, utilizado para USB On-The-Go |
Tabla 3.3 Pines del bus USB
A continuación se muestra un diagrama de los conectores (las medidas están en mm) y los números de los pines se corresponden con la tabla anterior.

Fig 3.1 Conector USB tipo A (izquierda) y tipo B (derecha)

Fig 3.2 Conector USB Mini tipo A (izquierda) y tipo B (derecha)
Potencia
El bus USB suministra 5V de continua regulados por cada uno de sus puertos,
entre los pines 1 y 4. Por lo tanto, dispositivos de bajo consumo de potencia
(que de otra forma vendría con un fuente de alimentación) puede obtener de allí
la corriente necesaria para el funcionamiento. El límite de corriente
suministrada es de 500mA por cada puerto. Además, el estándar exige no más de
5.25V en ningún caso, ni menos de 4.375V en el peor caso. Típicamente el
voltaje se mantiene en los 5V.
Algunos hubs se alimentan directamente del bus USB, en cuyo caso la corriente
total de todos los dispositivos conectados a él no puede superar los 500mA. Sin
embargo, la especificación permite solo un nivel de hub alimentados por el bus,
de forma que no es posible conectar un hub sin alimentación a otro hub sin
alimentación. Los hubs con alimentación propia no tienen esta restricción y
generalmente son necesario para conectar dispositivos de alto consumo como
impresoras o discos duros.
Cuando un dispositivo es conectado le reporta al host controlador cuanta
potencia va a consumir. De esta manera el host controlador lleva un registro de
los requisitos de cada puerto y cuando un dispositivo se excede
generalmente se apaga, cortándole el suministro de corriente, de forma de no
afectar al resto de los dispositivos. El estándar exige que los dispositivos se
conecten en un modo de bajo consumo (100 mA máximo) y comuniquen al host
controlador cuanta corriente precisan, para luego cambiar a un modo de alto
consumo (si el host se lo permite).
Los dispositivos que superen los límites de consumo deben utilizar su propia
fuente de poder.
Los dispositivos que no cumplan con los requisitos de potencia y consuman más
corriente de la negociada con el host, pueden dejar de funcionar sin previo
aviso o, en algunos casos, dejar todo el bus inoperativo, dependiendo del tipo
de host controlador usado.
Clases de dispositivos
Los dispositivos que se conectan puede tener sus propios drivers
personalizados. Sin embargo, existen lo que se llaman clases de dispositivos
que son pequeños estándar para distintos tipos de dispositivos y especifican
como deben compartirse los dispositivos en términos de los descriptores de
interfaz y de dispositivo, endpoints, etc. Esto permite que todos los
dispositivos sean fácilmente intercambiables y/o sustituibles puesto que hablan
el "mismo idioma". Por su parte, los sistema operativos solo tienen que
implementar drivers genéricos para todas las clases conocidas de dispositivos
lo cual alivia el alto costo de desarrollar y mantener un driver particular
para cada producto y modelo.
En conclusión, las clases de dispositivos son una estandarización de funcionalidades a un nivel superior al del bus BUS y que utiliza a éste último como medio de comunicación e intercambio de datos.
Tanto los descriptores de dispositivos como los descriptores de interfaz tiene un byte que identifica la clase. En el primer caso, todo el dispositivo/función pertenece a la misma clase, mientras que en el segundo un mismo dispositivo puede tener diferentes clases, cada una asociada a su descriptor de interfaz.
Dado que el identificador de la clase es un byte, existe un máximo de 253 clases diferentes (0x00 y 0xFF están reservados). Los códigos de las clases son asignados por el el USB Implementers Forum, y a continuación se presenta una lista de los más comunes.
| Código | Clase |
| 0x00 | Reservado. Usado en el descriptor de dispositivo para indicar que la clase está identificada en el (o los) descriptores de interfaz |
| 0x01 | Dispositivo de audio. Por ejemplo; tarjetas de sonidos |
| 0x03 | Dispositivo de interfaz humana (HID). Por ejemplo: mouses, teclados, joystick |
| 0x07 | Impresoras |
| 0x08 | Dispositivo de almacenamiento masivo. Por ejemplo: discos duros, lectores de memoria, cámaras digitales, reproductores MP3 |
| 0x09 | Hubs |
| 0x0A | Dispositivo de comunicación (CDC por sus siglas en inglés). Por ejemplo: módems, tarjetas de red |
| 0x0E | Dispositivo de video. Por ejemplo: webcams |
| 0xE0 | Controladores inalámbricos. Por ejemplo: adaptadores Bluetooth |
| 0xFF | Reservado. Usado para indicar que el dispositivo tiene un driver personalizado propio que no pertenece a ninguna clase |
Tabla 3.4 Clases de dispositivos USB
Nuestro osciloscopio USB, en particular, pertenece a la clase CDC (0x0A).
Referencias
- USB Implementers Forum (USB-IF)
- Especificación USB 2.0