¿Existe realmente un "protocolo de comunicación USB"?

¿Existe realmente un "protocolo de comunicación USB"?

De acuerdo aWikipedia, USB:

Define los cables, conectores y protocolos de comunicaciones utilizados en un bus para la conexión, comunicación y suministro de energía entre computadoras y dispositivos electrónicos.

¿Pero existe realmente un "USB"?Protocolo de comunicación"? Micomprensiónes eso:

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

Para mí, en ninguna parte de este flujo aparece un "protocolo de comunicación USB". Si mi comprensión es correcta, el USB es solo el cable y la conexión eléctrica entre la PC y el dispositivo.

¿Me equivoco aquí? ¿El USB realmente implementa algún tipo de protocolo de bajo nivel que subraya el flujo anterior? Si es así, ¿qué es y cómo funciona a una vista de 30.000 pies?

Respuesta1

si, miraprotocolos 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 (o 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 el soporte USB de bajo nivel del sistema operativo puede reconocer que se necesitan controladores de nivel superior específicos del dispositivo.

Respuesta2

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

Respuesta:

Sí, la especificación USB incluye elprotocolo USBque define la forma en que se utiliza el bus a 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 obtener detalles sobre cómo funciona el protocolo USB, esteWiki OSDeves útil. Aquí está otrodescripción interesanteutilizando diagramas de secuencia para describir las diversas transacciones de datos según el protocolo USB.

Pregunta adicional: ¿Cómo encuentra y carga Linux el controlador de dispositivo para ese dispositivo?

Primarespuesta:

'En Linux, cuando se utiliza un kernel habilitado para USB, se detectará un dispositivo USB en funcionamiento a través delhardwareynúcleodebido a la especificación USB. En el lado del hardware, la detección la realiza el controlador de host USB. Luego, en el kernel, el controlador del controlador de host se hace cargo y traduce los bits de bajo nivel en el cable a información formateada por el protocolo USB. Esta información luego se completa en el controlador central USB del kernel.

Parafraseé de este excelenteArtículo de Opensourceforu, que tiene muchos más detalles y claridad sobre su pregunta en el contexto de Linux.

Respuesta3

Como casi cualquier otro tipo de interfaz de comunicación, USB se implementa como un protocolopila. Los niveles dentro de esta pila que son comunes a todos o varios tipos de dispositivos están definidos por los propios estándares USB, lo que permite la compatibilidad y evita que cada dispositivo realice un diseño de protocolo redundante. Además, cada capa del protocolo abstrae detalles de los que la siguiente capa no necesita preocuparse. Entonces, cuando en realidad estás escribiendo la capa específica del dispositivo, solo tienes funciones genéricas de "enviar" y "recibir" que llevan datos del punto final A al punto final B. Tú, como diseñador del dispositivo, no tienes que preocuparte por cómo sucede eso. Además, los niveles inferiores dentro de la pila de protocolos pueden cambiar la implementación siempre que expongan una interfaz común a la capa superior a ellos. De esta manera, cuando una parte de la pila de protocolos cambia, el resto de la pila no necesariamente tiene que cambiar. Idealmente, los protocolos en niveles más altos de la pila ni siquiera tienen que preocuparse exactamentecualEl protocolo se está utilizando en algún nivel inferior de la pila. En términos generales, cada capa consecutiva de la pila encapsulará el mensaje producido por la siguiente capa más alta dentro de su propio campo de carga útil a medida que se envía el mensaje. Cuando se recibe un mensaje, cada capa retira la parte relevante para esa capa y reenvía su carga útil a la siguiente capa apropiada de la pila. Esto se aplica no sólo al USB, sino a casi todos los buses de comunicación. La pila TCP/IP/Ethernet es probablemente la más utilizada, por ejemplo. Las tareas de las que las capas dadas son comúnmente responsables se describen en modelos, como elmodelo OSI.

En USB, hay un protocolo de capa física que define los estados de voltaje/temporización/etc. en el cable y cómo deben interpretarse. Obviamente, este protocolo debe ser parte de los propios estándares USB, no específico de un dispositivo determinado (especialmente porque el host no tiene forma de saber qué tipo de dispositivo está a punto de conectarse a un puerto USB determinado).

A continuación, hay un protocolo de gestión del autobús, que se utiliza para describir quién puede hablar en el autobús y cuándo. Esto se denomina capa de acceso a medios en el modelo OSI. En USB, esta capa se puede resumir prácticamente como "el dispositivo puede transmitir cuando el host le indica que lo haga", por lo que no existe un protocolo particularmente complicado en esta capa en USB.

A continuación, existe un protocolo estándar paradescribir un paquete de datosy cómo debe enrutarse del remitente al receptor. Esta capa también debe ser parte del propio estándar USB, de modo que la comunicación inicial para descubrir qué tipo de dispositivo se ha conectado pueda ocurrir antes de que el host conozca realmente el tipo específico de dispositivo. Además de que cada dispositivo tiene una identificación particular en esta capa, también existe el concepto en USB de una identificación de punto final. Esto permite que cualquier dispositivo tenga múltiples puntos finales USB, que son multiplexados y demultiplexados por la pila USB estándar, de la misma manera que los sockets son multiplexados y demultiplexados por la pila TCP/IP estándar. Una aplicación puede tratar cada uno de estos puntos finales como flujos de datos separados.

Finalmente, está el protocolo definido para el propio dispositivo. Tenga en cuenta que, en realidad, hay algunos prediseñados comunes incluidos como parte del estándar USB para casos de uso comunes, como dispositivos de almacenamiento masivo, ratones, teclados, etc., para que cada fabricante de dispositivos no tenga que reinventar el rueda. Sin embargo, los dispositivos más complicados pueden diseñar libremente su propio protocolo personalizado en esta capa. La salida de esta capa para una transmisión determinada se pasa como carga útil de un paquete de datos en la capa anterior. Tenga en cuenta que, para dispositivos suficientemente complicados, la parte del protocolo específica del dispositivo puede dividirse en múltiples capas independientes, pero los niveles inferiores no tienen por qué saberlo ni preocuparse por ello. Todo lo que necesitan saber es que necesitan pasar un conjunto determinado de bytes desde el host a un punto final de dispositivo particular o desde un punto final de dispositivo particular al host. Nuevamente, tener la interfaz estándar entre capas permite la separación de preocupaciones, por lo que una capa no tiene que preocuparse por el funcionamiento interno de otra capa, sino solo por los datos específicos que debe pasar o esperar recibir de las capas inmediatamente superiores o debajo de él en la pila.

Respuesta4

Quizás parte de la respuesta esté en la definición de la frase "Protocolo de comunicación". En la misma fuente que usted (Wikipedia), encontrará información útil como:

  • Para que se produzca la comunicación, es necesario acordar protocolos.
  • Los sistemas de comunicación utilizan formatos (protocolos) bien definidos para intercambiar mensajes.
  • un protocolo debe definir la sintaxis, la semántica y la sincronización de la comunicación.
  • Por lo tanto, un protocolo se puede implementar como hardware, software o ambos.

Una forma sencilla de pensarlo es queUn protocolo es una forma predefinida y acordada de hacer algo., en este caso elalgoes cómo mover datos dentro y fuera de un dispositivo conectado por USB. En cuanto al hardware cada unoalfilertiene un nivel de voltaje predefinido y un protocolo de uso, cada tipo de dispositivo tiene un protocolo de uso predefinido paracada alfiler, y cadapaquete de datostiene una sintaxis y un formato de datos predefinidos. También hay una comunicaciónapretón de manosprotocolo incorporado. En conjunto, estas son todas partes de la colección de estándares para el uso de dispositivos USB, también conocidos comoel protocolo USB, que es decidido (es decir, diseñado, propuesto, debatido, revisado y eventualmente acordado) por los miembros deel Foro de Implementadores de USB, Inc.

Entonces si, hayesun protocolo USB, o más correctamente allísonuna serie de protocolos USB predefinidos y acordadosspara diferentes usos del USB.

información relacionada