Forum: Mikrocontroller und Digitale Elektronik VUSB Interrupt transfers und AVR


von R. B. (dxx255)


Lesenswert?

Hallo
Kennt jemand ein Tutorial zur Kommunikation mit VUSB über Interrupt 
Endpoints? Oder irgendeine Erklärung dazu?
Ich verwende VUSB mittels controlmsg aber damit ist nur einseitige 
Kommunikation möglich oder? Ich meine kann ich damit auch Daten zum PC 
senden (ohne vorherige Anfrage)?
Danke im Voraus

von c-hater (Gast)


Lesenswert?

Roman B. schrieb:

> Ich meine kann ich damit auch Daten zum PC
> senden (ohne vorherige Anfrage)?

Das geht mit USB grundsätzlich nicht. Die Kommunikation muß immer vom 
Controller ausgehen.

von Max D. (max_d)


Lesenswert?

Der Interrupt-Endpoint hat einen etwas irreführenden Namen.
Er heißt so, weil er in dem ganzen USB-Stack am nähesten an einen 
Interrupt hinkommt. In Wahrheit wird er nur sicher alle x ms (von dem 
device vorgegeben) "gefragt" ob er neue Daten hat. Das zuständige 
Programm (bzw. Treiber, je nach OS und Applikation) muss ihn trotzdem 
selbstständig abfragen, er kriegt diese Abfrageraten nur reserviert.

von R. B. (dxx255)


Lesenswert?

Danke für die schnellen Antworten

Das bedeutet der slave kann Daten reinschreiben, wenn er sie hat, und 
kurz darauf wird der Stack automatisch abgefragt und der Master liest 
sie aus? Hab ich das richtig verstanden? Gibt es irgendwo eine genauere 
Erklärung in Zusammenhang mit VUSB? Gibt es überhaupt irgendwo eine VUSB 
Dokumentation?

Kurze Zusatzfrage: Bulk Transfers sind nicht möglich mit VUSB oder?

von Max D. (max_d)


Lesenswert?

Roman B. schrieb:
> Danke für die schnellen Antworten
>
> Das bedeutet der slave kann Daten reinschreiben, wenn er sie hat, und
> kurz darauf wird der Stack automatisch abgefragt und der Master liest
> sie aus? Hab ich das richtig verstanden? Gibt es irgendwo eine genauere
> Erklärung in Zusammenhang mit VUSB? Gibt es überhaupt irgendwo eine VUSB
> Dokumentation?
>
> Kurze Zusatzfrage: Bulk Transfers sind nicht möglich mit VUSB oder?

Bulk transfers verletzen bei low-speed geräten (und nur diese kann man 
in software nachamchen) die USB Spezifikationen. Es gibt aber einige 
Projekte die das trotzdem (und mit erfolg machen). Ob es bei dir geht 
hängt von deinem Setup ab; Es ist wahrscheinlich, muss aber nicht.

von Holger L. (max5v)


Lesenswert?

http://vusb.wikidot.com
Ist schon ziemlich informativ.
Und zur Not gibt es noch Google, dort findet man eine Menge zu dem 
Thema.
Nach libusb könntest du auch noch schauen, die gibt es für verschiedene 
Plattformen.

von R. B. (dxx255)


Lesenswert?

Danke!! Ich benutze libusb war aber zu blöd die Dokumentation 
aufzurufen?! Damit wäre das hostseitige Problem gelöst aber gibt es auch 
eine Beschreibung der VUSB Funktionen? In dem Wiki ist zwar die einfache 
Verwendung beschrieben aber nicht gerade ausführlich.

Mit getInterruptData lese ich die Daten in den AVR ein und mit 
setInterrupt sende ich welche an den PC. Stimmt das so? Oder sende ich 
Daten mit processInterruptOut2Data? Wieviel Interrupt Endpoints kann 
VUSB verwalten? Muss man die Endpoints irgendwie definieren und dem Host 
bekannt machen oder reicht es die Nummer mitzuschicken?

von R. B. (dxx255)


Lesenswert?

Gehe ich richtig in der Annahme, dass bei Interrupt Transfers der Client 
selbst entscheiden kann, wann er die Daten abgreift und antwortet?

von R. B. (dxx255)


Lesenswert?

Wie groß ist der USB Stack?

von R. B. (dxx255)


Lesenswert?

Wäre es theoretisch möglich mittels Interrupt Transfers eine Art getc 
und putc Funktion zu schreiben, die sich mit fdevopen einbinden lässt? 
Geht das? Wäre das eine gute Vereinfachung oder hat das irgendwelche 
Nachteile?

von R. B. (dxx255)


Lesenswert?

Weiß niemand Rat?

von c-hater (Gast)


Lesenswert?

Roman B. schrieb:

> Weiß niemand Rat?

Faulheit besiegen! Mehr lesen!

Was es über V-USB zu wissen gibt, steht als Kommentar in den Quelltexten 
und im Quelltext selbst.

Was es über USB im Allgemeinen zu wissen gibt, steht in der USB-Doku.

Hättest du diese beiden frei verfügbaren Quellen wirklich gelesen, 
könntest du dir alle deine Fragen direkt selber beantworten.

Ich z.B. habe beides gelesen (nicht nur einmal), sehe aber keine Grund 
zur Veranlassung dafür, dir eine Nacherzählung des Stoffs zu liefern, da 
du offensichtlichen durchaus selber lesen kannst, es nur nicht 
willst.

Warum sollte man solche parasitäre Faulheit noch unterstützen?

von R. B. (dxx255)


Lesenswert?

Ich erwarte mir keine Nacherzählung, habe aber gehofft es gäbe einen Weg 
mir das zu ersparen.
Danke trotzdem

von R. B. (dxx255)


Lesenswert?

Ich hab mir das jetzt durchgelesen:
-VUSB kann 2 Endpoints verwalten(1&3)
-usbFunctionWriteOut --> zum einlesen
-usbSetInterrupt --> zum senden an den PC
-Stack-Größe 8 Bytes
-Stack wird manuell gelesen und anschließend entleert
      -auf PC Seite manuelles lesen mit usb_interrupt_read
      -am µC wird  automatisch usbFunctionWriteOut aufgerufen

Stimmt das so?

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.