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.