Forum: Mikrocontroller und Digitale Elektronik FT2232 mit 30MB/s und dann?


von Sam (Gast)


Lesenswert?

Hallo,

hat schonmal wer den FT2232H mit 20-30 MB/s betrieben? Ich frage mich 
die ganze Zeit, wie man die Datenmenge bei kontinuierlichem Betrieb am 
PC (z.B. Windows) verarbeiten will? Da kommt ja keine Maschine mit, 
oder?

Gruß Sam

von Armin (Gast)


Lesenswert?

Warum soll da kein PC mitkommen? GBit-LAN, SATA sind nicht unbedingt 
langsamer :-)

von Sam (Gast)


Lesenswert?

Naja bei SATA ist das nicht unbedingt kontinuierlich. Da kann ich der 
Hardware sagen "warte mal kurz, ich hab jetzt grade keine Zeit". Aber 
beim USB gehen mir dann die Daten verloren.

von Peter II (Gast)


Lesenswert?

jede USB Festplatte schafft heute 30Mbyte/s. Und dabei ist kein PC 
ausgelastet.

dabei wird dann sogar noch geschrieben. Die Frage ist ja was du mit den 
Daten machen willst. Aber reine Datenrate von 30Mbyte/s ist auf jeden 
Fall nicht ein Problem.

von blob (Gast)


Lesenswert?

der Intel Core i7 980 XE kann 107.55 GFLOP/S durchfuehren (wikipedia)
also bleibt dir pro empfangenem byte ca 3000 flops 
(Gleitkommazahl-Berechnungen)

das sollte doch genug Dampf sein, um auch was komplizierteres mit den 
daten anzufangen

Das Programm muss halt ein paar Tricks verwenden, zB mulithreading oder 
so

von Sam (Gast)


Lesenswert?

OK, es geht um einen Sensor, der mir ca. 30 MBit/s an Daten liefert. Auf 
meiner Hardware kann ich ein paar kByte zwischen speichern und dann ab 
über den FT2232H. Wenn ich die Daten also nicht regelmäßig an den PC 
sende, dann sind sie verloren. Bei der Festplatte ist das nicht so (da 
sie ja auf der selbigen gespeichert sind).

Am PC will ich die Daten entgegennehmen, filtern und in einem Fenster 
ausgeben. Aber das wird so nicht funktionieren, weil der PC vermutlich 
nicht nachkommt. Oder hat da jemand andere Erfahrungen gemacht bzw. hat 
einen Tipp, wie man sowas angehen könnte?

von Floh (Gast)


Lesenswert?

Sam schrieb:
> Aber das wird so nicht funktionieren, weil der PC vermutlich
> nicht nachkommt.

Eher kommt deine Elektronik zwischen Sensor und FT2232 nicht hinterher.
Was willst du denn dafür verwenden?

von David .. (volatile)


Lesenswert?

Sam schrieb:
> OK, es geht um einen Sensor, der mir ca. 30 MBit/s an Daten liefert. Auf
> meiner Hardware kann ich ein paar kByte zwischen speichern und dann ab
> über den FT2232H. Wenn ich die Daten also nicht regelmäßig an den PC
> sende, dann sind sie verloren. Bei der Festplatte ist das nicht so (da
> sie ja auf der selbigen gespeichert sind).
>
> Am PC will ich die Daten entgegennehmen, filtern und in einem Fenster
> ausgeben. Aber das wird so nicht funktionieren, weil der PC vermutlich
> nicht nachkommt. Oder hat da jemand andere Erfahrungen gemacht bzw. hat
> einen Tipp, wie man sowas angehen könnte?

SSDs geben beim Lesen ein paar hundert Megabyte pro Sekunde aus. Der Ram 
noch viel mehr. Also hoer auf mit dem Ueberlegungen.

von Christian R. (supachris)


Lesenswert?

30MBit/s sind ja deutlich weniger als die 30MByte/s, die der FT2232H 
schafft. Du musst halt dann die Datenaufnahme, Datenfilterung und 
Datenanzeige entkoppeln und in unterschiedlichen Threads laufen lassen. 
Machen wir bei unsrer Anwendung natürlich auch, wir schaufeln mit den 
Cypress FX2 knapp 40MBye/s zum PC. Allerdings auf Anforderung mit BULK, 
da geht nix verloren. Für eine Live- Verarbeitung ist das aber auch 
mächtig viel. Ein Rechner mit TerraFlops klingt immer schnell, aber 
alles, was über externe Busse geht, ist wesentlich langsamer. Man kann 
einen Core i7 mit einem konstanten Datenstrom von 30MB/s locker soweit 
überfahren, dass ein paar Cores voll ausgelastet sind. 200MB/s von einer 
HDD auf die andere schaufeln ist dagegen keine Kunst...

