Página principal » cómo » ¿Hay un protocolo de comunicación USB real?

    ¿Hay un protocolo de comunicación USB real?

    La mayoría de nosotros nunca pensamos mucho en nuestros dispositivos USB, simplemente los conectamos y nos olvidamos de ellos. Pero, ¿qué pasa si eres del tipo curioso que quiere saber más sobre cómo funciona el USB? La publicación de preguntas y respuestas de SuperUser de hoy tiene las respuestas a las preguntas de un lector curioso.

    La sesión de Preguntas y Respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, un grupo de sitios web de preguntas y respuestas impulsado por la comunidad..

    Foto cortesía de Evilelka Kowalski (Flickr).

    La pregunta

    El lector superusuario smeeb quiere saber si realmente existe un protocolo de comunicación USB real:

    Según Wikipedia, USB:

    • Define los cables, conectores y protocolos de comunicaciones utilizados en un bus para la conexión, la comunicación y la fuente de alimentación entre computadoras y dispositivos electrónicos..

    Pero hay una real Protocolo de comunicación USB? Mi entendimiento es que:

    1. Conecta un dispositivo USB a una máquina (Ubuntu o cualquier tipo de Linux, por ejemplo).
    2. Linux encuentra el controlador de dispositivo para ese dispositivo de alguna manera (bono si sabes!) y lo carga.
    3. El dispositivo ahora está conectado bajo / dev / theDevice.
    4. Las aplicaciones de espacio de usuario ahora pueden leer y escribir en / dev / theDevice y el controlador maneja la entrada y salida de bajo nivel al dispositivo / hardware subyacente.

    Por lo que puedo decir, una Protocolo de comunicación USB No aparece en ninguna parte en este flujo. Si mi entendimiento es correcto, el USB es solo el cable y la conexión eléctrica entre la PC y el dispositivo.

    ¿Estoy equivocado aquí? ¿El USB implementa realmente algún tipo de protocolo de bajo nivel que subraya el flujo de arriba? Si es así, ¿qué es y cómo funciona en una vista de 30,000 pies??

    ¿Hay un protocolo de comunicación USB real?

    La respuesta

    Los colaboradores de SuperUser RedGrittyBrick y projectdp tienen la respuesta para nosotros. En primer lugar, RedGrittyBrick:

    Sí (ver protocolos USB).

    Según tengo entendido, la especificación USB define un conjunto complejo de protocolos en capas y perfiles de dispositivos.

    Por ejemplo, los dispositivos USB pueden ajustarse a plantillas de alto nivel como almacenamiento masivo, teclado, dispositivo de interfaz humana, etc. y ser administrados por un controlador de dispositivo genérico. Algunos dispositivos USB pueden comunicarse a un nivel inferior, de modo que la compatibilidad con USB de bajo nivel del sistema operativo puede reconocer que se necesitan controladores de nivel superior específicos del dispositivo.

    Seguido por la respuesta de projectdp:

    Pregunta

    ¿Existe un protocolo de comunicación USB de bajo nivel en acción y qué es??

    Responder

    Sí hay. La especificación USB incluye el protocolo USB que define la forma en que se utiliza el bus en un nivel de bits. Este sería el protocolo de bajo nivel que subyace a los protocolos de nivel superior (es decir, almacenamiento masivo, HID, etc.).

    Para detalles específicos sobre cómo funciona el protocolo USB, esta wiki OSDev es útil. Aquí hay otra descripción interesante que usa diagramas de secuencia para describir las diversas transacciones de datos según el protocolo USB.

    Pregunta extra

    Cómo Linux encuentra y carga el controlador de dispositivo para ese dispositivo?

    Respuesta Bonus

    En Linux, cuando se utiliza un kernel habilitado para USB, un dispositivo USB que funcione se detectará a través del hardware y el kernel debido a la especificación de USB. En el lado del hardware, la detección se realiza mediante el controlador host USB. Luego, en el kernel, el controlador del controlador de host toma el control y traduce los bits de bajo nivel en el cable a la información formateada del protocolo USB. Esta información luego se rellena en el controlador de usbcore en el kernel.

    Parafraseado de este excelente artículo de Opensourceforu, que tiene mucho más detalle y claridad sobre su pregunta en el contexto de Linux.

    Asegúrese de revisar el resto de la discusión animada a través del enlace de hilo compartido a continuación!


    ¿Tienes algo que agregar a la explicación? Apaga el sonido en los comentarios. ¿Quieres leer más respuestas de otros usuarios de Stack Exchange con experiencia en tecnología? Echa un vistazo a la discusión completa aquí.