Forum: Mikrocontroller und Digitale Elektronik USB Controller > 12MBit/s


von Tom (Gast)


Lesenswert?

Guten Morgen!
Ich habe einen 8Bit ADC mit 48MSPS Samplerate und möchte dessen Daten an 
den PC senden.
Der bislang verwendete AT91SAM7x schafft diese Datenmenge jedoch nicht.
Kennt jemand einen Controller der diese Datenrate schaffen kann?
Im Notfall wäre ich auch schon mit 24MByte/s zufrieden.
Voraussetzung für mich wäre allerdings, das man das Teil noch Handlöten 
kann, also kein BGA.Ich habe eine gute Ausrüstung zur verfügung, aber 
eben nichts für BGA.
Danke schonmal im Voraus für eure Vorschläge!

von Christian R. (supachris)


Lesenswert?

Könntest einen Cypress FX2 nehmen, der schafft im isochronen Streaming 
die 24 MByte/s. Für 48MByte/s kontinuierlichen Datenstrom wird die 
Auswahl dann schon sehr beschränkt.

von Master S. (snowman)


Lesenswert?

es gibt für DVB-H-USB-tongles einen chip, der die emfangenen daten vom 
demodulator (normalerweise den MPEG2-stream) via USB an den PC 
streamt... vielleicht mal nach einem solchen chip umsehen?

von Tom (Gast)


Lesenswert?

Ich brauche halt eine Lösung um die Daten an den PC zu schicken und dort 
in einem C# Programm weiterzuverarbeiten.

von Andreas A. (aauer1) Benutzerseite


Lesenswert?

Theoretisch sollte das doch der Cypress FX2 Chip die vollen 48MByte/s 
auch schaffen, wenn er 480Mbit/s High Speed USB kann, oder?!

mfg
Andreas

von Mighty (Gast)


Lesenswert?

Weiss jemand wo man den her bekommt? Also in geringen Stückzahlen?

Digikey hatte den nicht als TQFP100 als ich letztens geschaut habe.

von Christian R. (supachris)


Lesenswert?


von Andreas A. (aauer1) Benutzerseite


Lesenswert?

OK. Stimmt... das DIng schafft dann doch nur 24 MByte/s. Übrigens gibts 
den auch bei Farnell.

mfg
Andreas

von Andreas A. (aauer1) Benutzerseite


Lesenswert?

Was mir jetzt noch spotan eingefallen ist, wäre, dass du deine ADC Daten 
vor der Übertragung komprimierst. Also z.B. mit einem CPLD/FPGA (weiß 
nicht, ob es sich in einem CPLD ausgehen würde) und dann an den FX2 
gibst und an den PC sendest.

48MByte/s sind schon ziemlich viele Daten.... das wird sicher nicht mehr 
so leicht!

mfg
Andreas

von Tom (Gast)


Lesenswert?

Und wie könnte ich die Daten z.B. effizient komprimieren? Es handelt 
sich leider um dauernd schwankende Messwerte mit sehr wenigen Mustern.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hast Du eigentlich eine Strategie, wie der angeschlossene PC mit dem 
Datenstrom zurechtkommen soll? Was soll der mit den anfallenden mehr als 
40 MByte/sec anfangen?

von Guido Körber (Gast)


Lesenswert?

Also erst mal kurz und knapp: Geht nicht!

Der USB ist keine serielle Schnittstelle über die man einfach so viele 
Bits pumpt wie man will. Da gibt es ein Protokoll und das verbraucht 
Bandbreite und beschränkt wie viel Bandbreite ein Gerät überhaupt 
belegen darf (in der Wikipedia habe ich gerade eine Diskussion mit einer 
Flachzange die das nicht begreift...).

Unter kontrollierten Testbedingungen kann man nachweisen, das ca. 48MB/s 
transferiert werden können. In der Praxis haut das aber nicht hin, da 
das Betriebssystem nun mal noch andere Dinge zu tun hat als nur am USB 
zu lauschen. Mit viel Feintuning kommt man auf etwa 40MB/s, damit ist 
aber auch Essig wenn mehr Geräte auf dem Bus sind.

von Tom (Gast)


Lesenswert?

