Forum: Mikrocontroller und Digitale Elektronik AT91SAM7X USB Datenrate


von Frank (Gast)


Lesenswert?

Hallo,

ich möchte in einem Projekt zur Datenerfassung die USB-Schnittstelle des 
ARM 7 Controller AT91SAM7X als Interface zum PC nutzen. Die 
Datenerfassungsplatine mit dem ARM besitzt einen großen Speicher (ca. 
256MB oder mehr) deshalb möchte ich wegen der geringen Geschwindigkeit 
keine virtuelle COM-Schnittstelle implementieren.

Fragen:
1. Welche Device Class wäre zu empfehlen? Ich möchte dabei unbedingt auf 
etwas wie z.B. dem USB-Framework von Atmel aufbauen.
2. Welche Datenrate kann man dann erwarten.

Danke und Gruß

- Frank

von Frank (Gast)


Lesenswert?

Kennt sich damit wirklich niemand aus? Gebt Euch doch mal 'nen Ruck - 
Ihr wisst's ;-)

von Til (Gast)


Lesenswert?

1. Die Frage ist, wo du dir wieviel Arbeit machen willst, du musst ja 
dann auch nen Treiber für die Windows Seite haben. Für CDC, MSD und so 
gibts natürlich Windows Standard USB Treiber, aber ich würde dir eher 
BULK Transfer empfehlen. Willst du denn unbedingt alles selber 
programmieren oder auch Middleware kaufen? Ich weiß, das SEGGER 
(www.segger.com) nen sehr guten USB Stack hat, mit allem drum und dran 
und narrensicher zu benutzen. Kostet so um die 1600,- Euro. 
http://segger.com/emusb.html

von Frank (Gast)


Lesenswert?

@ Til: Danke für die Antwort!

Geld wollte ich für die Software eigentlich nicht ausgeben. Welche 
Datenraten kann man denn mit den zur Verfügung gestellten Klassen 
erreichen?

von Christian R. (supachris)


Lesenswert?

Naja, der hat doch eh nur FullSpeed....da wird 256MByte Daten auslesen 
sehr lustig. Bau doch lieber einen Cypress FX2 an die Kiste, da hast du 
sehr simpel Bulk-Datentransfer bis zu 40 MByte/s je nach PC.

von Robert T. (robertteufel)


Lesenswert?

@Frank,
dir ist schon klar dass 256MB selbst bei theoretischem Betrachten 
mehrere Minuten dauert!?
Realistisch mit einem guten Stack und der PC macht in der Zeit nichts 
anderes ueber USB sind im Bereich von 500 kB / sec, das waeren also > 8 
Minuten.
Es geht allerdings auch VIEL langsamer wenn die Implementierung nicht so 
dolle ist.
Robert

von gerhard (Gast)


Lesenswert?

>Ich weiß, das SEGGER
>(www.segger.com) nen sehr guten USB Stack hat, mit allem drum und dran
>und narrensicher zu benutzen. Kostet so um die 1600,- Euro.
den preis kann ich mir beim besten willen nicht vorstellen.
vor allem wenn man weiß das der stack von hier "stammt" (wie auch der 
von IAR):
http://www.micrium.com/products/usb/usb-device/overview.html

und die preisliste von micrium weist "etwas" höhere beträge aus.

gruss
gerhard

von Frank (Gast)


Lesenswert?

@Robert,

nein Robert, das ist mir nicht klar - genau das ist die Frage - also 
warum geht's nicht schneller? Was wäre die Lösung? Also mir wären 
Erklärungen lieb, wenn alles klar wäre, würde ich das Thema nicht ins 
Forum stellen. Vorschläge sind also herzlich willkommen.

Gruss

- Frank

von gerhard (Gast)


Lesenswert?

@frank:
welche "wunderdinge" erwartest du dir den von einem usb full speed 
device?

gruss
gerhard

von Ulrich P. (uprinz)


Lesenswert?

Also Du musst jetzt mal etwas genauer entscheiden, was Du willst.
Das CDC Device ist recht leicht implementiert und wird von ATMEL als 
Grundegrüst schon mitgeliefert. Es kommt ohne Windows-Seitigen Treiber 
aus, jedenfalls ohne einen, den man erst selber schreiben muss.
Dafür kann man vermutlich nur eine theoretische Datenrate von 12MBit 
erreichen, die durch Framing und andere Overheads wohl eher bei 7..9Mbit 
liegt. Das sind geschätzte und gerundete 8MByte/s. Die Übertragung 
Deiner 256MB würden damit 32s dauern. Wenn Du damit leben kannst, dann 
ist das der einfachste Weg.

