Según Wikipedia , USB:
define los cables, conectores y protocolos de comunicación 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 " protocolo de comunicación USB "? Mi entendimiento es que:
- Conecta un dispositivo USB a una máquina (por ejemplo, Ubuntu o cualquier tipo de Linux)
- Linux encuentra el controlador de dispositivo para ese dispositivo (de alguna manera, ¡ bonificación si lo sabe!) Y lo carga
- El dispositivo ahora está conectado bajo
/dev/theDevice
- Las aplicaciones de espacio de usuario ahora pueden leer / escribir
/dev/theDevice
y el controlador maneja el IO 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 en una vista de 30,000 pies?
linux
usb
linux-device-driver
smeeb
fuente
fuente
Respuestas:
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 (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.
fuente
Pregunta: ¿Existe un protocolo de comunicación USB de bajo nivel en acción y qué es?
Responder:
Sí, la especificación USB incluye el protocolo USB que define la forma en que se utiliza el bus a nivel de bit. Este sería el protocolo de 'nivel bajo' que subyace a los protocolos de nivel superior, es decir, almacenamiento masivo, HID, etc.
Para obtener detalles sobre cómo funciona el protocolo USB, esta wiki de 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 adicional: ¿Cómo encuentra y carga Linux el controlador de dispositivo para ese dispositivo?
Respuesta extra :
'En Linux cuando se usa un kernel habilitado para USB, se detectará un dispositivo USB que funcione a través del hardware y el kernel debido a la especificación USB. En el lado del hardware, la detección se realiza mediante el controlador de host USB. Luego, en el kernel, el controlador del controlador host se hace cargo y traduce los bits de bajo nivel en el cable a la información formateada del protocolo USB. Esta información se completa en el controlador del núcleo USB en el núcleo '.
Parafraseé de este excelente artículo de Opensourceforu , que tiene muchos más detalles y claridad sobre su pregunta en el contexto de Linux.
fuente
Como casi cualquier otro tipo de interfaz de comunicación, el USB se implementa como una pila de protocolos. Los niveles dentro de esta pila que son comunes a todos o varios tipos de dispositivos están definidos por los estándares USB mismos, 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 realmente está escribiendo la capa específica del dispositivo, solo tiene funciones genéricas de 'envío' y 'recepción' que obtienen datos del punto final A al punto final B. Usted, como diseñador del dispositivo, no tiene que preocuparse por como sucede eso Además, los niveles más bajos dentro de la pila de protocolos pueden cambiar la implementación siempre que expongan una interfaz común a la capa que se encuentra sobre ellos. De esta manera, cuando cambia una parte de la pila de protocolos, el resto de la pila no necesariamente tiene que cambiar.qué protocolo se está utilizando en algún nivel inferior de la pila. En términos generales, cada capa consecutiva en 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 un mensaje. Cuando se recibe un mensaje, cada capa despega la parte relevante para esa capa y reenvía su carga útil a la siguiente capa apropiada en la pila. Esto es cierto no solo para USB, sino para 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 el modelo 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 ser interpretados. Obviamente, este protocolo debe ser parte de los estándares USB, no específico de un dispositivo dado (especialmente porque el host no tiene forma de saber qué tipo de dispositivo está a punto de conectarse a un puerto USB dado).
A continuación, hay un protocolo de administración del bus, que se utiliza para describir quién puede hablar en el bus cuando. Esto se llama la capa de acceso a medios en el modelo OSI. En USB, esta capa se puede resumir como "el dispositivo puede transmitir cuando el host le dice que lo haga", por lo que no hay un protocolo particularmente complicado en esta capa en USB.
A continuación, hay un protocolo estándar para describir un paquete de datos y cómo se debe enrutar del remitente al receptor. Esta capa también debe ser parte del estándar USB en sí mismo, 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 cada dispositivo que tiene una ID particular en esta capa, también existe el concepto en USB de una ID 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 dispositivo en sí. Tenga en cuenta que en realidad hay algunos prediseñados comunes incluidos como parte del estándar USB para casos de uso común, 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 son libres de diseñar su propio protocolo personalizado en esta capa. La salida de esta capa para una transmisión dada se pasa como la carga útil de un paquete de datos en la capa anterior. Tenga en cuenta que, para dispositivos suficientemente complicados, la parte específica del dispositivo del protocolo puede dividirse en múltiples capas independientes, pero los niveles inferiores no tienen que saberlo ni preocuparse por eso. Todo lo que necesitan saber es que necesitan pasar un conjunto dado de bytes desde el host a un punto final de dispositivo particular o desde un punto final de dispositivo particular al host. Una vez más, 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 los datos específicos que debería pasar o esperar recibir de las capas inmediatamente superiores o debajo de él en la pila.
fuente
En realidad, hay un conjunto de protocolos de comunicación relacionados que interactúan.
En el nivel más bajo, hay un protocolo que describe cómo se envían los paquetes de bytes a través de una conexión en serie. Esto es común para todos los dispositivos USB (pero diferente entre USB2 y USB3).
Uno de los primeros paquetes enviados le pide al dispositivo que se describa a sí mismo. Para evitar un problema de huevo y gallina, el protocolo de identificación es el mismo para todos los dispositivos USB. El sistema operativo puede usar esta identificación para cargar el controlador correcto.
En otro nivel más, USB es un bus, lo que significa que varios dispositivos deben compartir el ancho de banda. Esto significa que hay un protocolo que le dice a cada dispositivo cuándo puede hablar y cuándo no. Dado que todos los dispositivos USB deben cumplir con esto, se utiliza un protocolo común para organizar esto.
Finalmente, muchos dispositivos USB simples son tan simples que existen protocolos adicionales que describen una clase completa de dispositivos (ratones, teclados, almacenamiento, adaptadores de Ethernet, ...). La mayoría de los dispositivos admiten cero o uno de estos protocolos funcionales.
fuente
Universal Serial Bus
.Quizás parte de la respuesta se encuentra dentro de la definición de la frase " protocolo de comunicación ". Yendo a la misma fuente que usted (Wikipedia) encontrará información útil como:
Una manera simple de pensarlo es que un protocolo es una forma predefinida y acordada de hacer algo , en este caso, el algo es cómo mover datos dentro y fuera de un dispositivo conectado por USB. En cuanto al hardware, cada pin tiene un nivel de voltaje y un protocolo de uso predefinidos, cada tipo de dispositivo tiene un protocolo de uso predefinido para cada pin y cada paquete de datos tiene una sintaxis y un formato de datos predefinidos. También hay un protocolo de comunicación para estrechar la mano incorporado. Colectivamente, estas son todas las partes de la colección de estándares para usar dispositivos USB, también conocido como el protocolo USB, que es decidido (es decir, diseñado, propuesto, debatido, revisado y finalmente aceptado) por los miembros del USB Implementers Forum, Inc.
Así que sí, no es un protocolo USB, o más correctamente no son una serie de pre-definido y acordado protocolo USB s para diferentes usos USB.
fuente