Soy nuevo en USB y trabajo en un dispositivo integrado compatible con USB para un cliente que ha diseñado el hardware. El objetivo es un STM32F4.
El caso de uso es que este dispositivo A) Cuando está conectado a una computadora, debe aparecer como un puerto COM. B) Cuando esté conectado a un dispositivo periférico, podrá actuar como anfitrión para hablar a través de un puerto COM. Por ejemplo, el periférico inicial proporcionará una conexión DB9, por lo que probablemente haya un dongle USB a RS232 entre mi dispositivo integrado y el periférico. Entonces, en este caso, nuestro periférico sería el dongle, creo. C) Los objetivos a más largo plazo serían soportar otros periféricos, por ejemplo, unidades flash y dispositivos de entrada de usuario.
El artículo A) anterior ya se ha implementado utilizando el controlador de clase CDC de ST. Tengo muchas preguntas sobre cómo abordar esto.
Mi comprensión del suplemento On The Go es que básicamente hay dos formas de abordar esto, ya sea como host integrado o usando OTG.
1) La especificación parece indicar que si se usa el modelo de host integrado, uno tendrá que admitir al menos dos conexiones USB, presumiblemente yendo a múltiples puertos en el micro, uno configurado como una conexión de host, uno configurado como periférico conexión. ¿Esto es correcto?
2) El cliente había planeado usar OTG y cablear la señal de ID a tierra (Host) en el micro con el plan de cambiar roles (tal vez a través de HNP, si ambos admiten OTG?) según sea necesario. No creo que esto funcione ya que cuando se conecta a una PC, la PC asumirá que es un host, ¿correcto?
3) Estoy un poco confundido por la relación entre CDC (ACP) y VCP. Parece que VCP es un tipo específico de CDC pero no me queda claro cómo lo extiende. Dado que el cliente ya ha implementado A) arriba usando el controlador ST CDC, me parece extraño que esto funcione sin VCP?
4) Si quisiera implementar B) arriba (digamos usando OTG), ¿qué se necesita de mi lado dado que el dispositivo ya actúa como un CDC periférico? Es decir. ¿Qué se necesita para actuar como host de una conexión CDC más allá de lo que ya está en el controlador cuando se actúa como periférico?