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!
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.
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?
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
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?
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.
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.
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.
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...
> 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]
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.
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.
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