Ein Missverständnis ist beim CDC Device ( COM-Port via USB), dass die 
USB Datenrate mit der für die Schnittstelle eingestellten Datenrate 
überein stimmt. Die Datenrate des virtuellen COM-Ports definiert die 
Rate des am USB angeschlossenen UARTs aber nicht die des USBs. Der USB 
sendet immer mit der Geschwindigkeit seiner eigenen Klasse, also 
1Mbit/12MBit... 470?Mbit

Das CDC Device kann auch effektiv oder langsam genutzt werden. Man kann 
jedes einzelne Byte in ein USB Frame packen und versenden. Das erzeugt 
jede Menge Overhead und bremst ein 12Mbit Device vermutlich auf 500kByte 
herunter. Besser ist es da, sein CDC Device so zu implementieren, dass 
immer vollständige Frames gepackt werden, die nur einmal Overhead 
erzeugen.

Ein einfacher Weg große Datenmengen komfortabel zu übertragen kann aber 
auch das Memory-Device sein ( weiß die Abkürzung jetzt nicht). Dazu 
emulierst Du ein Pseudo-Dateisystem, dass Deine Messwerterfassungs-Datei 
abbildet. Du ziehst dann im Explorer Deine Messwertdatei einfach 
irgendwo hin und es wird kopiert. Ob Du das Schreiben auch 
implementierst, oder das ganze als ReadOnly machst und per Knopfdruck an 
Deinem gerät die Datei löschst / auf Länge 0 setzt, das ist Deine 
Entscheidung. Auch dazu gibt es ein Code-Gerüst von ATMEL zum Download 
für die AVR, ARM7 und ARM9.
Auch hier ist kein spezieller Treiber auf der Windows Seite nötig.

Leider gibt es bei den Klassen von Windows einige Probleme, weswegen es 
vom Hörensagen her nicht geht über einen Device Port ein Memory und ein 
CDC Device gleichzeitig abzubilden. Hier muss dann ein eigener Treiber 
geschrieben werden. Du musst also entscheiden, ob Du nur die Daten 
übertragen willst, oder ob Du das gerät auch über diesen Port steuern 
willst.

Grundsätzlich ist zum USB noch zu sagen, dass es ein Zeitmultiplex 
System ist. Alle angeschlossenen geräte teilen sich die Bandbreite. Ergo 
ist verschieben von Daten auf einem USB-Bus stark davon abhängig, wer da 
noch so alles dran hängt.

Gruß, Ulrich

von gerhard (Gast)


Lesenswert?

@ulrich:
>Dafür kann man vermutlich nur eine theoretische Datenrate von 12MBit
>erreichen, die durch Framing und andere Overheads wohl eher bei 7..9Mbit
>liegt. Das sind geschätzte und gerundete 8MByte/s.
kann es sein, daß du da bit und byte ein bischen durcheinander bringst?

und eines ist auch sicher, der overhead einer usb verbindung ist sicher 
größer als deine geschätzten 25%.

mein tipp für alle die nicht die zeit haben sich mit 600 seiten usb 
spezifikation zu beschäftigen:

http://www.beyondlogic.org/usbnutshell/usb-in-a-nutshell.pdf

gruss
gerhard

von Til (Gast)


Lesenswert?

> >Ich weiß, das SEGGER
> >(www.segger.com) nen sehr guten USB Stack hat, mit allem drum und dran
> >und narrensicher zu benutzen. Kostet so um die 1600,- Euro.
> den preis kann ich mir beim besten willen nicht vorstellen.
> vor allem wenn man weiß das der stack von hier "stammt" (wie auch der
> von IAR):
> http://www.micrium.com/products/usb/usb-device/overview.html
>
> und die preisliste von micrium weist "etwas" höhere beträge aus.
>
> gruss
> gerhard

Es ist relativ uninteressant was du dir vorstellen kannst oder nicht, 
schau doch einfach bei Segger auf die Website, da stehen die Preise, die 
sind doch kein Geheimnis und du musst dir nichts vorstellen ;-).

Wieso stammt der Segger USB Stack von Micrium? Wie kommst du da drauf?
Und wenn du von IAR redest, meinst du wohl das IAR PowerPac, und du 
meinst, das kommt von Micrium?? ;-)

von gerhard (Gast)


Lesenswert?

