Paso 3: Comprensión USB
Buses USB tienen un dispositivo y el host, el equipo suele ser el anfitrión, nuestro gamepad es un dispositivo, más concretamente, un HID (dispositivo de interfaz humana). Es importante tener en cuenta que el host siempre iniciar la comunicación, o el anfitrión comprueba el dispositivo con frecuencia para ver si tiene algo que decir. El dispositivo no tiene la capacidad de iniciar la comunicación, sólo puede esperar hasta que se habla a.
Hay resistencias de pull-up en D + o D - dependiendo de si es o no el dispositivo de USB 1.0, USB 1.1 o USB 2.0. La presencia de estas resistencias de pull-up es también cómo un ordenador sabe cuando algo se ha conectado. En la USnooBie y la mayoría circuitos V-USB, el resistor de pull-up es siempre la señal de D desde V-USB sólo es capaz de implementar dispositivos USB de baja velocidad.
Las resistencias de dos 68 ohm en D + y D-señales son terminación de resistencias, su impedancia se calculan (teniendo en cuenta el circuito interno del AVR) a corresponder con la impedancia característica del cable USB. Esto minimiza los reflejos de señal. Lea http://en.wikipedia.org/wiki/Transmission_line para más información.
Cuando un dispositivo se conecta a un host, el host intenta "enumerar" el dispositivo. Si no hace así (dispositivo no responde, o responde con basura), que es cuando Windows dice "dispositivo no reconocido".
El host y el dispositivo habla sobre los canales llamados "extremos", criterios de valoración se identifican por un número. Hay algunos extremos que un apartado para uso especial, mientras que otros pueden configurarse para funcionar en modos diferentes (interrupción, a granel, etc.).
El anfitrión siempre utilizará el "extremo de control" (endpoint 0) primero para solicitar una descripción del dispositivo, este "descriptor" contendrá los identificadores de dispositivo (vendedor ID y ID del producto, etc.), junto con su clase, subclase, etc. (HID como un ratón o un teclado? o tal vez almacenamiento masivo?). Luego se solicita el descriptor de configuración, que contiene también el número de terminales disponibles en el dispositivo. Cada extremo tiene su propio descriptor así. Todos estos datos se envían como paquetes de bytes de datos que representa una estructura de datos especifica conocida.
V-USB y otros marcos USB/pilas tienen APIs y otros métodos para permitir que el programador modificar el contenido de los descriptores. Necesita primero entender cada descriptor y después Compruebe la documentación de V-USB para ver como hacerlo (te mostraré más adelante).
El anfitrión hace las solicitudes mediante el envío de "paquetes de configuración" a "extremo de control". Paquetes de configuración tienen una estructura definida, lo que es fácil para el dispositivo entender lo que quiere el host. V-USB (y frameworks similares) generalmente se encarga de los paquetes de configuración por defecto. Un programador puede escribir controladores que envía paquetes de configuración personalizada, en cuyo caso el firmware debe manejar los paquetes de configuración manualmente, V-USB (y otros) proporciona algunos métodos a ayudar con eso.
Más adelante en este instructable, he incluido un volcado de los descriptores de capturados por el analizador de tráfico de mi USB. Puede echar un vistazo y coincidir con las especificaciones USB para ver lo que representa cada porción.
Una vez que han recuperado todos los descriptores del dispositivo, el host puede entonces entender el dispositivo y comunicarse con ella. Veremos todos los descriptores en detalle más adelante.
Tengo otro Instructable que le muestra cómo construir un teclado USB tipos el código almacenado en etiquetas RFID:
Tarea: Leer USB en una cáscara de nuez http://www.beyondlogic.org/usbnutshell/usb1.shtml que es casi una Biblia USB
Nota importante: La mayoría de la terminología USB es desde la perspectiva del host (el equipo), así que las palabras "en" y significa "entrada" del dispositivo y el host, las palabras "out" o "salida" significa desde el host al dispositivo.