Hi, ist es problemlos möglich bei einem ARM7 Prozessor alle 1ms 64Byte Daten über USB (Interrupt Modus) pro Endpoint zu versenden? Ist der Prozessor in so einem Fall schon ziemlich ausgelastet (z.B. 3 Endpoints und 3 Inpoints) oder ist es möglich SPI, LCD oder ähnliches noch anzusprechen? Warum gibt es bei verschiedenen ARM7 Modellen von Atmel Einschränkungen in der Anzahl der USB Endpoints? Dirk
hab hier einen LPC2468 am Laufen - und dieser sendet alle 125ms USB-Daten. Nebenbei kann er immer noch einige andere Sachen durchführen. Aber das 1ms Intervall ist sehr kurz gewählt, glaub nicht, dass das ein Cortex schaffen wird. Vor allem wenn innerhalb des 1ms noch ein Zugriff auf SPI erfolgen soll um mögliche Daten anzunehmen bzw. zu überprüfen ob welch da sind. Gruß Patrick
Alexander S. schrieb:
> Das Zauberwort heißt wohl DMA ;)
für SPI - und dann sollte das ganze mit einem ARM7 funktionieren? Hast
du schon Erfahrungen sammeln können mit dem USB-Interface bei ARM7s und
dessen Systemauslastung?
Gruß
Dirk
Problemlos möglich. Hab ca 800 - 900 kb/s mit einem SAM7 per Bulk Endpoint geschafft. Du willst ja nur 64 kb/s
Karl schrieb: > Problemlos möglich. Hab ca 800 - 900 kb/s mit einem SAM7 per Bulk > Endpoint geschafft. Du willst ja nur 64 kb/s und der Overhead der entsteht, weil ich gern 3-4 verschiedene Endpoints haben möchte, die jeweils 64kB/s (also insgesamt 256KB/s) ist auch relativ gering? Die von dir genannten 800-900 kB/s sind aber nur mit einem Endpoint zu schaffen und nicht mit mehreren, oder? Wie hast du diese Übertragungsrate gemessen? Einfach Daten vom Controller zu einem Rechner und zurückgeschickt oder der gleichen? Wie stark ist ein ARM7 bei einer solchen Datenrate gefordert - sind andere Sachen wie das Ansprechen einer SPI- oder I2C Schnittstelle möglich? Wieviel Zeit / Abarbeitungszeit nimmt so ein USB-Stack ungefähr in Anspruch? Gruß Dirk
Is schon ne Weile her... Gibts für die Enpoints eigene Interrupts? Dann ist der Overhead relativ gering. Aber auch sonst sollte das nicht allzu lange dauern. Gemessen hab ich, indem ich ständig 10 kB Blöcke vom Controller zum PC geschickt hab und dann auf dem PC über einige von diesen Blöcken gemittelt die nötige Zeit berechnet hab. Genaue Laufzeiten zum Stack kann ich leider nicht bieten, der µC langweilt sich aber nicht vollständig ;) SPI oder I²C sollte mittels DMA kein Thema sein, das läuft dann fast umsonst mit.
Karl schrieb: > Gibts für die Enpoints eigene Interrupts? davon hab ich bis jetzt noch nichts gehört: inwiefern wird dieser Interrupt ausgelöst? Dann wenn der Host nach Daten frägt? Karl schrieb: > Genaue Laufzeiten zum Stack kann ich leider nicht bieten, der µC > langweilt sich aber nicht vollständig ;) Welchen Controller hast du genau dafür eingesetzt? Gibt es da große Unterschiede (bis jetzt hab ich mich noch auf keinen festgelegt)? Karl schrieb: > SPI oder I²C sollte mittels DMA kein Thema sein, das läuft dann fast > umsonst mit. das klingt gut, weil wenn das ganze auf einem ARM7 laufen kann, brauch ich kein externes Memory oder SDRAM... Über SPI sollen die Daten geholt werden, die dann weiter über USB geleitet werden. Gruß Dirk
Dirk schrieb: > Karl schrieb: >> Gibts für die Enpoints eigene Interrupts? > davon hab ich bis jetzt noch nichts gehört: inwiefern wird dieser > Interrupt ausgelöst? Dann wenn der Host nach Daten frägt? > Datenblatt lesen ;) Hab beim SAM7 grad nochmal nachgesehen: Ein Interrupt für das USB Device, dann ein Register auslesen und darin sind 4 Bits für die 4 Endpoints -> praktisch kein Overhead > Karl schrieb: >> Genaue Laufzeiten zum Stack kann ich leider nicht bieten, der µC >> langweilt sich aber nicht vollständig ;) > Welchen Controller hast du genau dafür eingesetzt? Gibt es da große > Unterschiede (bis jetzt hab ich mich noch auf keinen festgelegt)? AT91SAM7S256, NXP sind traditionell schneller aus dem Flash, hatten aber kein DMA. Kann sich mittlerweile geändert haben, ziemlich sicher sogar. > Karl schrieb: >> SPI oder I²C sollte mittels DMA kein Thema sein, das läuft dann fast >> umsonst mit. > > das klingt gut, weil wenn das ganze auf einem ARM7 laufen kann, brauch > ich kein externes Memory oder SDRAM... Über SPI sollen die Daten geholt > werden, die dann weiter über USB geleitet werden. Also das geht mit bei 256 kB/s mit jedem ARM7, wenn sonst nichts großartiges ist.
Karl schrieb: > Also das geht mit bei 256 kB/s mit jedem ARM7, wenn sonst nichts > großartiges ist. es sind insgesamt zwei SPI Schnittstellen die mit Daten aufwarten für das USB Interface. Aber ansonsten ist nichts großartiges zu machen, ein paar Buttons auswerten und vielleicht ein Eeprom über I2C. Danke für deine Einschätzung!
einen deutlichen Performance-Gewinn erzielt man auch, wenn man nicht soviele Endpoints verwendet sondern diese lieber zusammenfasst zu einem. Das wären dann 256kB/s mit einem Endpoint -> und dann sind die beiden SPIs locker zu schaffen vom Controller, sowie auch das I2C (hier vielleicht mit DMA, da I2C ja sehr langsam ist)
danke für den Tipp, werd`s dann wohl auf nur einen Endpoint für Out und einen für In belassen; dann sollte es aber klappen mit der Performance... hoffentlich
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.