Forum: Mikrocontroller und Digitale Elektronik AT91SAM7S256 - USB Durchsatzrate


von Nobbie (Gast)


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

von Thorsten (Gast)


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

von Karl (Gast)


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.

von Nobbie (Gast)


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

von Potter68 (Gast)


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

von Nobbie (Gast)


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

von Markus (Gast)


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.

von Nobbie (Gast)


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

von Markus (Gast)


Lesenswert?

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

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.