von blob (Gast)


Lesenswert?

Der ftdi treiber hat schon einen puffer, ein paar megabyte glaubich. 
Abholen musst du die Daten dann schon irgendwann. Wenn du dann ein neues 
Bild fertig geladen hast, musst du dem openGL treiber sagen, dass er es 
in seinen TexturRAM kopieren soll. Ab da muss der Prozessor dann sich 
nicht mehr damit abmuehen, das macht dann die GRAKA.

von Peter II (Gast)


Lesenswert?

Sam schrieb:
> Am PC will ich die Daten entgegennehmen, filtern und in einem Fenster
> ausgeben. Aber das wird so nicht funktionieren, weil der PC vermutlich
> nicht nachkommt.
dazu muss man wissen - wie komplex die Filter sind.

Ein PC kann ein Video mit 720x576x32bbp bei 25fps darstellen das sind 
31Mbyte/s und damit ist er nicht ausgelastet, dazu kommt auch noch der 
Sound.

Wenn deine Filter als nicht extrem Komplex sind, dann sind die 30Mbyte/s 
überhaupt kein Problem für eine aktuelle CPU.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sam schrieb:
> OK, es geht um einen Sensor, der mir ca. 30 MBit/s an Daten liefert.

Am Rande gefragt: Was ist das für ein Sensor?


Ansonsten: 30 MBit/sec sind knapp 4 MByte/sec, das ist eine Datenrate, 
die bessere SD-Karten als Schreibdatenrate hinbekommen.

Ein auch nur mäßig aktueller PC schafft das locker; das auf dem PC 
laufende Programm sollte halt mit ausreichend dimensionierten Puffern 
arbeiten, um kurzzeitige "Schluckaufs" wegen Taskwechseln o.ä. zu 
kompensieren, und sinnvollerweise das Lesen per USB und das 
Weiterverarbeiten der gepufferten Daten in unterschiedlichen Threads 
organisieren.

von Sam (Gast)


Lesenswert?

@blob: Multithreading ist eine gute Idee. Da werde ich nicht drumherum 
kommen. Du sprichst von "ein paar Tricks" - welche denn noch?

@Floh: Berechtigter Einwand. Die Hardware läuft auch noch nicht. 
Notfalls gehe ich mit der Sample-Rate runter. Aber auch bei 1 MByte 
bekomme ich vermutlich Probleme.

@David:"Also hör auf mit den Überlegungen" - ich verstehe nicht, was du 
damit sagen willst. Das Problem ist nicht der Speicher, sondern der PC. 
Dadurch, dass Windows ein Multitasking-System ist, habe ich immer nur 
gewisse Zeitslots für meine Anwendung. Und wenn die dann nicht in der 
Lage ist, die Daten schnell genug aus dem USB Puffer auszulesen (weil 
z.B. grade irgendein anderer Task dazwischen funkt), dann werden diese 
Daten einfach überschrieben.

von blob (Gast)


Lesenswert?

Sam schrieb:
> Aber auch bei 1 MByte
> bekomme ich vermutlich Probleme.

jetzt hoer aber auf. da kann der 486 schon mehr!

von blob (Gast)


Lesenswert?

probiers aus. wenn nicht, gibt es immernoch linux. ein echtes 
multitasking programm!

von Peter II (Gast)


Lesenswert?

blob schrieb:
> wenn nicht, gibt es immernoch linux. ein echtes
> multitasking programm!
naja dann ist windows doch besser, das ist das ganze Betriebssystem 
Multitasking fähig nicht nur ein Programm.

von blob (Gast)


Lesenswert?

du hast nen zwischenspeicher in deinem PC. Du musst nicht jede ms ran. 
Ist aber auch kein Problem, solltest du nicht gerade youtube videos 
anschaun sondern wirklich nur das eine Programm laufen lassen. Wir gehen 
mal von einem frisch installierten XP aus! Ist klar, dass es nicht mehr 
geht, wenn du erstmal x spywareprogramme drauf hast.
bei 1GHz bleiben dir 33 takte pro zu empfangendem byte. Davon muss 
natuerlich der ganze overhead abgezogen werden, den das taskgeswitche 
verbraucht und ich weiss auch nicht, ob mit jedem takt ein befehl 
ausgefuehrt wird, aber es sollte doch reichen! Kommt natuerlich drauf 
an, was du nun mit den Daten machen willst. Was ist das jetzt fuer ein 
sensor und meintest du MByte oder Mbit?

von blob (Gast)


Lesenswert?

Peter II schrieb:
> naja dann ist windows doch besser, das ist das ganze Betriebssystem
> Multitasking fähig nicht nur ein Programm.

nunja linux ist doch auch nur ein programm.

von blob (Gast)


Lesenswert?

