FT232R, FIFO und Handshake

Moin!

In einer Regelungselektronik mit Mikrocontroller würde ich den gern per FT232R mit dem PC (Virtual Com Port) verbinden.

Nun hab ich das Problem, daß die zeitkritische Regelung immer nur kurze Zeitschlitze für den Empfang von Daten (FT232R->Controller) erlaubt. Ich bräuchte also ein (Hardware-)Handshake...

- bei dem der Controller immer dann, wenn er Zeit hat, an der Handshake Leitung zieht und _sofort_ Daten aus dem FIFO des FT232R bekommt (wenn denn welche drin sind) bis er die Leitung wieder loslässt. Das wären alle 100ms etwa 10µs um zu schauen, ob Daten aus dem FIFO kommen, und nur wenn ja, dann 200µs (20 Bytes @ 1MBit/s) zum Abholen.

- bei dem die Handshake-Leitung aber _nicht_ die Kommunikation des PC an den FT232R ausbremst, denn dann käme der wohl nie zum Senden. Der PC soll also unabhängig vom Mikrocontroller Daten an den FT232R senden, bis dieser "FIFO voll" meldet.

Ich fürchte einfach, daß ich in $grafischer-Programmierumgebung-auf-PC über die Com-Port-Einstellungen nicht den Handshake zwischen FT232R und Controller alleine bekomme.

FTDI schreibt in "AN232B-04 Data Throughput, Latency and Handshaking": | There are 4 methods of flow control that can be programmed for the | FT232BM device. | 1. None [...] | 2. RTS/CTS - 2 wire handshake. The device will transmit if CTS is | active and will drop RTS if it cannot receive any more. | 3. DTR/DSR - 2 wire handshake. The device will transmit if DSR is | active and will drop DTR if it cannot receive any more. | 4. XON/XOFF [...]"

und im Datenblatt zum FT232R: | Handshaking is handled in hardware to ensure fast response times.

Das bringt mich aber auch nicht weiter, denn nirgends habe ich etwas darüber gefunden, wann welcher Status an den PC gemeldet wird.

Hat jemand Erfahrung damit?

Dank und Gruß, Michael.

Reply to
Michael Eggert
Loading thread data ...

USB wird per se durch Polling im Millisekunden-Bereich abgefragt, bei XP soagr nur alle 8ms, solange man nicht die Parameter verändert.

Damit ist klar, dass die von Dir gewünschten 200us nur durch einen On-Board Buffer realisierbar sind. D.h. entweder reicht Dir der Buffer des FT232/245 oder Du darfst Hardware ergänzen.

Gruß Oliver

--
Oliver Bartels + Erding, Germany + obartels@bartels.de
http://www.bartels.de + Phone: +49-8122-9729-0 Fax: -10
Reply to
Oliver Bartels

Moin!

Der Buffer reicht völlig aus, das ich nicht das Problem.

Die Frage ist, ob das Programm auf dem PC (derzeit LabVIEW, könnte auch mal Visual-Irgendwas werden) sich überhaupt traut, Daten an den VCP zu übergeben, oder immer wenn es fragt "Handshake inaktiv" bekommt weil der Mikrocontroller eben gerade beschäftigt ist.

Der FT232R müsste also den Handshake zum Controller und zum PC voneinander entkoppeln, eben nicht transparent durchleiten, sondern darüber beiderseitig nur die Kommunikation mit dem FIFO regeln. Tut er das?

Gruß, Michael.

Reply to
Michael Eggert

100msec ist selbst fuer Windows XP eine halbe Ewigkeit. Bei Vista weiss ich es nicht, das hat hier derzeit Hausverbot und wir setzen es auch bei Kunden nicht ein. Aber wenn der Controller eh das Abholen initiiert, wo ist dann das Problem?

Nicht mit diesem Chip, aber mit von anderen entwickelten und von mir dann eingebundenen FPGA Loesungen aehnlicher Art. Wenn man sich das Blockschaltbild in Figure 1 hier ansieht

formatting link

dann muesste (oder sagen wir mal sollte) sich das FIFO so verhalten wie es das bei FPGA Loesungen auch tut: Es nimmt Daten an, unabhaengig davon ob auf der anderen (schnellen) Seite gerade was roedelt oder nicht. D.h. fuer den PC sollte das transparent bleiben, solange das FIFO nicht ueberfliesst.