>Es ist relativ uninteressant was du dir vorstellen kannst oder nicht,
>schau doch einfach bei Segger auf die Website, da stehen die Preise, die
>sind doch kein Geheimnis und du musst dir nichts vorstellen ;-).
wenn ich mir die segger-preisliste ansehen dann sehe ich, das ich um 
1600€ die "USB core component" bekomme und damit eigentlich nichts 
anfangen kann.
die "emUSB MSD component" kommt noch dazu (750,-€). und vermutlich werde 
ich auch einen "emUSB target driver AT91SAM7X" benötigen (650€).
noch fragen zum thema kosten?

>Wieso stammt der Segger USB Stack von Micrium?
>Wie kommst du da drauf?
ist anhand der vorhandenen sourcecode auszüge und der tatsache, das 
micrium den usb stack schon länger anbietet, naheligend.

>Und wenn du von IAR redest, meinst du wohl das IAR PowerPac, und du
>meinst, das kommt von Micrium?? ;-)
wer den iar stand auf der embedded world sich genau angesehen hat kann 
das wohl bestätigen.

gruss
gerhard

von Frank G. (embedded-os)


Lesenswert?

Also bei der ganzen Diskussion über USB-speed denke ich, wer bis ins 
letzte Detail wissen will warum netto keine 12Mbit fullspeed übrig 
bleiben, sollte wohl doch mal die USB-spec. genauer lesen.
Da gibts alles zu "Transfers", "Transactions", "Packets" , ACK/NAK, SOF, 
EOP-times, Idle-times usw...
Wer dann auch noch verstanden hat, daß jedes Paket (64byte üblich bei 
Bulk-EPs) in ein Framing verpackt ist, mit 12Mbit phys. übertragen wird, 
gehandshaked wird und dann die Pause beginnt, die die meinsten Vergessen 
- der Absender muß das nächste Paket bereitstellen / der Empfänger muß 
das Paket verdauen - kann selbst errechnen, was netto bleibt.
Und wenn dann die Software noch "ne" Aufgabe bekommt wie TCP/IP bricht 
dieser Wert weiter ein (siehe bereitstellen/verdauen).
Also meine Erfahrung besagt, es sind bis zu netto 6,5Mbit erreichbar bei 
DMA-support am USB und "fast" ohne zuätzliches Protokoll wie MassStorage 
mit hervorragender FTL. Alle anderen Use-cases lagen darunter.
Wer dann den Protokoll-Overkill sucht nimmt RNDIS (44byte overhead) + 
Ethernet + TCP/IP + Applikation. Oder man macht es wie einige 
USB-seriell Adapter, die jedes Byte einzeln in USB-Frames verpacken und 
transportieren.

Und wer nun eindeutig mehr netto-speed braucht sollte sich für 
USB-highspeed mit 480Mbit brutto entscheiden (bereitstellen/verdauen - 
also CPU-speed aber nicht vergessen).

von Til (Gast)


Lesenswert?

> wenn ich mir die segger-preisliste ansehen dann sehe ich, das ich um
>1600€ die "USB core component" bekomme und damit eigentlich nichts
> anfangen kann.
>die "emUSB MSD component" kommt noch dazu (750,-€). und vermutlich werde
>ich auch einen "emUSB target driver AT91SAM7X" benötigen (650€).
>noch fragen zum thema kosten?

Ja, das das nur die Core Komponente ist, gebe ich dir recht, klar, 
brauchste noch Bulk oder was auch immer und nen Treiber. Ging mir ja 
auch mehr um die Aussage das der Stack von Micrium ist und deine 
Argumentation dafür ;-).

> ist anhand der vorhandenen sourcecode auszüge und der tatsache, das
> micrium den usb stack schon länger anbietet, naheligend.
Das mit den Sourcecodeauszügen musst du mir mal näher erklären, was du 
da meinst. Micrium bietet den schon länger an...glaub ich irgendwie 
nicht...;-)... aber lass dich bitte nicht von mir ärgen, ich bin da wohl 
etwas näher dran.

> wer den iar stand auf der embedded world sich genau angesehen hat kann
> das wohl bestätigen.
Auch das würde ich dich bitten etwas näher zu erklären, ich habe mir den 
Stand auch recht genau angesehen (hab auf dem Stand nebenan 
gearbeitet... ich denke wir verstehen uns jetzt ;-) )

gruss
Til

von Karl (Gast)


Lesenswert?

>Also meine Erfahrung besagt, es sind bis zu netto 6,5Mbit erreichbar

Kann ich nur bestätigen, auf einem AT91SAM7S256 habe ich auch knapp über 
800 kB/s erreicht. Bulk mit libusb "Treiber". Der µC ist dann aber auch 
schon gut beschäftigt.

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.