¿Existe un protocolo de comunicación USB Actual?

es-no-una-real-usb-comunicación-protocolo-00
La mayoría de nosotros nunca dan mucha importancia a nuestros dispositivos USB, simplemente enchufe en y olvidarse de ellos. Pero lo que si usted es el tipo curioso que quiera saber más sobre cómo funciona el USB? De hoy superusuario Q & A anuncio con las respuestas a las preguntas de un lector curioso.
Pregunta y respuesta La sesión de hoy nos llega por cortesía de superusuario, una subdivisión de Stack Exchange, un grupo impulsado por la comunidad de Q & A sitios web.
Foto cortesía de Evilelka Kowalski (Flickr) .

La Pregunta

Lector de superusuario smeeb quiere saber si realmente hay un protocolo de comunicación USB real:
Según Wikipedia, USB :
  • Define los cables, conectores y protocolos de comunicación usados ​​en un bus para la conexión, la comunicación y la fuente de alimentación entre los ordenadores y dispositivos electrónicos.
Pero, ¿existe un verdadero protocolo de comunicación USB ? Mi opinión es que:
  1. Se 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 ( la prima si se sabe! ) y lo carga.
  3. El dispositivo está conectado bajo / dev / thedevice .
  4. Aplicaciones espaciales usuario ahora pueden leer y escribir en / dev / thedevice y el conductor maneja la entrada de bajo nivel y de salida para el dispositivo / hardware subyacente.
Por lo que yo puedo decir, un protocolo de comunicación USB no aparece en cualquier parte de este flujo. Si mi interpretación es correcta, el USB es sólo el cable y la conexión eléctrica entre el PC y el dispositivo.
¿Me equivoco aquí? ¿Tiene USB realidad implementar algún tipo de protocolo de bajo nivel que pone de relieve el flujo de arriba? Si es así, ¿qué es y cómo funciona en una vista de 30.000 pies?
¿Existe un protocolo de comunicación USB real?

La Respuesta

Superusuario, las respuestas 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 complejo conjunto de protocolos de capas y perfiles de dispositivos.
Por ejemplo, los dispositivos USB pueden ajustarse a las plantillas de alto nivel como almacenamiento masivo, teclado, dispositivo de interfaz humana, etc., y ser gestionado por un controlador de dispositivo genérico. Algunos dispositivos USB pueden comunicarse en un nivel inferior de manera que el soporte USB de bajo nivel del sistema operativo puede reconocer que se necesitan controladores de alto nivel específicos del dispositivo.
Seguido por la respuesta de projectdp:
Pregunta
¿Existe un protocolo de comunicación USB de bajo nivel en la acción y para qué sirve?
Respuesta
Sí hay. La especificación USB incluye el protocolo USB que define la forma en que el bus se utiliza en un nivel de bit. Este sería el protocolo de bajo nivel que subyace en los protocolos de nivel superior (es decir, de almacenamiento masivo, HID, etc.).
Para detalles sobre cómo funciona el protocolo USB, este wiki OSDev es útil. Aquí hay otro interesante descripción usando diagramas de secuencia para describir las diversas transacciones de datos por el protocolo USB.
Bono pregunta
¿Cómo encontrar Linux y cargar el controlador de dispositivo para ese dispositivo?
Bono respuesta
En Linux cuando se utiliza un núcleo USB-activado, un dispositivo USB de trabajo será detectado a través del hardware y el núcleo debido a la especificación USB. En cuanto al hardware, la detección se realiza por el controlador de host USB. Luego, en el núcleo del controlador de la controladora de host se hace cargo y traduce los bits de bajo nivel en el cable con el protocolo USB información formateada. Esta información luego se rellena en el controlador usbcore en el kernel.
Yo parafraseado de este excelente artículo Opensourceforu , que tiene mucho más detalle y claridad acerca de su pregunta en el contexto de Linux.
Asegúrese de revisar el resto de la discusión animada link hilo común de abajo!