Forum: Mikrocontroller und Digitale Elektronik FTDI FT2232 UART Verzögerung


von gast (Gast)


Lesenswert?

Hallo!

Ich habe einen µC der über UART eine Anbindung an den FT2232 hat. Am PC 
verwende ich den D2xx Treiber und nicht den Virtual Comport Treiber. Der 
µC fungiert als loopback, d.h. der µC sendet sobald er ein Zeichen 
empfangen hat dieses sofort wieder an den FT2232 zurück.
Dies funktioniert fehlerfrei, jedoch mit einer sehr hohen Verzögerung. 
So vergehen ca. 300 ms zwischen Senden und Empfangen am PC.
Baudrate habe ich auf 19200 gesetzt, 8 Bits, 1 Stopbit, Parity None.
Latencytimer auf 2 ms und allgemeine Timeouts auf 500 ms. Daten lese ich 
vom FTDI, sobald der FTDI Treiber ein 
Eventhandle(FT_SetEventNotification) setzt.

Danke!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Kannst Du beim D2xx-Treiber die Fifo-Größen konfigurieren? Der FT2232 
hat recht große Sende- und Empfangs-Fifos, die beim Übertragen sehr 
kleiner Datenmengen eher hinderlich sind, da das entsprechende Event zum 
Senden/Empfangen erst nach einem gewissen Timeout erzeugt wird.

von gast (Gast)


Lesenswert?

Hi,
Welche FIFOs meinst du, die Hardware FIFOs am FT2232 oder die 
Empfangspuffer im Treiber? Letzere sollten durch FT_SetUSBParameters 
beeinflussbar sein. Für die Hardwarefifos kenne ich nichts. Allerdings 
habe ich den Latencytimer auf 2 ms gesetzt. Dadurch sollte der FT2232 
auch kurze Pakete nach zumindest 2 ms zum PC schicken.

Lg

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Hardwarefifos meine ich, nicht treiberinterne Puffer. Beim 
Hardware-Fifo sollte sich die Triggerschwelle festlegen lassen, die 
darüber bestimmt, bei welchem Füllstand ein Event/Interrupt generiert 
wird.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

300ms sind selbst in dem Fall zu viel, da der Latency-Timer in jedem 
Fall den Empfang auslöst, wenn er abgelaufen ist. Also müßte hier nach 
2ms etwas aufschlagen. Kann es sein, daß das Problem eher auf der 
PC-Seite zu finden ist?

von gast (Gast)


Lesenswert?

Die µC Seite würde ich einmal ausschließen, denn diese macht nichts 
anderes als RX Flag zu pollen und das empfangene Byte sofort wieder in 
den uart Puffer zu schreiben.
Am PC habe ich per FT_SetEventnotification ein EventHandle registriert 
und ein eigener Thread wartet bis das EventHandle im signaled state ist, 
prüft danach wie viele Bytes gelesen werden können und ließt diese ein.
Das hat bei mir auf einem anderen Board problemlos funktioniert - 
allerdings im FIFO-Modus und nicht im UART Modus des FTDIs.

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.