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.
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.
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.
TXE nutze ich auch und in diesem Fall schreibe ich dann auch keine Daten mehr in den FIFO und warte etwas.
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.
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.
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.
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.
Es ging mir auch eher darum einen Softwarefehler auszuschließen. Deswegen Frage ich was die beiden Parameter der readstream Funktion wirklich bedeuten.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.