Electronic – arduino – Communication between a USB/serial device and an AVR (atmega/Arduino) microcontroller

arduinoavrconversionserialusb

I have a device which provides a USB port. If I attach it to a Windows PC it is recognized as a "CP2103 USB to UART Bridge Controller". According to the device documentation, it should communicate in serial format at 38400bps.

I have to talk to this device with a atmega microcontroller.

Since the USB pinout is different from the serial UART of the uC, firstly I thought I would need a circuit to convert the signals.
I found the AVR-CDC project and put on a CDC-232 in order to convert USB (GND, D+, D-, VCC) to RS232 (TX, RX, GND):

enter image description here

To make it I used another atmega328 as uC, flashed with the specific hex, with a 16Mhz crystal instead of the 12Mhz one specified into the diagram.

Then I built another piece of circuit to convert the RS232 signal to TTL:
enter image description here

So the signal conversion should be USB -> RS232 -> TTL.

I programmed my uC to send some data to the device and I can follow the signal with the oscilloscope until it enter into the CDC-232, then I lose it. I have no output on pins 4 and 5 of the CDC-232 uC, where I should have a USB signal.

Is my overall approach right? Sould I go on debugging the CDC-232 part or there is something wrong elsewhere?

Best Answer

If your device shows up as a CP2013 when you plug the device into a computer's USB port, and you want to replace your Computer with an Arduino, then that isn't really easy to do, or generally possible. The methods you mention in the question have to do where the AVR/Arduino is the device, not the Host.

The device already has a USB-UART converter embedded inside it, and only shows you the USB side of it. This means that your arduino needs to function as a USB host. Functioning as USB host is not straightforward. You need to set up a USB Host/Hub controller, and figure out how to handle enough of the USB protocol stack to talk to the CDC compatible USB-UART device. Using a USB OTG Host controller may be marginally easier, but still nowhere close to being trivially easy. Your best bet would be to see if you can bypass the CP2013 on the device and access the UART lines directly. This may not always be possible. If the CP2013 is actually some other piece of hardware or firmware masquerading as a CP2013, then you're fresh out of luck.