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
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
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.
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
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
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
... 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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.