Forum: Mikrocontroller und Digitale Elektronik AVR als USB Host mit CP2102


von Hans D. (hans_dampf0_0)


Lesenswert?

Hallo zusammen

Ich möchte folgende serielle Verbindung realisieren:

Smartphone -> Bluetooth Modul BTM-222 -> USBKEY2 -> CP2102 -> Elektronik

Da der CP2102 in meiner Elektronik bereits verbaut ist, kann ich diesen 
nicht mehr ändern und bin hierbei gezwungen zur Kommunikation einen USB 
Host fähigen Mikrocontroller einzusetzen. Hierbei ist meine Wahl auf das 
USBKEY2 Kit von Atmel gefallen, da es hierzu eine Application Note 
"AVR280: USB Host CDC Demonstration" von Atmel gibt und das zugehörige 
Softwarebeispiel.

Mein Problem liegt nun darin, dass der CP2102 bei der Enumeration sich 
mit nur 2 Endpoints meldet:
Endpoint0 IN Bulk
Endpoint1 OUT Bulk
Class ist 0xFF für Vendor Device
SubClass ist 0x00
Protokoll ist 0x00
-> die Verbindung funktiniert nicht, da das Softwarebeispiel 3 Enpoints 
erwartet!

Wenn ich meine Prolific USB UART Bridge an USBKEY anschließe, meldet 
sich diese mit 3 Endpoints:
Endpoint0 IN Interrupt
Endpoint1 OUT Bulk
Endpoint2 IN Bulk

Class ist 0xFF für Vendor Device
SubClass ist 0x00
Protokoll ist 0x00
und die Verbindung funktioniert einwandfrei!

Es fehlt beim CP2102 der Interupt Endpoint.
Hatte vielleicht schon jemand das gleiche Problem oder kann mir jemand 
den Schubs in die richtige Richtung geben?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der CP2102 dürfte kein CDC sein, wie es auch FT232 und Co. nicht sind. 
AFAIK ist die einzige USB-Seriell-Bridge, die sich tatsächlich als CDC 
verkauft, irgendwas von Microchip.

Hast Du die Enumeration mal unter Windows mit einem USB-Sniffer 
untersucht?

von Hans D. (hans_dampf0_0)


Lesenswert?

Ja mit USB Inventory, natürlich mit gleichem Ergebnis.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Naja, dann dürfte das Problem sein, daß das Softwarebeispiel mit einem 
CDC reden will, Deine UART-USB-Bridge aber eben kein CDC ist, sondern 
ein anderes, proprietäres Protokoll einsetzt.

Wie ich schon schrieb, praktisch keine der üblichen USB-Seriell-Bridges 
(ob von TI, FTDI, SiLabs, Prolific etc.) verwendet das CDC-Protokoll, 
das tut nur* der MCP2200 von Microchip 
(http://www.microchip.com/wwwproducts/devices.aspx?dDocName=en546923) 
und natürlich V-USB/CDC.

Was genutzt wird, kannst Du erkennen, indem Du Dir die vom Hersteller 
gelieferten USB-Treiber für Windows ansiehst. Ist das mehr als eine 
simple *.inf-Datei, wird mit sehr hoher Wahrscheinlichkeit ein 
proprietäres, nicht-CDC-Protokoll verwendet.


*) natürlich will ich nicht ausschließen, daß es so etwas nicht 
vielleicht doch auch von einem anderen Hersteller geben kann.

von Hans D. (hans_dampf0_0)


Lesenswert?

Ist nur komisch das meine Prolific USB Bridge die ich oben beschrieben 
habe funktioniert. Naja ist wohl eben dann ein CDC Device, weil Sie eben 
auch 3 Endpunkte hat.

Schade, wäre ja auch zu einfach gewesen!

VIELEN DANK für deine Antwort Rufus!

von Uwe (Gast)


Lesenswert?

Der CP2102 kann auch CDC modus.

von Hans D. (hans_dampf0_0)


Lesenswert?

ok Uwe dann lass mal deinen Lösungsansatz hören denn deine Aussage 
bringt mich jetzt nicht unbedingt weiter

von BernhardT (Gast)


Lesenswert?

Hallo Hans,
Schau dir mal das Dokument an:
http://www.silabs.com/Support%20Documents/Software/USB_Overview.pdf

Wenn ich das nicht ganz falsch verstehe steht da deutlich das die 
USB/UART Bridges Virtual Com Ports Treiber verwenden.
Das CDC Beispiel (Appendix ab Seite 60) ist leider ausdrücklich für die 
Silab MCU's gedacht.

Ein kleines Konfigurationstool und zusätzliche Informationen zu den 
CP210x  ist hier mit dabei (kennst du wahrscheinlich schon):
http://silicon-laboratories-usbxpress-developme.software.informer.com/

Gruß Bernhard

von BernhardT (Gast)


Lesenswert?

P.S.
Damit will ich sagen das ich nicht glaube das CDC mit den CP210x 
funktionieren kann.
„Requires no firmware or driver development“ S.54, heißt leider auch: 
ist nicht möglich.

von Hans D. (hans_dampf0_0)


Lesenswert?

Hat irgendjemand vielleicht ne andere Idee wie ich die Verbindung 
zwischen Smartphone und CP2102 realisieren kann? Am besten natürlich 
kabellos!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du wirst schon den CP2102 nutzen können, nur wirst Du anstelle der 
CDC-Ansteuerung das Ding auf seine vom Hersteller vorgegebene 
proprietäre Weise ansteuern müssen.

Wie das geht, solltest Du den Linux-Treibersourcen entnehmen können.

von Hans D. (hans_dampf0_0)


Lesenswert?

Ok das würde ich gerne tun. Mir fehlt jetzt irgendwie der Einstieg. Wo 
finde ich denn die Linux Treibersourcen?

Bin dir wirklich für jeden Tipp dankbar.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hans Dampf schrieb:
> Wo
> finde ich denn die Linux Treibersourcen?

Vermutlich bei kernel.org bzw. github.

Kurzes Durchblättern, ich denke, das hier ist er:

http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=drivers/usb/serial/cp210x.c;h=edc0f0dcad8378f4298d68815d2935404d8fedac;hb=HEAD

von Hans D. (hans_dampf0_0)


Lesenswert?

OK das hat mir sehr geholfen. Vielen Dank für euere Bemühungen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.