Comunicación entre un dispositivo USB/serie y un microcontrolador AVR (atmega/Arduino)

Tengo un dispositivo que proporciona un puerto USB. Si lo conecto a una PC con Windows, se reconoce como un "Controlador de puente USB a UART CP2103". De acuerdo con la documentación del dispositivo, debería comunicarse en formato serial a 38400bps.

Tengo que hablar con este dispositivo con un microcontrolador atmega.

Dado que el pinout USB es diferente del UART serial de la uC, primero pensé que necesitaría un circuito para convertir las señales. Encontré el proyecto AVR-CDC y puse un CDC-232 para convertir USB ( GND, D+, D-, VCC) a RS232 ( TX, RX, GND):

ingrese la descripción de la imagen aquí

Para hacerlo usé otro atmega328 como uC, flasheado con el hex específico, con un cristal de 16Mhz en lugar del de 12Mhz especificado en el diagrama.

Luego construí otra pieza de circuito para convertir la señal RS232 a TTL:ingrese la descripción de la imagen aquí

Entonces, la conversión de señal debe ser USB -> RS232 -> TTL.

Programé mi uC para enviar algunos datos al dispositivo y puedo seguir la señal con el osciloscopio hasta que ingresa al CDC-232, luego lo pierdo. No tengo salida en los pines 4 y 5 del CDC-232 uC, donde debería tener señal USB.

¿Es correcto mi enfoque general? ¿Debería seguir depurando la parte CDC-232 o hay algún problema en otro lugar?

¿podría publicar una foto de su dispositivo CP2103?
No estoy 100% seguro de entender la pregunta, pero el CP2103 es un dispositivo USB que espera conectarse a un host USB como una PC, y el enlace parece ser un proyecto AVR que también funciona como dispositivo. . Estoy bastante seguro de que un AVR no funcionará como un dispositivo host a menos que me haya perdido algo con lo que está tratando de lograr.

Respuestas (3)

Si su dispositivo aparece como un CP2013 cuando conecta el dispositivo al puerto USB de una computadora y desea reemplazar su computadora con un Arduino, entonces eso no es realmente fácil de hacer, o generalmente posible. Los métodos que menciona en la pregunta tienen que ver donde el AVR/Arduino es el dispositivo, no el Host.

El dispositivo ya tiene un convertidor USB-UART incorporado y solo muestra el lado USB. Esto significa que su arduino necesita funcionar como un host USB . Funcionar como host USB no es sencillo. Debe configurar un controlador USB Host/Hub y descubrir cómo manejar suficiente pila de protocolos USB para comunicarse con el dispositivo USB-UART compatible con CDC. El uso de un controlador de host USB OTG puede ser un poco más fácil, pero aún no está cerca de ser trivialmente fácil. Su mejor apuesta sería ver si puede omitir el CP2013 en el dispositivo y acceder a las líneas UART directamente. Esto puede no ser siempre posible. Si el CP2013 es en realidad otra pieza de hardware o firmware disfrazada de CP2013, entonces no tiene suerte.

+1 A eso quería llegar con mi comentario, pero esa es una buena explicación clara.
Gracias, temía que no fuera tan simple. Aunque buenos consejos.
Estoy marcando tu respuesta como correcta aunque la cosa no está resuelta. Creo que usaré un MAX3421E o un FTDI VNC1L para implementar un host USB manejado por el avr.
Compare el precio del dispositivo y esos adaptadores: si el dispositivo no vale cientos de dólares, miraría dentro. Si tiene suerte, las señales del CP2103 pasan por resistencias de montaje en superficie, lo que las hace fáciles de tocar. Si elige la ruta del host USB incorporado, compare el costo de placas más modernas con funcionalidad de host USB nativo con el de un adaptador de host ATMEGA +.

CP2103 es un puente USB a UART, habla en niveles TTL, no necesita nada adicional para comunicarse con él. Debe conectar los pines TX, RX, GND del microcontrolador a los pines RX, TX, GND de la placa CP2103. Su configuración debería ser así:

PC --usb-- CP2103 --rx/tx-- MICROCONTROLADOR

Configure su microcontrolador para generar algo a través de UART y podrá verlo en un programa de terminal de comunicaciones en serie en su PC.

Parece que quieren ir a ATmega -> CP2103, porque parece que el extremo CP2103 es un periférico sobre el que no tienen control y desean controlarlo desde un AVR.
El dispositivo del que tengo que hablar para exponer solo un puerto mini USB, por lo que no tengo ningún rx/tx
@etuardu, eso es lo que pensé. Vea qué otras respuestas obtiene, pero creo que lo que dijo Chintalagiri Shashank es correcto y lo que está tratando de lograr es entre muy difícil e imposible con un AVR.
Esta no es una respuesta a la pregunta que se hizo.

primero debe programar la clase completa de cdc en su microcontrolador, antes de llamar a sei () llamando a usbinit () y otra función de configuración de usb ... intente nuevamente ...!

No elimino esto porque no es una respuesta, parece ser un intento de respuesta, aunque no muy claro. @morteza, ¿podría ampliar lo que quiere decir? Mirando las respuestas anteriores, esto parece estar fuera de lugar.
Lo siento, Mortezza, pero esto no tiene potencial para ser una respuesta, porque pasa por alto el hecho de que falta el hardware de interfaz de host USB necesario, algo que ya se estableció en la respuesta aceptada. Elimínelo antes de que recopile más votos negativos.