www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT91SAM7S256 - USB Durchsatzrate


Autor: Nobbie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe aktuell eine Applikation, wo der AT91SAM7S246 verbaut ist. 
Hierbei habe ich jetzt auch erstmals ein USB Interface implementiert. 
Das funktioniert soweit auch alles einwandfrei.
Mein Problem ist jetzt nur, dass ich bei Performancetests auf eine 
Datendurchsatzrate zwischen AT91SAM7S256 <--> PC von rund 75 kByte/s 
komme. Laut Datenblatt sollte er doch wesentlich mehr können.

Ich benutze den Bulktransfer mit zwei Endpoints. Jeder Endpoint hat eine 
max. Size von 64Byte.
Für die Performancemessung habe ich eine große Datei (ca. 15MByte) 
genommen und übertrage diese in große Blöcke (1024 Bytes).

Jetzt meine Frage:
Welche Durchsatzraten konnten ihr bei euch erreichen?
Es sollte doch eigentlich mehr gehen oder?


Danke
Nobbie

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

also ich erhalte mit:
 - AT91SAM7S64 und einem modifizierten CDC Example von Atmel. Es werden 
die Daten nur empfangen und nicht weiter verarbeitet. (2006-10-16)
 - dem usb_skel Treiber mit Linux 2.6.30
 - Blockgröße 64 Bytes
 - USB 2.0 Port, USB 1.1 Hub
beim schreiben auf den Bulk-In-Endpoint

640000 Bytes (640 kB) kopiert, 2,2505 s, 284 kB/s

Bei einer größeren Block Größe hängt sich die Firmware auf, das mag aber 
daran liegen, dass ich nicht den aktuellen Code von Atmel verwende und 
ich durch meine Änderungen den einen oder anderen Bug eingebaut habe. 
Oder auch, dass der skeleton Treiber die maximale Endpoint größe nicht 
beachtet.

Grüße,
  Thorsten

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mit einer modifizierten Version des Ur-USB-Stacks von Atmel ca. 
800 - 900 kiB geschafft. Die Änderungen haben sich hauptsächlich darauf 
beschränkt, die USB Interrupts einigermaßen sinnvoll zu nutzen. Auf dem 
PC wurde das mit libUSB unter Linux mit einem bulk endpoint erreicht.

Autor: Nobbie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

erst mal danke für eure Info.

Ich habe als PC einen WinXP PC mit ServicePack 2. Als PC USB Treiber 
habe ich auch libUSB.

Meine weitergehende Frage, wer besteimmt denn die effektive 
Durchsatzrate? Liegt das hier ausschließlich an schlecht programmierter 
Firmware oder wird die Durchsatzrate auch noch durch den USB Host + USB 
Treiber bestimmt?

Ich versuche momentan den Flaschenhals zu finden, um diesen eventuell 
noch zu weiten.

Wäre über weitere Infos sehr dankbar.

Danke und Gruss
Nobbie

Autor: Potter68 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Transfer-Typ spielt eine Rolle. Bulk ist der Schnellste mit 
Validierung. Bulk-Transfers werden aber nur ausgeführt, wenn die 
Schnittstelle gerade frei ist. D.h. wenn Du mehrere Geräte am Bus hängen 
hast, die immer mal wieder was senden/empfangen, dann merkt man das 
schon.

Gruß Potter

Autor: Nobbie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

sowas in der Richtung habe ich mir schon gedacht.
Ich glaube aber nicht, dass dies der primäre Grund ist.
Wenn ich sehe das Thorsten auf 284 KByte/s kommt, dann muss ich da noch 
einmal tiefer nachforschen. Ich schaffe gerade mal 1/4 davon.
Der einzigste Unterschied ist meine Paketgröße. Die ist > 1000Byte und 
wird aber immer in separate 64Byte Blöcke übertragen.

Problem ist halt, dass ich nicht genau weiß, wo der Flaschenhals ist. 
Soll ich zuerst mit der Firmware anfangen oder bremst mich der PC + 
libUSB aus.
Wäre für Ratschläge dankbar.

Danke
Nobbie

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... 800 - 900 kiB ...

Sind damit 800 bis 900 KByte gemeint?

---

Auf einem AT91SAM7S64 MSD mit SD-Card erreiche ich 300 KByte unter 
Windows XP.

Tipp: Mit der Firmware beginnen. Die gößten Gewinne habe ich bei der 
Umstellung auf DMA-Betrieb der SD-Card erhalten.

Autor: Nobbie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Markus,

ich weiß nicht nicht ob es ein Missverständnis ist, aber ich spreche von 
einer reinen USB Kommunikation zwischen ARM7 und PC.

Das mit dem DMA ist noch ein guter Ansatz. Ich weiß aber nicht aus dem 
Stehgreif ob der AT91SAM7 eine DMA Unterstützung für das USB Interface 
hat.

Gruss
Nobbie

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay Nobbie, hab's verstanden. DMA bezog sich auf das SPI-Interface

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.