¿Cuáles son las limitaciones del dispositivo USB Compuesto?

2

Estoy viendo la codificación de un dispositivo USB que es capaz de encapsular dos dispositivos USB. Me gustaría crear un teclado HID con un solo puerto USB adicional. Un dispositivo de almacenamiento masivo estaría conectado al puerto.

Me preguntaba si sería posible programar el teclado para registrarlo como un dispositivo compuesto que encapsula el almacenamiento masivo y el teclado.

Mi proceso de pensamiento actual es declarar que el teclado tiene 2 interfaces. Estaba pensando en simplemente copiar los comandos USB del disco masivo en una de las interfaces del teclado. ¿Es esto posible?

Si se trata de un pensamiento incorrecto, hágame saber cuál es el formato de datos de las interfaces.

Gracias.

También, esto es con fines educativos para ampliar mi conocimiento de USB.

    
pregunta philm

2 respuestas

3

No puede tener un "teclado HID" con un "puerto extra único"; el dispositivo de este tipo debe ser un dispositivo compuesto , hecho de un concentrador de dos puertos, con un puerto conectado a un dispositivo HID no extraíble. El otro puerto se puede conectar permanentemente a un dispositivo de almacenamiento masivo. En este caso, es posible que no necesite envolver todo esto como un dispositivo compuesto (un dispositivo que admita dos clases alternativas).

Diseñar el conjunto correcto de descriptores para este tipo de dispositivos es muy complicado (al menos desde la perspectiva del tipo de hardware), pero puede usar guías listas para usar, por ejemplo, compatibilidad con el compilador Keil, MDK Middleware para comunicación de host y dispositivo USB . Este enlace es para un ejemplo de dispositivo USB compuesto construido sobre dos de sus tutoriales anteriores, "USB Device HID" y "USB Device mass storage". Espero que esto sea exactamente lo que necesitas.

    
respondido por el Ale..chenski
0

He hecho muchos de estos dispositivos compuestos (almacenamiento masivo HID +) anteriormente, pero ya no. Hay dos problemas. La primera es que a Windows no le gustan más. Hay un montón de problemas en la actualidad con la comunicación con puntos finales compuestos de almacenamiento masivo. Trabajaron bien en Windows 2000 y Windows XP, pero ya no tanto. No tengo idea de por qué, ¿quizás alguien pueda educarme?

El segundo problema es que si declara un dispositivo de almacenamiento masivo como parte de su descriptor de dispositivo compuesto, entonces su código de microcontrolador debe manejar las solicitudes de dispositivos de almacenamiento masivo. Simplemente no puede transmitirlos a otro puerto USB byte a byte ya que los descriptores de interfaz son (casi con seguridad) diferentes. Puede hacer esto si tiene otro puerto de host USB en su MCU: escriba el código de host USB que se comunica con la memoria USB (o incluso un dispositivo de memoria totalmente diferente, como la tarjeta SD) y transmita los comandos de lectura y escritura del bloque entre su compuesto interfaz y el otro dispositivo de memoria. Funcionará, al menos con Linux y kernels de Windows anteriores.

Pero si solo desea tener un puerto USB simple en el lado de su teclado, y no tiene requisitos adicionales (como que el teclado pueda leer la memoria flash USB sin la PC), entonces simplemente tome un IC central USB de USD0.3, póngalo en la misma PCB, conecte uno de los puertos a su microcontrolador y el otro (s) conector (es) externo (s) en su producto. El beneficio es que su producto es estándar, por ejemplo, cualquier tipo de dispositivo (s) USB se puede conectar al (a los) puerto (s) externo (s), incluyendo más concentradores, y no tiene problemas con su software MCU.

[Editar] hmm ... Me puse a pensar ... Supongo que podría ser posible transmitir los comandos del protocolo MSC (el USBC - datos - paquetes USBS) al otro puerto USB, lo que haría que el software en general Implementación más fácil ... pero los otros problemas permanecen.

    
respondido por el PkP

Lea otras preguntas en las etiquetas