mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Grundsätzliche Fragen zu USB (AT91SAM7XC256)


Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe mal wieder eine Frage und zwar zum Thema USB. Vielleicht kennt 
sich hier ja jemand nen bisschen damit aus.

Ich möchte einen Mikrocontroller (AT91SAM7XC256) per USB an den PC 
anschliessen.
Dabei soll man dann über den PC IO's am Controller auslesen und setzen 
können.

Welches "Protokoll" von USB nimmt man für so etwas? Macht man so etwas 
dann einfach mit diesem Virtualcom protokoll? aber dann hat man doch nur 
ne Bandbreite von maximal 128000 Baud oder? Oder nimmt man für so etwas 
dieses HID (das dingen für Eingabegeräte) ? Oder ein ganz anderes?

Vielleicht kann mir einer erklären wie man das ganze am besten aufbaut 
und was die Unterschiede der Protokollarten sind?

Ich habe mir auch schon beispiele von Atmel angeschaut, dort wird diese 
Serialgeschichte genutzt. Dabei wird aber auch der USART0 und ein Timer 
benutzt. Beides habe ich schon verbraucht. Muss man, wenn man die USB 
geschichte als Virtual Com aufbaut, beim Mikrocontroller mit einem USART 
arbeiten? Im Prinzip habe ich noch den zweiten USART frei aber ich hatte 
nun eigentlich gehofft das USB eigenständig laeuft.


Also wäre nett wenn mir jemand ein paar Hintergrundinfos zu USB geben 
kann und mir sagen könnte welches USB Protokoll ich in meinem Fall 
nutzen sollte.

Vielleicht kann mir auch einer in kruzen und klaren worten erklären wie 
das ganze mit den Endpoints etc zusammenhängt. Ich hatte mal gelesen, 
dass der AT91SAM7X eienn Buffer von 64 Byte bei den Endpoints hat. Das 
heißt also ein Frame kann bei mir maximal 64 Byte groß sein? Dann muss 
ich die Daten schnell verarbeiten und den Buffer wieder leeren und dann 
können da wieder neue Daten rein oder?

Ich hoffe es kann mir jemand ein kleines bisschen die USB geschichte 
verdeutlichen und hat eventuell sogar ein minimal Beispiel für meinen 
Controller (AT91SAM7XC256) zur hand ohne riesen drum herrum.


Vielen Dank für eure Hilfe!

Gruß Jens



Ahja: entwicklungsumgebung ist KEIL µVision....die meisten Beispiele 
sind ja leider für IAR aber vll hat auch jemand was für KEIL parat.

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo jens,
um einen einstieg in die usb "geschichte" zu kriegen kann ich dir den 
folgenden link empfehlen:
http://www.beyondlogic.org/usbnutshell/usb-in-a-nutshell.pdf

um einie deiner fragen zu beantworten:
für deine zwecke benötigst du den uart natürlich nicht, was soll der 
auch mit den ports?

als "protokoll" würde ich dir hid für den einstieg empfehlen (falls das 
schnell genug ist).

gruss
gerhard

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gerhard,
danke für deine Antwort!

Ich habe mir das Dokument mal durch gelesen, das gibt schon einen guten 
Überblick und Einstieg in die USB-Welt.

Du sagtest das du mir das HID Protokoll empfehlen würdest wenn es 
schnell genug ist....Leider habe ich in dem Dokument auch noch nichts 
darüber gefunden wie schnell diese unterschiedlichen "Protokolle" 
arbeiten....

Das sind ca. 128 Bytes + 320 Bytes + 64 Bytes = 512 Bytes Daten die vom 
Gerät an den PC gehen und ca. 704 Bytes die vom PC an das Gerät gehen 
sollen. (kann eventuell noch mehr werden, das sind nun reine Nutzdaten)

Wie schnell ist denn das HID Protokoll?

Sehe ich das Richtig wenn ich diese Endpoints als Interrupt einstelle 
und ein Endpoint 64 Bytes speichern kann dann überträgt er bei jedem 
Interruptzyklus ... sagen wir mal jede Millisekunde ... die 64 Bytes 
Daten? Und ich kann dann nach jedem Interrupt einfach andere Daten in 
diesen Endpoint schreiben die er dann übertragen soll? Bzw. auf der PC 
seite muss ich dann ja auch irgendwelche Daten in einen Endpoint 
schreiben der dann zyklisch vom PC übertragen wird. Stimmt das so?

Wobei natürlich auch fürs senden der PC erst eine Anfrage sendet und der 
Controller automatisch darauf antwortet mit den aktuellen Daten die er 
im Endpoint hat.

Wie schnell ist denn diese Interruptgeschichte und das HID "Protokoll" ? 
Ich wollte das Gerät dann als FullSpeed USB laufen lassen. Ich kann doch 
dann Einstellen in welchem Zyklus der Interrupt ausgelöst werden soll 
oder wird er an der maximalen Busgeschwindigkeit angepasst? Der arme 
Mikrocontroller soll ja die USB Kommunikation nebenbei machen und nicht 
hauptsächlich.

Ich hoffe du kannst mir die Fragen auch noch beantworten.

Vielen Dank für deine Hilfe schon einmal im vorraus.

Gruß Jens

Autor: Guido Körber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interrupt Transfers können bei Full Speed jede Millisekunde bis zu 64 
Byte transportieren. Bei Low Speed wären es theoretisch 8 Byte alle 
10ms, praktisch alle 8ms, da die Betriebssysteme alle einen 8ms Zyklus 
fahren wenn das Gerät 10ms als Minimum angibt.

Diese Datenmenge bezieht sich auf einen einzelnen Endpoint, mit mehreren 
Endpoints kann man entsprechend mehr transportieren.

Autor: Termite (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin

noch etwas anzumerken zu hid.

der PC. (windows) pollt in einer definierten zeit den hid endpoint und 
fragt dort daten ab. Diese daten speichert windows dann zwischen. Es ist 
jetzt sache deiner applikation diese rechtzeitig aus dem puffer 
abzuholen. wenn nicht werden diese ggf durch neue daten überschrieben. 
Die Zeit in der Windows Pollen soll kann man zwar im deskriptor angeben, 
doch hält sich windows nicht umbedingt zwingend daran.

dein kontroller hat im USB betrieb nie eine aktive rolle. er hat immer 
nur die Anfragen des PCs Host zu beantworten. Und wenn dies ein nak, 
busy oder sonst was ist.

Hid hat halt den vorteil, das man relativ einfach über windows File IO 
operationen darauf zugreifen kann, ohne gleich eigene Treiber zu 
implementieren (beispiele gibts genug im netz). Was auch teilweise für 
anderen Standard classen gilt. (MassStorage, Virtual Com, ... )

gruss

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.