Forum: Mikrocontroller und Digitale Elektronik FT232 und RS232 Geschwindigkeit.


von Andreas (Gast)


Lesenswert?

Hallo,

ich habe ein wenig mit dem COM Port meines Rechner herum gespielt. Ich 
schalte per C# nur den RTS Port high low. Ohne irgendwelche Waits oder 
Timer.
Ich denke kürzer geht es nicht und es müßte doch die maximale Frequenz 
dabei heraus kommen.

private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Open();

            while (true)
            {
              serialPort1.RtsEnable = true;

                serialPort1.RtsEnable = false;
            }

wenn ich nun den eingebauten RS232 Port meines Rechners benutze, 
schaltet RTS etwa mit 10kHz. Benutze ich nun einen FT232 (FTDI) komme 
ich gerade auf 70Hz!! und das mit dem gleich Code auf dem gleichen 
Rechner. Wie kommt das? Kann ich das beschleunigen auf die wenigsten 
10kHz der RS232. Eigentlich brauche ich 20kHz.

Danke
Andreas

von holger (Gast)


Lesenswert?

>Benutze ich nun einen FT232 (FTDI) komme
>ich gerade auf 70Hz!! Wie kommt das? Kann ich das beschleunigen auf die 
>wenigsten 10kHz der RS232.

Nein, das kriegst du bei USB nicht hin.

von Andreas (Gast)


Lesenswert?

Schade, würd mich mal interessieren warum?

Trotzdem, Danke für Deine Antwort.

Gruß
Andreas

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Der Grund ist einfach.
Beim physikalischen RS232-Port kannst du mit einem Portzugriff direkt an 
einem Pin wackeln. Hierzu muss lediglich ein Byte an eine bestimmte 
Adresse geschrieben werden.

Um ein Pin über USB zu setzen muss immer ein komplettes Datenpacket 
verschickt werden. Das dauert halt seine Zeit. Aus genau diesem Grund 
sind einfache Parallelport-ISP-Adapter nicht an einem USB-Port möglich 
(oder nur bedingt einsetzbar).

von Anja (Gast)


Lesenswert?

Andreas schrieb:
> Schade, würd mich mal interessieren warum?

Die Übertragung von Daten findet bei USB blockweise im 1ms-Zeitraster 
statt.
-> die theoretisch maximale Frequenz wenn nur ein USB-Teilnehmer am 
gleichen Controller sitzt wäre 500 Hz.

http://www.ftdichip.com/Support/Documents/AppNotes/AN232-04.pdf

im Bit-Bang Mode des FTDI sollten unter gleichen Voraussetzungen (kein 
weiterer Busteilnehmer optimiertes Zusammenspiel von Betriebssystemtick 
16ms? zu USB-ticks 1ms sowie optimierte Transferbuffergrößen) ca 30kHz 
drin sein. (1 ms * (64-2) Bytes).

http://www.ftdichip.com/Support/Documents/AppNotes/AN232R-01_FT232RBitBangModes.pdf

Gruß Anja

von Andreas (Gast)


Lesenswert?

ist ja interessant. Bei mir hängt mittlerweile einiges am USB Port.

Danke für eure Antworten und die Links. Da werd ich noch ein bischen 
lesen.

Gruß
Andreas

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Anja schrieb:

> http://www.ftdichip.com/Support/Documents/AppNotes/AN232-04.pdf
>
> im Bit-Bang Mode des FTDI sollten unter gleichen Voraussetzungen (kein
> weiterer Busteilnehmer optimiertes Zusammenspiel von Betriebssystemtick
> 16ms? zu USB-ticks 1ms sowie optimierte Transferbuffergrößen) ca 30kHz
> drin sein. (1 ms * (64-2) Bytes).
>
> 
http://www.ftdichip.com/Support/Documents/AppNotes/AN232R-01_FT232RBitBangModes.pdf
>
> Gruß Anja

Also ich hab jetzt schon etliche Projekte mit diesen Bausteinen 
realisiert (aktuell bin ich auch wieder an einem dran) und muss das 
zumindest anzweifeln. Ein USB-Paket braucht auf meiner Kiste mind. etwa 
80ms (hab es irgendwann mal gemessen) um zu uebertragen werden und zwar 
unter guten Voraussetzungen.

Ausserdem ist es sinnlos, sich auf so etwas verlassen zu wollen, selbst 
wenn es auf der eigenen Kiste funktioniert. Man weiss nie, unter welchen 
Bedingungen der Endbenutzer das Geraet einsetzen will, vielleicht hinter 
zwei Hubs mit ein dutzend anderer Geraete. Man sollte also immer vom 
Schlechtfall ausgehen wenn man was zuverlaessiges machen will.

Greets,
Michael

P.S. Diese ganzen FTDI-Chips sind ne ziemliche Magie, zuverlaessig is 
auch was anderes ;)

von Anja (Gast)


Lesenswert?

Michael G. schrieb:
> Ein USB-Paket braucht auf meiner Kiste mind. etwa
> 80ms (hab es irgendwann mal gemessen) um zu uebertragen werden und zwar
> unter guten Voraussetzungen.

Da machst Du irgendwas falsch das wären ja noch nicht mal 9600 Baud.
Du darfst die Bytes nicht einzeln auf die Reise schicken sondern in 
vielfachen von 64*62 = 3968 Bytes bei korrekt eingestellter 
Transferbuffergröße im D2XX Treiber-Mode.


Siehe auch:

http://www.ftdichip.com/Support/Documents/AppNotes/AN232B-03_D2XXDataThroughput.pdf

http://www.ftdichip.com/Support/Documents/AppNotes/AN232B-04_DataLatencyFlow.pdf

Gruß Anja

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Anja schrieb:
> Michael G. schrieb:
>> Ein USB-Paket braucht auf meiner Kiste mind. etwa
>> 80ms (hab es irgendwann mal gemessen) um zu uebertragen werden und zwar
>> unter guten Voraussetzungen.
>
> Da machst Du irgendwas falsch das wären ja noch nicht mal 9600 Baud.
> Du darfst die Bytes nicht einzeln auf die Reise schicken sondern in
> vielfachen von 64*62 = 3968 Bytes bei korrekt eingestellter
> Transferbuffergröße im D2XX Treiber-Mode.

Haha... Du bist mir ne echte Heldin :P
Das bringt's Dir beim Bitbanging bzw. bei der Flusskontrolle natuerlich 
voll.

Mit meiner letzten Methode hab ich den FT232 sogar schon bei 1MBaud 
zuverlaessig zum Laufen gebracht. Wer ueberbietet mich?

P.S. Den D2XX-Treiber verwende ich nicht.

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.