Opciones para USB de doble función en un dispositivo integrado que admite conexiones serie

3

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?

    
pregunta sje

2 respuestas

0
  1. No, solo necesitas una conexión USB. Cambia el modo de funcionamiento del periférico USB entre el modo host y el dispositivo. Solo uno de estos puede habilitarse al mismo tiempo. STM32F4 soporta ambos modos. Si utiliza la función OTG, el modo se selecciona automáticamente.

  2. No funcionará, excepto en situaciones en las que se conecte a otro dispositivo OTG que admita HNP. Su PC no es un dispositivo OTG, por lo que no puede hacer esto.

  3. El puerto de comunicación virtual es solo un controlador de Windows que hace que una cierta configuración del dispositivo CDC (CDC es una clase de especificación USB) aparezca como un puerto COM en Windows. El componente USB subyacente es solo el protocolo CDC (bueno, una parte particular de él, que creo que también podrías considerar como parte VCP).

  4. Ser un host es realmente algo completamente diferente. Debe enumerar dispositivos, generar paquetes SOF, etc. ST tiene ejemplos de cómo hacerlo, pero es esencialmente una pila de software completamente nueva.

respondido por el Jon
0

Debe tener la implementación de hardware correcta si usted / su cliente desea cumplir la función de doble función de un dispositivo basado en STM32F4.

Primero, si su cliente ha diseñado el hardware, debe poder responder a todas sus preguntas. Pero al menos "cablear la señal de ID" para la implementación de OTG es completamente incorrecto: el pin de ID se controla mediante un cable A-B si uno quiere un cambio de rol. La función del dispositivo OTG se controla mediante un pin de ID, que se suministra externamente desde un enchufe de cable. Esta es la implementación más común y más razonable de los dispositivos de doble función (anteriormente OTG, los enunciados que no tienen sentido).

Para hacer incluso el formulario OTG más simple, su dispositivo debe tener un conector "AB" de doble función especial, que pueda acomodar los enchufes Tipo-uA y -uB. Un dispositivo periférico debe tener un conector Typa-uA (uno cuadrado), con el pin ID conectado a tierra. El pin de identificación debe estar conectado a un GPIO en su diseño STM, que debe ser detectado por el firmware y activar la funcionalidad del host USB. Debería tener algún código de propiedad para esto, probablemente STMicro lo proporcione.

En el caso de la funcionalidad OTG-Host, su hardware debe tener un interruptor de alimentación que se active cuando determine que ID = O en el puerto.

Un cable normal entre una PC básica (receptáculo tipo A) tendrá el otro extremo del cable como tipo uB (el semicondeado), que tiene el pin de ID flotante. El mismo GPIO debe detectar el pin flotante y activar su pila de software CDC, lo que lo convierte en un dispositivo de comunicación para host de PC.

Si el host de su PC también tiene un puerto OTG (un caso raro), entonces el cable entre dos dispositivos u-USB debería ser del tipo uA-uB, y solo debería existir este tipo de cable.

Si su hardware diseñado por el cliente no tiene la funcionalidad anterior (ID pin sense, interruptor de alimentación VBUS), entonces debe ser rediseñado.

    
respondido por el Ale..chenski

Lea otras preguntas en las etiquetas