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 <==
> 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 <==
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
> Aber er bestätigt meine Vermutung, daß ich wohl einen Treiber für den > CP2102 schreiben muß. Du schreibst Firmware für den Vinculum?
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.
> 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.
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.
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!
> Danach kann man die Daten mit dem Vinculum-Kommndo "drd\n" häppchenweise ...
Ich meinte "drd\r". Sorry
> 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.
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.