¿Dónde está exactamente la especificación de USB que explica qué hacer cuando se conecta el cable por primera vez?

15

Así que conozco las especificación USB 2.0 ubicada en USB.org site .

Soy un poco flojo e impaciente. ¿Alguien puede decirme dónde debo ir para averiguar exactamente qué se espera de mi dispositivo periférico cuando el cable USB está conectado?

Por ejemplo, si mi dispositivo periférico es una impresora, ¿cómo le digo a la computadora en el otro extremo que una impresora (con una descripción específica del modelo, supongo) acaba de conectarse? En la computadora, ¿cómo sabe el controlador de impresora qué puerto USB se conectó a la impresora?

Mi aplicación es en realidad USB MIDI. También obtuve este USB-MIDI doc , pero soy deficiente en el protocolo USB más fundamental .

Solo para información de la gente, el chip USB que estoy usando es el FTDI FT220x y está conectado al SPI de un SHSAR ADSP-21479. Ahora lo usamos simplemente para comunicaciones de texto usando la PC (ejecutando TeraTerm) como "consola" . Tengo acceso al código que configura el puerto SPI y se conecta al chip FTDI, pero no hay ningún código que realice ninguna comunicación inicial. No sé qué hace el FT220x cuando se conecta por primera vez a la PC.

No estoy descontento de leer y aprender, pero me gustaría saber dónde empezar a leer, y una especificación de USB de 100 MB es un objetivo demasiado grande para disparar. Un sincero agradecimiento a todos por su ayuda procesable.

    

2 respuestas

21

USB tiene varias capas, que se describen en

USB 2.0 usa un par diferencial para el enlace de datos. No voy a entrar en mucho detalle ya que esto está cubierto por el capítulo 7 de USB 2.0. En general, en el diseño de PCB tratamos esto como un par diferencial de longitud coincidente, y colocamos los resistores de serie requeridos por cualquier PHY USB (Físico Interfaz) se está utilizando. El periférico USB utiliza una resistencia de alto valor en una de las líneas D + o D para notificar al host que es un periférico de alta velocidad o baja velocidad.

Poco después de que el host USB descubre que hay un dispositivo presente, el host solicita un grupo de descriptores al dispositivo. Esto es cuidado detrás de las escenas por el chip FTDI. Los descriptos se describen en Capítulo 9.5 . Estos incluyen Descriptor de dispositivo , Descriptor de configuración , Descriptores de interfaz , Descriptores de punto final , Descriptores de cadena , tal vez incluso Descriptores de Informe HID .

El Descriptor de dispositivo incluye los números de USB VID (Identificación del proveedor) y PID (Identificación del producto). El sistema operativo utiliza este par de números, VID_PID, para determinar qué controlador de dispositivo se utilizará para este dispositivo. Tenga en cuenta que el número VID se emite al pertenecer al foro de implementadores de USB, por lo que es un problema si usted es un inventor individual.

Además, existe el controlador de clase HID (Dispositivo de interfaz humana), que proporciona una entrada un tanto genérica para el teclado / mouse / etc, así como cualquier entrada / salida genérica. Una ventaja de HID es que no requiere proporcionar un controlador de dispositivo personalizado, pero su rendimiento es algo limitado en comparación con un controlador masivo personalizado. Hay otra

El chip FTDI como FT220X datasheet proporciona el USB "serial interface engine" ( No debe confundirse con SPI serial o RS232 serial). Esto se encarga de la mayoría de las cosas de bajo nivel descritas en los capítulos 6, 7 y 8.

FTDI utiliza una EEPROM (offchip en el FT2232H, en chip en el FT220X) para contener un poco de la información que se incluye en los descriptores. Puede personalizar los valores VID / PID y proporcionar cadenas de descripción personalizadas.

    
respondido por el MarkU
4

El comportamiento y la interacción de los "socios" de USB (un host y un dispositivo) están dispersos en la especificación de USB. La mejor manera de obtener algunos argumentos es mirar el "marco del dispositivo", Capítulo 9, que describe los posibles estados (obligatorios) del dispositivo (Figura 9-1), y el marco del Host (y Hub), en los Capítulos 10 y 11. Ignorar Detalles del protocolo (tuberías / tipos de transacción / capas de protocolo OSI abstractas, diseño de PCB, etc.), se puede lograr un mejor control de la interacción inicial mediante el estudio del diagrama de estado del puerto (Figura 11-10).

En esencia, si el cable no está conectado entre el host y el dispositivo, los puertos del host están en "Powered State" (VBUS está ENCENDIDO), pero "Desconectado". Los cables D + y D- se mantienen bajos con 15k tiros hacia abajo.

Cuando el cable está conectado, el VBUS entra en el dispositivo. El dispositivo reconoce que se está conectando y señala un evento de "conexión" tirando ALTO de uno de los cables D, D + si es un dispositivo FS / HS y D- si es un dispositivo LS.

Tire de los cables D +/- en un puerto determinado interrumpe el software del host, informando "cambio de estado del puerto". El software del host (generalmente ehci.sys) inicia la secuenciación de "reinicio de puerto" en ese puerto particular . Al finalizar con éxito el "reinicio del puerto USB", el puerto del host se habilita para la comunicación USB. El puerto se activa (los paquetes de marcos comienzan a fluir).

Usando el protocolo USB, el host asigna una dirección única a este dispositivo, y lee "descriptor del dispositivo". Esto inicia el proceso de "enumeración de dispositivos". El descriptor del dispositivo contiene información sobre a qué clase de dispositivo pertenece (HID, COM, MIDI, Impresora, etc.) y VID / PID de ese dispositivo en particular, más un montón de otra información, consulte la Tabla 9-8.

Después de obtener la clase de dispositivo y el VID / PID, el software host intenta hacer coincidir esta información en el registro de dispositivos y carga el controlador DEVICE correspondiente, ya sea uno genérico o específico del proveedor (si existe). Luego, el controlador del dispositivo finaliza el proceso de enumeración seleccionando la interfaz del dispositivo que termina con la configuración de "configuración del dispositivo". Obviamente, toda la comunicación USB se reconoce solo detrás de este puerto particular , incluso si todos los paquetes se transmiten a todos los puertos habilitados.

Lo anterior es el marco general del protocolo de conexión USB. Empaquetar datos para cualquier propósito particular (como MIDI) es una historia diferente, y se maneja a nivel de aplicación, o a nivel de controlador de dispositivo, si el sistema obtiene la clase de dispositivo adecuada. Para obtener comunicación MIDI nativa, el dispositivo debe tener esta clase en su descriptor y seguir todas las definiciones de clase MIDI .

    
respondido por el Ale..chenski

Lea otras preguntas en las etiquetas