Forum: Mikrocontroller und Digitale Elektronik USB ARM7 Endpoints und Performance


von Dirk (Gast)


Lesenswert?

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

von Patrick Niemeyer (Gast)


Lesenswert?

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

von Alexander S. (schroeder_90)


Lesenswert?

Das Zauberwort heißt wohl DMA ;)

von Dirk (Gast)


Lesenswert?

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

von Karl (Gast)


Lesenswert?

Problemlos möglich. Hab ca 800 - 900 kb/s mit einem SAM7 per Bulk 
Endpoint geschafft. Du willst ja nur 64 kb/s

von Dirk (Gast)


Lesenswert?

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

von Karl (Gast)


Lesenswert?

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.

von Dirk (Gast)


Lesenswert?

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

von Karl (Gast)


Lesenswert?

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.

von Dirk (Gast)


Lesenswert?

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!

von Bernd S. (mms)


Lesenswert?

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)

von Dirk (Gast)


Lesenswert?

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