Wie Oliver schon schrieb, eine sehr zeitnahe Anbindung des PC direkt (ohne FIFO-Pufferung) ginge nur mit anderen Betriebssytemen, wo man garantierte Maxima der Latenzzeiten hat, z.B. QNX.

--
Regards, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

Hi Michael,

Wenn er das nicht tut, dann frage cih mich nach dem Sinn des FIFO. AFAIR kann man aber Windoof mitteilen (in der Systemeinstellung, wo man das Teil auch konfigurieren kann, also wahrscheinlich auch von Labview aus), ab wieviel Byte im Buffer er mit der Übertragung langsam machen soll. Den Sinn hab ich nie so recht erstanden, weil dafür hat man den FIFO doch, oder?

Marte

Reply to
Marte Schwarz

Moin!

Nunja, der FIFO macht auch ohne Handshake die Übertragung flüssiger, stell Dir nur vor, es müsste jedes Byte einzeln (in je einem ganzen Paket) über den USB. In erster Linie wird vermutlich der VCP-Treiber auf dem PC dafür sorgen, daß der FIFO gut gefüllt ist.

Ich hab an diesem Rechner grad keinen FT232 dran, darum kann ich eben nicht schauen. Davon abgesehen, daß es neben dem Buffer im FT232 auch noch einen im Treiber gibt (und in LabVIEW vielleicht auch noch einen). Ich erinnere mich jedenfalls noch, daß ich beim Start 2-3x "flush" ausführen und warten musste, damit auch wirklich alles leer war.

Aber nochmal zu Sinn und Unsinn: Ich hatte neulichst mal mit dem CP2102 gespielt, auch ein USB-Seriell-Wandler mit FIFO. Und ich bin mir ziemlich sicher, daß ich mit Wackeln an den Handshake-Leitungen am Controller die Lämpchen am Terminalprogramm hatte blinken lassen und umgekehrt. Also ohne sonst Daten zu übertragen. Damit würde der Controller (99,8% der Zeit nicht zum Empfang bereit) die Kommunikation zwischen PC-Software und VCP-Treiber komplett lahmlegen. Ich werds aber nochmal nachprüfen...

Gruß, Michael.

Reply to
Michael Eggert

Moin!

So, ich habs getestet, sowohl mit FT232BM als auch CP2101 funktionierts!

Der Zustand der Handshake-Leitungen wird zwar transparent vom IC bis in die Anwendung durchgeleitet und dort angezeigt, trotzdem landen auch bei inaktiver HS-Leitung die Daten aus der Anwendung sofort im Buffer des IC, solange dort noch Platz ist. Jedenfalls spuckt das IC die Daten mit

1-2 Bitclocks nach der Handshake-Flanke aus, bei 1 MBit binnen 1-2µs, das kann nur Hardware sein.

Damit kann ich also Daten im Buffer des FT232 parken und auf Abruf schnell abholen, wie ich mir das vorgestellt hab.

Gruß, Michael.

Reply to
Michael Eggert

Michael Eggert schrieb:

Prima, kann sein, daß ich das demnächst auch mal brauchen werde...

Geht das mit beiden Handshake-Arten? Also RTS/CTS und DSR/DTR?

Thomas

Reply to
Thomas Rachel

Moin!

Mit FT232BM: Ja.

Gruß, Michael.

Reply to
Michael Eggert

Moin..

Vorsicht Falle beim FT232R!

Wenn man noch die alten FT232B-Treiber installiert hat, nimmt Windows die auch für den FT232R, ohne sich zu beschweren. Der B konnte die Bitrate aber noch nicht so fein auflösen wie der R, und da die Berechnung der Takt-Teilerfaktoren scheinbar im Treiber passiert, liegt die Baudrate dann knapp daneben - und bei hohen Baudraten gibts ggf. Übertragungsfehler. An den Treiber denkt man da meist zuletzt...

Gruß, Michael.

Reply to
Michael Eggert

Oder erst nachdem es in die Hosen ging ;-)

Hatte ich gerade. Festplatte in einem Laptop Kruke gemacht, neue besorgt, XP installiert, funzt. Heissa. Dann die Ernuechterung, alle Peripherie lief im Schnarch-Modus. Video mit einem Bild pro Sekunde und so. Zum Glueck hat Dell alle Treiber auch fuer aeltere Semester auf einem FTP Server liegen. Bei den ganzen Recovery Disks sind die nicht dabei.

--
Gruesse, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.