Forum: Mikrocontroller und Digitale Elektronik FT2232H Datenrate im FIFO Modus


von Lars S. (Gast)


Lesenswert?

Ich habe zwei AD Konvertert, die mit mit einer Samplerate von 500kHz 
Daten 4 Byte liefern. Diese gehen in einen FIFO im FPGA und werden dann 
vom FT2232H im synchronen FIFO Modus abgeholt. Das ergibt also eine 
Datenrate von 2MByte/s. Sollte also für USB 2.0 kein Problem sein. 
Manchmal habe ich jedoch aussetzer und die Datenübertragung spinnt 
etwas. Ich benutze libftdi mit der ftdi_readstream funktion. das 
funktioniert ja auch soweit aber irgendwie verstehe ich die Parameter 
packetsPerTransfer und numTransfers nicht so richtig. Wie sind die bei 
einer solchen Datenrate richtig zu wählen. Mit den Daten wird eigentlich 
nicht viel gemacht außer die in eine Datei in einem RAM Dateisystem zu 
schreiben.

von Achim S. (Gast)


Lesenswert?

Beim FT2232 im synch FIFO Mode kannst du leicht ein Problem beim 
Interfacetiming bekommen. Wenn du kontinuierlich Daten schreiben willst, 
signalisiert der Baustein über TXE, wenn er keine weiteren Daten mehr 
aufnehmen kann. Die zulässige Reaktionszeit zwischen der Flanke von TXE 
zum Wegnehmen von WE ist gering, und auf dem Weg können Daten verloren 
gehen.

Beitrag "Re: FT2232H Sync FIFO"

Meiner Erfahrung nach kann man zig mal am Design rumschrauben und 
denken, dass jetzt endlich alles passen müsste (indem man das nicht 
richtig übertragene Byte vormerkt und später neu schickt) - und trotzdem 
geht nach einer Woche Dauerbetrieb dann doch wieder sporadisch ein Byte 
auf dem Weg verloren.

Ich bin deswegen bei einem früheren Projekt auf den asynch FIFO Mode 
umgestiegen. Hat vom ersten Design an funktioniert, und hatte keine 
Probleme damit, auch ein Vielfaches der 2MByte/s dauerhaft fehlerfrei zu 
übertragen.

von Gustl B. (gustl_b)


Lesenswert?

Achim hat Recht, in dem von ihm verlinkten Post ist aber auch eine 
Lösung für das Problem dabei in Form von Code.
Ganz am Ende vom Thread. Der funktioniert zuverlässig und mit leichten 
Anpassungen auch für den FT601/FT600.
Ich verwende den zusammen mit der D2XX Bibliothek.
Der Code hat ein FIFO Interface, du kannst ihn also direkt an einen BRAM 
FIFO anschließen. Allerdings ist das hier alles in einer Beschreibung 
drinnen. Das sollte ich vielleicht mal in ein eigenes VHD File auslagern 
so wie hier Beitrag "FT600 ucPipeID 0x82 - Bedeutung der Bits?" im letzten 
Post. Damit die volle USB Datenrate ohne Aussätzer funktioniert sollte 
das FIFO im FPGA 64 kByte speichern können. Bei dir mit den 2 MByte/s 
reicht vermutlich ein kleinerer Speicher. 64 kByte reichen bei 40 
MByte/s für 1,6 Sekunden. Bei dir würden schon 3,2 kByte die gleiche 
Zeit puffern können. Aber eben ganz ohne Puffer geht es nicht weil USB 
manchmal Wartepausen hat. Nimm 4 oder besser 8 kByte als FIFO und es 
sollte passen.

von Lars S. (Gast)


Lesenswert?

TXE nutze ich auch und in diesem Fall schreibe ich dann auch keine Daten 
mehr in den FIFO und warte etwas.

von Achim S. (Gast)


Lesenswert?

Lars S. schrieb:
> TXE nutze ich auch und in diesem Fall schreibe ich dann auch keine Daten
> mehr in den FIFO und warte etwas.

und hältst du dabei das geforderte Timing sicher ein? darin besteht das 
Problem. Lies dir ggf. die Anforderungen im verlinkten Artikel noch Mal 
durch.

von Lars S. (Gast)


Lesenswert?

Achim S. schrieb:
> Lars S. schrieb:
>> TXE nutze ich auch und in diesem Fall schreibe ich dann auch keine Daten
>> mehr in den FIFO und warte etwas.
>
> und hältst du dabei das geforderte Timing sicher ein? darin besteht das
> Problem. Lies dir ggf. die Anforderungen im verlinkten Artikel noch Mal
> durch.

Ich denke schon. Dazwischen ist noch ein SN74V3640 von Texas 
Instruments, der in der 166MHz Version. Der Wird direkt von der 60MHz 
Clock des FTDI getrieben.

von Gustl B. (gustl_b)


Lesenswert?

Ist das ein Duplikat dieses Threads?

Beitrag "FT2232H und SN74V3690"

Ich weiß nicht ob dieser FIFO Baustein das Timing einhält und in diesem 
anderen Thread ist die Fehlerbeschreibung, dass zusätzliche unerwünschte 
Daten ankommen.

von Lars S. (Gast)


Lesenswert?

Gustl B. schrieb:
> Ist das ein Duplikat dieses Threads?
>
> Beitrag "FT2232H und SN74V3690"
>
> Ich weiß nicht ob dieser FIFO Baustein das Timing einhält und in diesem
> anderen Thread ist die Fehlerbeschreibung, dass zusätzliche unerwünschte
> Daten ankommen.

Nein ich nutze den FIFO Baustein nur weil da mal eine Alternative ohne 
FPGA vorgesehen war und ein FIFO mehr dazwischen kein Problem sein 
sollte. Die enable setup time liegt bei 1.5ns, was das Timing einhalten 
sollte.

von Lars S. (Gast)


Lesenswert?

Es ging mir auch eher darum einen Softwarefehler auszuschließen. 
Deswegen Frage ich was die beiden Parameter der readstream Funktion 
wirklich bedeuten.

von Gustl B. (-gb-)


Lesenswert?

Das ist doch hier schön beschrieben: 
https://www.intra2net.com/en/developer/libftdi/documentation/ftdi__stream_8c.html 
Ich möchte aber weiterhin die D2XX empfehlen. Damit bekomme ich 
fehlerfrei knapp 40 MByte/s über die Leitung.

Hach gugge mal, es gibt auch Projekte mit libftdi und sem 245 FIFO:
http://developer.intra2net.com/mailarchive/html/libftdi/2016/msg00051.html

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.