mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USB Problem - Senden von Device zu Host


Autor: Florian P. (flo_pa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,
Ich verwende einen AT91 und versuche über den Bulk - IN Endpunkt Daten 
an den Host zu verschicken, was allerdings nicht funktioniert (CDC ACM). 
Verwendeter Treiber ist usbser.sys. Senden vom PC zum USB - Device ist 
problemlos möglich.

Holt der Host die Daten selbstständig aus dem Bulk - IN - Endpunkt, oder 
muss man zuerst über den Interrupt - IN - Enpunkt eine Information an 
den Host verschicken dass Daten im Bulk IN bereit stehen?

Vielen Dank schon mal für Eure Hilfe,
Florian

Autor: Michael Brenner (mik81) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Bulk-IN-Transfer muss die Serielle Schnittstelle geöffnet werden und 
Daten von der Schnittstelle abgefragt werden. Erst dann fühlt sich der 
USB-Treiber veranlasst den Bulk-Puffer abzufragen.

Ob das ganze auch auf usbser.sys zutrifft kann ich allerdings nicht 
garantieren.

BTW: Beim AN2131 musste man noch das Byte-Count-Register schreiben, 
damit der  Controller wusste jetzt sind alle Daten zum Verschicken im 
Buffer sind

Autor: Marvin M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach meinem bescheidenen Wissen ist USB ein Single-Master Bus und der 
Host muss JEDEN Datentransfer initiieren.

Autor: Florian P. (flo_pa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die ankommenden Daten der seriellen Schnittstelle wurden in den Bulk - 
IN FiFo gelegt. Anschließend wird mit dem Flag "AT91C_UDP_TXPKTRDY" 
signalisiert, dass der FiFo beschrieben wurde und Daten zum abholen 
bereit liegen.

Woher bekommt der Host nun die Information, dass die Daten abgeholt 
werden müssen? Ist hierzu eine spezielle "Notification" über den 
Interrupt IN Endpunkt notwendig? Laut CDC ACM Spezifikation wird 
lediglich der Interrupt IN Endpunkt von Seiten des Host zyklisch 
gepollt.

Autor: Potter S. (potter68)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Florian,

ich mache gerade etwas ähnliches, allerdings mit einem PDIUSBD12. Den 
Interrupt-In-Endpunkt kannst Du völlig außen vor lassen. Das entspricht 
zwar nicht der Spezifikation aber es funktioniert trotzdem. Ich selbst 
habe bisher auch nur GET_LINE_CODING, SET_LINE_CODING und 
SET_CONTROL_LINE_STATE implementiert.

Wenn ich neue Daten in den Bulk-In geschrieben habe, dann muß ich 
lediglich über den Befehl ValidateBuffer() meinem D12 mitteilen, daß die 
Daten gültig sind und verschickt werden können. Beim nächsten In-Token 
holt sie dann der Host ab. Wie es aussieht liegt Dein Problem an anderer 
Stelle.

Gruß RalfH.

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.