FT2232 mit 30MB/s und dann?

Gast #2166732
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.
Gast #2166740
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
Gast #2166744
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?
#2166750
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.
#2166753
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...
Gast #2166754
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.
Gast #2166756
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.
Persönliche Seite #2166759
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.
Gast #2166764
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.
Gast #2166771
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?
Gast #2166776
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.
Gast #2166777
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.
Gast #2166780
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.
Gast #2166782
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.
Gast #2166786
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.
Gast #2166793
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.
Gast #2166803
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.
#2166823
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.
Gast #2166827
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.
Gast #2166844
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.
Gast #2166853
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?
#2167861
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. ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren