www.mikrocontroller.net

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


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 <==

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 <==

Autor: Wolfgang E. (wespezial)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

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

Autor: Peter (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein dickes Lob an Peter für seine Forschungen!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfgang E. (wespezial)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.