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

24

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:

  1. Conecta un dispositivo USB a una máquina (por ejemplo, Ubuntu o cualquier tipo de Linux)
  2. Linux encuentra el controlador de dispositivo para ese dispositivo (de alguna manera, ¡ bonificación si lo sabe!) Y lo carga
  3. El dispositivo ahora está conectado bajo /dev/theDevice
  4. Las aplicaciones de espacio de usuario ahora pueden leer / escribir /dev/theDevicey 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?

smeeb
fuente
45
"el controlador maneja el IO de bajo nivel para el dispositivo / hardware subyacente" lo hace usando el protocolo de comunicación que está en el estándar.
EBGreen
29
Oh ... leí la pregunta "¿Existe realmente un" protocolo de comunicación USB "?" Entonces la respuesta sería sí. Si desea saber cuál es el protocolo de comunicación real, simplemente lea el estándar. O lea la sección 11 en la página wiki a la que se vinculó.
EBGreen
66
"el USB es solo el cable y la conexión eléctrica entre la PC y el dispositivo". El cable Ethernet es solo un cable entre la PC y un conmutador / enrutador / lo que sea. Todavía hay algunos protocolos utilizados para comunicarse a través de este cable y hacer cosas útiles con él.
ysdx
13
"Linux encuentra el controlador de dispositivo para ese dispositivo" ¿Cómo cree que Linux puede detectar qué dispositivo está conectado al otro extremo? ¿Un protocolo común, tal vez?
gastador
44
@Ramhound "Esos protocolos de comunicación son independientes del estándar al menos en el caso de Ethernet". Esto es falso Los protocolos Ethernet (tanto físicos como de capa MAC) están definidos por los estándares IEEE Ethernet (específicamente, los estándares 802.3 ). Por supuesto, es posible (y común) enviar algo distinto del protocolo Ethernet por un cable de Categoría 6 con Conectores RJ-45, pero en ese punto ya no es Ethernet. Esta es una práctica común con sistemas telefónicos que no son VoIP, por ejemplo.
reirab

Respuestas:

47

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.

RedGrittyBrick
fuente
30

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.

projectdp
fuente
77
Espero que "Bonus question" signifique "Bounty" para ti.
dotancohen
@projectdp: sería muy útil si colocara parte de la información de sus referencias principales en su propia respuesta.
Ramhound
@Ramhound: gracias por sus comentarios, reescribí mi respuesta de una manera más útil. En cuanto a agregar más información de los recursos, ¿qué le gustaría ver que sea relevante para las preguntas?
projectdp
14

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.

reirab
fuente
9

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.

MSalters
fuente
"USB es un bus, lo que significa que varios dispositivos deben compartir el ancho de banda" : un punto que el OP ha pasado por alto cuando solo usa una configuración punto a punto para su pregunta. Dado que dos (o más) dispositivos USB pueden compartir el cable con la PC host, podemos inferir que debe haber un protocolo.
aserrín
@sawdust Dado que funciona (incluso punto a punto), podemos inferir que hay un protocolo. El descubrimiento de dispositivos, por ejemplo, no sería posible si no hubiera un protocolo estándar.
reirab
De hecho, existe un estándar de comunicación y, en esencia, es una comunicación en serie Universal Serial Bus.
Ramhound
@Ramhound Sí, como la mayoría de los diseños de bus modernos para todo, excepto las interfaces de memoria, USB utiliza pares diferenciales en serie para la transmisión de datos. USB <= 2,0 tenido un solo par diferencial, mientras que USB 3 tiene dos pares diferenciales adicionales (uno para la transmisión y otra para SuperSpeed SuperSpeed receptora, permitiendo la comunicación de dúplex completo en 5 Gbps cada dirección.)
reirab
Solo pensé que señalaría que es un bus serie en el núcleo del estándar, el autor no parecía estar al tanto de este hecho, de ahí la pregunta.
Ramhound
5

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:

  • Para que la comunicación tenga lugar, los protocolos deben ser acordados.
  • Los sistemas de comunicación utilizan formatos bien definidos (protocolo) 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 puede implementarse como hardware, software o ambos.

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.

OMY
fuente
1
1. El proceso de comunicación involucra (como mínimo) tres elementos: (1) codificación / envío Y (2) recepción / decodificación (3) _información_ (en oposición al ruido aleatorio). Si falta alguno de estos 3 elementos, el proceso falla. También pueden estar presentes elementos adicionales como retroalimentación, medio (canal) y contexto, entre otros. FUENTE: Uno de mis títulos es en Estudios de Comunicación
OMY
1
2. SETI no se trata de comunicación, se trata de exploración y descubrimiento . Incluso si detectamos una señal fabricada auténtica, no hay garantía de que alguna vez la entenderemos o podamos comunicarnos con el remitente. FUENTE: [Declaración de Misión SETI] [1] [1]: seti.org/about-us
OMY
1
3. La compatibilidad cruzada entre navegadores generalmente se debe a que (a) los fabricantes de navegadores no siguen los protocolos, o (b) protocolos mal escritos que causan implementaciones defectuosas (por ejemplo, considere los infameserrores del modelo de cuadro de IEy también vea < quirksmode.org> ). Eso es porque ahora tenemos HTML 5 y CSS 3 , porque los protocolos necesitaban mejoras. FUENTE: Poseí y operé mi propia empresa de desarrollo web durante varios años
OMY
1
4. Primero, las señales de radio que se "sincronizan" en la frecuencia utilizan protocolos AM (modulación de amplitud). Las señales de radio FM (modulación de frecuencia) se "sincronizan" con una integral de tiempo. Los protocolos para sistemas FM involucranelementos fijos y dinámicos para procesar la información. El elemento dinámico es laconfiguración de frecuencia variable , que está restringida a un rango de frecuencias predefinido y limitado.
OMY
1
Los elementos fijos son las fórmulas matemáticas para modular y demodular la señal. No importa cuáles sean las frecuencias, estas fórmulas son constantes y pueden implementarse para procesar la señal a través de hardware analógico o software digital. FUENTE: Experiencia personal como aficionado a la electrónica y también [Wikipedia] [1] [1]: en.wikipedia.org/wiki/Frequency_modulation
OMY