15 votos

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

Así que sé lo de la Especificación USB 2.0 situado en el El sitio USB.org .

Soy un poco perezoso e impaciente. ¿Alguien puede decirme dónde ir para saber exactamente qué se espera de mi dispositivo periférico cuando se conecta el cable USB?

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

Mi aplicación es en realidad USB MIDI. También he conseguido esto USB-MIDI doc pero soy deficiente con el protocolo USB más fundamental.

Sólo para información de la gente, el chip USB que estoy usando es el FTDI FT220x y está conectado al SPI de un ADSP-21479 SHArC. Ahora lo usamos simplemente para comunicaciones de texto usando la PC (ejecutando TeraTerm) como un "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 haga las comunicaciones iniciales. No sé qué hace el FT220x cuando se conecta por primera vez al PC.

No me disgusta leer y aprender, pero me gustaría saber por dónde empezar a leer, y un USB de 100 MB es un objetivo demasiado grande para disparar. Sinceras gracias a todos por su ayuda.

22voto

MarkU Puntos 3743

El USB tiene varias capas, que se describen en el Especificación de USB 2.0 . Si estás familiarizado con el modelo de red en capas de OSI, puedes pensar en ello así:

  • Capa de sesión = Capítulo 10 Hardware y software del host USB (controladores del dispositivo)
  • Capa de transporte = Capítulo 9 Marco del dispositivo USB
  • Capa de red = Capa de protocolo del capítulo 8 (bitstream)
  • Capa de enlace de datos = Capítulo 7 Eléctrico (circuito)
  • Capa física = Capítulo 6 Mecánica (cable y conector)

Conceptualmente, el USB se basa en flujos de datos, llamados Puntos finales que puede ser IN (para el huésped) o OUT (del huésped). Cada dispositivo tiene el punto final 0, que se utiliza para el control y el estado. Un dispositivo puede tener puntos finales adicionales para los datos de aplicación. Cada punto final se comporta como un búfer FIFO.

Los datos se transfieren en un punto final ya sea como A granel (como el TCP/IP, garantizado que cada byte llega y en el orden correcto), o Isócrona (como UDP/IP, garantizado que es fresco pero puede dejar caer paquetes). Hay un nombre engañoso " Interrumpir "tipo de transferencia", que en realidad sólo es encuestado por el anfitrión.

El USB 2.0 utiliza un par diferencial para el enlace de datos. No entraré en muchos detalles ya que esto está cubierto por el capítulo 7 de las especificaciones del USB 2.0. En general, en el diseño del PCB, tratamos esto como un par diferencial de longitud igualada, y ponemos las resistencias en serie requeridas por cualquier USB PHY (Interfaz Física) que se esté usando. El periférico USB utiliza una resistencia de alto valor en una de las líneas D+ o D- para notificar al host que se trata de un periférico de alta o baja velocidad.

Poco después de que el anfitrión del USB descubre que un dispositivo está presente, el anfitrión solicita un montón de descriptores del dispositivo. El chip FTDI se encarga de esto entre bastidores. Las descripciones se describen en Capítulo 9.5 . Estos incluyen Descriptor del dispositivo , Descriptor de la configuración , Descriptores de la interfaz , Descriptores del punto final , Descriptores de las cuerdas tal vez incluso Descriptores del informe de HID .

El Descriptor del dispositivo incluye el 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 ser miembro del foro de implementadores USB, por lo que es un problema si es un inventor individual.

Además, existe el controlador de clase HID (Dispositivo de Interfaz Humana), que proporciona una entrada algo genérica para el teclado/ratón/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 de volumen personalizado. Hay otro documento de especificaciones sobre los descriptores del HID; y un Tabla de uso de HID documento que detalla todos los números de código que describen las diversas características disponibles en un determinado dispositivo con interfaz humana.

El chip FTDI como Hoja de datos del FT220X proporciona el "motor de interfaz en serie" USB (que no debe confundirse con la serie SPI o la serie RS232). 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, on-chip en el FT220X) para contener un poco de la información que va en los descriptores. Puede personalizar los valores de VID/PID y proporcionar cadenas de descripción personalizadas.

4voto

Liza Puntos 548

El comportamiento y la interacción de los "socios" del USB (un anfitrión y un dispositivo) se encuentra disperso en la especificación del USB. La mejor manera de obtener algunos fundamentos es mirar el "marco del dispositivo", Capítulo 9, que describe los posibles estados del dispositivo (obligatorio) (Figura 9-1), y el marco del Host (y el Hub), en los Capítulos 10 y 11. Ignorando los detalles del protocolo (tuberías/tipos de transacción/capas del protocolo OSI abstracto, disposición de la PCB, etc.), se puede lograr un mejor control de la interacción inicial estudiando el diagrama de estado de los puertos (Figura 11-10).

En esencia, si el cable no está conectado entre el host y el dispositivo, los puertos del host están en "Estado Accionado" (VBUS está encendido), pero "Desconectado". Los cables D+ y D- se mantienen bajos con tirones de 15k.

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

Al tirar de los cables D+/- de un determinado puerto se produce una interrupción en el software del host, informando del "cambio de estado del puerto". El software del host (normalmente ehci.sys) inicia entonces la secuencia de "reinicio del puerto" en ese particular puerto. Una vez completado con éxito el "restablecimiento del puerto USB", el puerto anfitrión se habilita para la comunicación USB. El puerto se activa (los paquetes de trama comienzan a salir).

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

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

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X