juhu keiner schreibt mehr. ich hab den thread gekillt. war eh quatsch. 
erzaehlt uns hier einen vom Pferd! und sowas pessimistisches. Warum 
sollte es denn nicht gehen? Und gesagt, was er genau will, hat er auch 
nciht. Sicher so ein top secret project.

von Sam (Gast)


Lesenswert?

Ich habe schon gewisse Erfahrungen mit einem HID-Gerät gemacht. Das 
Ganze lief mit ca. 10 kByte/s. Wenn ich da jeden Datensatz im Fenster 
ausgegeben habe und gleichzeitig im Netz surfte (also Fenster hin- und 
hergeschaltet wurden), dann konnte es vorkommen, dass ein paar Bytes 
verloren gingen. Bei der Ausgabe von nur jedem 100ten Datensatz war das 
kein Problem. Auch wenn der PC sonst nichts zu tun hatte funktionierte 
alles einwandfrei. Soviel zum Thema Multi-Tasking.

von blob (Gast)


Lesenswert?

ja weil du bei jeder Ausgabe unter Windows das ganze Fenster neu 
zeichnen musst (mit GDI zumindest) da kommen bald ein paar GByte traffik 
zusammen, auch wenn du nur ein paar strichlein zeichnest. ist halt nicht 
ideal. Deshalb solltest du die datenaquise von der datenverarbeitung 
trennen und die ausgabe auf 10 mal/ sekunde beschraenken.

von Peter II (Gast)


Lesenswert?

Sam schrieb:
> Das
> Ganze lief mit ca. 10 kByte/s. Wenn ich da jeden Datensatz im Fenster
> ausgegeben habe und gleichzeitig im Netz surfte (also Fenster hin- und
> hergeschaltet wurden), dann konnte es vorkommen, dass ein paar Bytes
> verloren gingen.
das ist eine Frage der ausgabe. Wie hast du es denn ausgegeben? GDI+ 
genutzt um einen Text auf den Bildschirm zu bekommen? Oder nur dumm ein 
Memofeld in VB erstellt und dort den Text immer angefügt?

Es gibt halt verschiende möglichkeiten etwas darzustellen, aber keiner 
hat ihr eine Ahnung was du genau machen willst. Du bist der einzigste 
der immer behauptet es geht nicht. Wenn es nicht geht dann liegt es aber 
nicht am PC sondern an der Art und weise wie du es bis jetzt gemacht 
hast.

von blob (Gast)


Lesenswert?

dann solltest du unbedingt nicht das eingabegeraet pollen, sondern mit 
ner callbackfunktion arbeiten. dh der ftdi treiber ruft deine funktion 
auf, sobald genuegend daten angekommen sind. So musst du nicht den 
eingang in einer Endlosschleife staendig abfragen und kannst im 
Hintergrund die Verarbeitung machen.

von Sam (Gast)


Lesenswert?

Zum "top-secret"-Projekt: es geht um eine Hardwareschnittstelle, die 
eine möglichst große Übertragungsrate am USB realisiert. Dabei spielt 
eher das Konzept, als die eigentliche Anwendung eine Rolle.

von Sam (Gast)


Lesenswert?

Ich habe damals einen Dialog erstellt und dann die Daten zeilenweise in 
einer Listbox ausgegeben.

von Peter II (Gast)


Lesenswert?

Sam schrieb:
> Ich habe damals einen Dialog erstellt und dann die Daten zeilenweise in
> einer Listbox ausgegeben.
das kann schon das Problem gewesen sein, bei einigen Programmiersprachen 
wird der neue String an den alten String angehängt, dafür muss aber der 
alte String in einen neuen Speicherbereich kopiert werde. Das müsste man 
schon sehen wenn es am ende immer langsamer wird.

Aber wie schon oben geschrieben, man sollte eh die verarbeitung der 
Daten und die Anzeige entkoppeln, damit gehen auch keine Daten verloren 
wenn die Anzeige gerade mal nicht hinterher kommt.

Und 30Mbyte/s als text auf einen Bildschirm darzustellen macht überhaupt 
keinen Sinn, weil es kein Mensch lesen könnte. Also sag entlich mal 
genau was wie oft dargestellt werden muss.

von Christian R. (supachris)


Lesenswert?