okok... 48MB/s geht also nicht.
24MB/s ist aber möglich.
Muss reichen.
Mehr würde zwar mit Firewire gehen, aber dafür habe ich erst recht keine 
Lösung gefunden.

von Christian R. (supachris)


Lesenswert?

Firewire: www.orsys.de gibts nen fertiges Modul. Kann 32MByte/s isochron 
streamen.
Aber Vorsicht, sowohl bei USB als auch bei FW hat man im schnellen 
isochronen Mode keinerlei Flusskontrolle o.ä.
Datenpakete können schon mal verlören gehn.

von Tom (Gast)


Lesenswert?

Keine Flusskontrolle?
Und wie schafft es dann meine externe Festplatte 30-40MByte/s fehlerfrei 
zu übertragen?
Könnte ich ev. einen dafür gedachten Chip missbrauchen indem ich einfach 
so tue als wäre mein Messgerät ein externes Laufwerk mit einer einzigen 
Datei mit gefälschter Größenangabe und wenn ich die Datei kopieren will 
startet die Messund und die Daten (1-2GiB) werden eben nicht von einer 
Festplatte übertragen, sondern frisch erzeugt...

von Arc N. (arc)


Lesenswert?

> Könnte ich ev. einen dafür gedachten Chip missbrauchen indem ich einfach
> so tue als wäre mein Messgerät ein externes Laufwerk mit einer einzigen
> Datei mit gefälschter Größenangabe und wenn ich die Datei kopieren will
> startet die Messund und die Daten (1-2GiB) werden eben nicht von einer
> Festplatte übertragen, sondern frisch erzeugt...

Ja, AppNotes gibt's dazu eigentlich von allen Herstellern (wobei sich 
die Auswahl an Hi-Speed-fähigen Controllern in Grenzen hält).
Man könnte auch einen 08/15 USB<->IDE-Adapter nehmen, wenn das einfacher 
ist...
oder sowas ISP1581 (TQFP) und 1582/83 (QFN)
http://www.nxp.com/#/pip/cb=[type=product,path=50803/53481/47806,final=ISP1581-06]|pip=[pip=ISP1581-06][0]
bzw.
http://www.nxp.com/#/homepage/cb=[type=product,path=/50803/53481/47806]|[5]

von Christian R. (supachris)


Lesenswert?

Die Festplatten laufen asynchron oer im Interrupt-Transfer. Allerdings 
kenne ich keine universellen Controller, die diese Geschwindigkeit 
schaffen. Ich nehme an, diese ATA-Controller sind FPGAs oder sowas, die 
das Protokoll in Hardware machen, deshalb sind die so schnell.

Die Idee mit der virtuellen HDD hatte ich auch schon mal, braucht man 
aber nen recht schnellen FPGA, der das ATA-Protokoll simuliert.
Dann kann man z.b. den leicht verfügbaren Cypress 68300 nehmen.

von Guido Körber (Gast)


Lesenswert?

Festplatten am USB laufen im Bulk-Transfer, das ist ein Modus mit 
gesicherter Übertragung, aber ohne gesicherte Übertragungszeit.

Grundsätzlich kann der USB immer nur pünktlich oder sicher, nicht 
beides.

von Alexander L. (lippi2000)


Lesenswert?

Aber du kannst die Daten vorher Puffern. Also bei USB ist es üblich, 
dass möglichst viele Daten in einem Rahmen übertragen werden (1ms oder 
125us bei USB 2.0). Würden immer nur 8Bit übertragen, kommt man niemals 
auf die bandbreite. Also Puffern und anschließend in großen Paketen 
senden. Vielleicht kann man die Pakete vorher noch lauflängen Kodieren 
(worst case: 1010101010....Kompremierung=0%) oder vorher sogar noch mit 
Differenzwerten arbeiten (ähnlich wie bei MPEG z.B. ein original dann 5 
differenz und wieder 1 original usw.)

Wenn du absolut nicht bis auf 24Mbyte/s runter kommst, dann funktioniert 
der Isochrone Transfer nicht und du kannst nur noch auf USB 2.0 
wechseln. Aber selbst da kommst du nur auf diese Datenraten, wenn du 
große Blöcke verschickst.

Gruß Alexander

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.