Forum: Mikrocontroller und Digitale Elektronik USB: Vinculum Host mit CP2102 verbinden


von Peter (Gast)


Lesenswert?

Hallo,
Ich habe ein Gerät mit integrierter USB-Schnittstelle (CP2102), das sich 
am PC als COM-Port anmeldet. Am Vinculum USB-Host macht es keinen Mucks. 
Meine Fragen nun:
Muß ich einen CP2102-Treiber programmieren bzw. wie weit muß ich in die 
USB-Tiefen hinabsteigen, um das Ganze zum laufen zu bewegen?
Gibt es fertige Projekte, von denen man sich was abschauen kann?

Leider kenne ich mich mit USB (noch) nicht aus.

Danke für alle Tips.
 ==> Peter <==

von holger (Gast)


Lesenswert?


von Peter (Gast)


Lesenswert?

> Beitrag "Vinculum und CP2102"
Danke, den hab ich glatt übersehen.
Aber er bestätigt meine Vermutung, daß ich wohl einen Treiber für den 
CP2102 schreiben muß.
Kann mir jemand noch ein paar Tips geben?
Gibts irgendwo einen CP2102-Treiber im Quelltext? (C-programmieren kann 
ich)
Welche Literatur etc. sollte ich mir zu USB besorgen?
Danke im voraus,
 ==> Peter <==

von Wolfgang E. (wespezial)


Lesenswert?

Hi,

Was machst Du mit dem CP2102?
Bei mir geht's darum, dass ich da nur Ascii Zeichen vom PC über den 
Vinculum weiter über den CP2102 schicken wollte und dann an der anderen 
Seite des CP2102 als RS232-Schnittstelle wieder abgreifen wollte. Ging 
nicht wg. bekannter Probleme.
Aber wenn ich jetzt den FT232RL anschließe, sehe ich immer noch nix. Das 
Ding meldet sich, nimmt auch brav die Formatierungen, aber wie ich die 
Zeichen lesen kann oder sowas, hab ich immer noch nicht rausgekriegt...
Weißt Du da was? :-(

Gruß

Wolfgang

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Aber er bestätigt meine Vermutung, daß ich wohl einen Treiber für den
> CP2102 schreiben muß.

Du schreibst Firmware für den Vinculum?

von Gast (Gast)


Lesenswert?

Hallo Peter,

der VNC braucht ersteinmal eine (passende) Firmware, sonst läuft nix.
Bei Verwendung z.B. eines VDIP-Moduls ist eine Firmware drauf, wenn man
den Chip einzeln kauft ist dort keine Firmware vorhanden.
Leider muss man sich durch die undurchsichtigen Daten- und Appl.blätter 
von
FTDI quälen, um schließlich etwas passendes zu finden.
Bei FTDI gibt es einen Note zu der Funktion VNC - FT232, vielleicht 
sollte man ansetzen, um das mit dem 2103 hinzubekommen...

Grüße, J.

von Peter (Gast)


Lesenswert?

> Du schreibst Firmware für den Vinculum?
Nein, aber der Vinculum hat low-level Funktionen wie DRD und DSD 
(Empfangen und Senden von Paketen über den USB). Mit diesen Funktionen 
und Analyse des Linux-Treibers für den CP2102, der ja im Quelltext 
vorliegt, sollte es möglich sein, den CP2102 anzusprechen.

von Peter (Gast)


Lesenswert?

Ok, das Wichtigste funktioniert schon mal.
Falls jemand etwas Ähnliches machen will - folgendes sollte man tun:

1. Vinculum in den ASCII-Mode schalten. Der Binärmodus ist buggy :-(
2. Vinculums Extended Command Set aktivieren
3. Set current device "SC 0\r"
4. Die UART-Emulation des CP2102 aktivieren (mit "SSU 
$4100010000000000\r" über den Vinculum)

Wenn mein USB-Client über den CP2102 Daten gesendet hat, kann ich sie 
mit "DRD\r" vom Vinculum abfragen. Die Daten sehen allerdings seltsam 
aus, weil die Baudate des CP2102 noch falsch ist, aber das sollte kein 
Problem sein.

von Peter (Gast)


Lesenswert?

OK, so kann man die Baudrate des CP2102 einstellen,
1
#define BAUD_RATE_GEN_FREQ 0x384000
2
void VINC_SetBaudrate (int baudrate)  
3
{
4
  int divisor = BAUD_RATE_GEN_FREQ/baudrate;
5
  char txt[64];
6
  
7
  // 0. REQTYPE_HOST_TO_DEVICE
8
  // 1. SILABSER_SET_BAUDDIV_REQUEST_CODE
9
  // 2. Value low (baud rate div)
10
  // 3. value high (baud rate div)
11
  // 4. 0x00 wIndex(L)
12
  // 5. 0x00 wIndex(H)
13
  // 6. 0x00 Lenght low
14
  // 7. 0x00 Length high
15
  sprintf (txt, "ssu $4101%02x%02x00000000\r", divisor&0xff, divisor>>8);
16
  COMM_WriteString (txt);  // Sende über Rs232
17
  VINC_WaitPrompt();       // Warte prompt b
18
}
Danach kann man die Daten mit dem Vinculum-Kommndo "drd\n" häppchenweise 
abholen, klappt alles perfekt!

von Peter (Gast)


Lesenswert?

> Danach kann man die Daten mit dem Vinculum-Kommndo "drd\n" häppchenweise ...
Ich meinte "drd\r". Sorry

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ein dickes Lob an Peter für seine Forschungen!

von Peter (Gast)


Lesenswert?

> Ein dickes Lob an Peter für seine Forschungen!
Gern geschehen. War einfacher, als ich gedacht hatte. Wahrscheinlich 
kann man mit dem Vinculum jedes USB-Device ansprechen, ohne daß er eine 
spezielle Firmware braucht.

von Wolfgang E. (wespezial)


Lesenswert?

Hallo Peter,
bin mittlerweile auch so weit, dass ich die Daten mit dem Vinculum 
Kommando drd häppchenweise abholen kann. Hast Du diese irgendwie 
formatiert? Sprich: ich weiß, da kommen 8 Zeichen an, die will ich 
sofort in einem lesen. Bisher macht der drd zwei Abholvorgänge draus, 
also zB W und olfgang.
Was ist in der Unterroutine "VINC_WaitPrompt" drin, hast Du irgendwelche 
Formatierungskonstanten oder so drin?

Gruß

Wolfgang

von Peter (Gast)


Lesenswert?

> Bisher macht der drd zwei Abholvorgänge draus,
> also zB W und olfgang.
Diese Fragmentierung wirst du wohl nicht verhindern können. Musst alles 
einsammeln, bis ein "drd" keine Daten mehr liefert.

> Was ist in der Unterroutine "VINC_WaitPrompt" drin, hast Du irgendwelche
> Formatierungskonstanten oder so drin?
Die Funktion wartet maximal 3 Sekunden auf "D:\\>\r" (das spuckt der 
Vinculum  aus, wenn er bereit ist.) und löscht danach den seriellen 
Eingangsbuffer.

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.