So absolut pauschale Aussagen "das geht auf jeden Fall" sind völlig 
unangebracht, denn Linux, Windows, MacOS sind alles keine 
echtzeitfähigen Betriebssysteme. Unter Windows XP haben wir mit dem 
kontunierlichem USB Streaming zwar im Mittel eine Datenrate von knapp 
40MByte/s, allerdings geht das nur mit BULK und großen Puffern auf der 
Hardware, denn Windows setzt gerne mal für 50ms oder mehr den USB 
Transfer aus. (Linux übrigens auch). USB ist recht niedrig priorisiert 
und erst bei USB 3.0 wurde das Polling abgeschafft.
Es kommt also auf die ganz spezielle Anwendung an. Auf jeden Fall muss 
man Daten sammeln, Daten verarbeiten, Daten speichern und Daten anzeigen 
voneinander trennen. Da braucht man einige Threads, die asynchron 
laufen. USB Datentransfer muss übrigens auch alles durch die CPU, DMA 
gibts erst bei USB 3.0 (EHCI kann zwar auch DMA, aber meines Wissens 
nicht unter Win). Da geht viel Last drauf. Wenn du dann die Werte noch 
in Float umrechnen musst, um deine Filter zu füttern, geht noch mehr CPU 
Last drauf. Daten nebenbei auf Festplatte speichern, nochmal etwas. 
Daten sinnvoll dezimieren, um auf die Anzeige zu bringen, auch nochmal 
CPU.

von Sam (Gast)


Lesenswert?

Was ich bislang herausgelesen habe ist, dass das Nadelöhr in der 
Datenausgabe liegt und eher nicht am USB bzw. der Datenpufferung.

Ich muss das wohl einfach mal ausprobieren.

Vielen dank für die rege Teilnahme.

von Sam (Gast)


Lesenswert?

Wobei mich Christian gerade wieder in meinem "Vorurteil" bestärkt hat.

von Peter II (Gast)


Lesenswert?

Sam schrieb:
> Wobei mich Christian gerade wieder in meinem "Vorurteil" bestärkt hat.
du hattest schon probleme mit 10 kByte/s und konntest sie nicht lösen. 
Das da war bestimmt nicht USB das Problem.

von Sam (Gast)


Lesenswert?

Naja bei HID kann ich den Empfangspuffer auf 512 Pakete hochschrauben. 
Wenn man mal von 1ms/Paket ausgeht, dann reichen schon 0,5 Sekunden an 
"Nebenbeschäftigung" des PC's, um beim Auslesen nicht mehr nachzukommen.

von Peter II (Gast)


Lesenswert?

Ich habe gerade mal den FT2232 angeschaut, dort steht nur etwas von

USB 2.0 Full Speed (12M bits/second) compatible

wie willst du da 30Mbyte/s oder doch 30Mbit/s übertragen?

von Sam (Gast)


Lesenswert?

FT2232H - das "H" habe ich im Thread-Titel vergessen, aber in meinem 
ersten Post findest Du es.

von Peter II (Gast)


Lesenswert?

Sam schrieb:
> dann reichen schon 0,5 Sekunden an
> "Nebenbeschäftigung" des PC's, um beim Auslesen nicht mehr nachzukommen.
ja und? 0.5 klingt zwar wenig ist über für einen PC eine ewigkeit. In 
der Zeit kann die CPU mehrfach in den Sleepmodus gehen! Brauchst doch 
nur mal die Maus anzuschauen, hast du dort jemals eine verzögernung von 
1/2 sekunde beobachtet?

von Dennis S. (bzzzt)


Lesenswert?

Peter II schrieb:
> Sam schrieb:
>> dann reichen schon 0,5 Sekunden an
>> "Nebenbeschäftigung" des PC's, um beim Auslesen nicht mehr nachzukommen.
> ja und? 0.5 klingt zwar wenig ist über für einen PC eine ewigkeit. In
> der Zeit kann die CPU mehrfach in den Sleepmodus gehen! Brauchst doch
> nur mal die Maus anzuschauen, hast du dort jemals eine verzögernung von
> 1/2 sekunde beobachtet?

Das Userland kann schonmal für die Zeit aussetzen, wenn ein Prozess den 
RAM vollhaut und das Paging einsetzt. Ja, solche Verzögerungen können 
auftreten, alles schon gesehen. Oder wenn du eine billige SSD hast, die 
dann mal für 500 ms nachdenkt. Such mal nach bestimmten 
OCZ-Festplattenserien, da haben viele Nutzer aufgeschrien, weil ihr 
Windows für diese Hunderte von Millisekunden komplett stehenbleibt. Es 
gibt viele Möglichkeiten, wieso ein „normales“ Betriebssystem für viele 
ms einen Prozess nicht mehr ausführt, deswegen gibt's halt keine 
Garantien für gar nichts.

Wie viele Befehle moderne CPUs in der Zeit abarbeiten könnten, ist 
irrelevant, wenn man auf andere Komponenten wie die Festplatte oder 
einen Netzwerktranfer wartet. Der Verweis auf Echtzeitbetriebssysteme 
kam schon.

Allerdings: In 99% der Fälle wird sowas mit Bulk-Transfers (wie sie der 
FT2232H benutzt) schon funktionieren, und im anderen 1% schieben sich 
dann alle Beteiligten den schwarzen Peter gegenseitig zu. ;)

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.