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


von Florian P. (flo_pa)


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

von Michael B. (mik81) Benutzerseite


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

von Marvin M. (Gast)


Lesenswert?

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

von Florian P. (flo_pa)


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.

von Potter S. (potter68)


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.

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.