Forum: Mikrocontroller und Digitale Elektronik USB power problem Hub


von Matthias B. (mbgg)


Lesenswert?

Hallo,

Ich habe ein embedded Device dass, wenn per USB Kabel an ein PC 
angschlossen wird, sich als USB mass storage device ausgibt.

Das Problem ist, dass wenn ich das Gerät über einen Hub an den PC 
anschliesse, manchmal die Datenübertragung fehl schlägt und das 
Dateisystem in meinem Gerät beschädigt wird.

Ich schätze, dass das an der zu geringen Stromstärke liegt, die dazu 
führt. Meine Frage ist nun, ob der Host oder das Device die zu niedrige 
Stromstärke erkennen sollte. Und wie der Host davon erfährt.

Ich habe leider keine Ahnung von den USB Protokoll Internas und weiss 
nicht wie Host und Device das untereinander aushandeln.

Tschüss,
Matthias

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Matthias Brugger schrieb:
> Meine Frage ist nun, ob der Host oder das Device die zu niedrige
> Stromstärke erkennen sollte. Und wie der Host davon erfährt.

Dem Host wird der Strombedarf vom Device mitgeteilt.

USB-Festplatten ohne eigene Stromversorgung aber halten sich nicht daran 
und nehmen erheblich höhere Ströme auf als überhaupt von der 
USB-Spezifikation vorgesehen.

Nimm einen Hub mit eigenem Netzteil, sofern Du das nicht sowieso schon 
tust.

von Εrnst B. (ernst)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Matthias Brugger schrieb:
>> Meine Frage ist nun, ob der Host oder das Device die zu niedrige
>> Stromstärke erkennen sollte. Und wie der Host davon erfährt.
>
> Dem Host wird der Strombedarf vom Device mitgeteilt.

Und weiter: Wenn der Host dann der Meinung ist, dass nicht genug Strom 
für das Device vorhanden ist, dann erteilt er dem Device garnicht erst 
die Erlaubnis überhaupt (nennenswert) Strom zu ziehen.

Auch vorgesehen wäre: Das Device bietet Verschiedene "Configurations" 
mit unterschiedlichem Strombedarf an, der Host wählt das aus, was noch 
funktionieren würde.

von Matthias B. (mbgg)


Lesenswert?

Vielen Dank für die Antworten.

Schlussendlich habe ich herausgefunden dass die Firmware dem Host 
garnicht mitgeteilt hat, wie viel Strom sie braucht. Deswegen hat der 
Host schön brav eine Kommunikation aufgebaut, obwohl nicht genug Strom 
vorhanden war.

Ich habe die Firmware geändert und jetzt scheint es wie gewünscht zu 
funktionieren.

MfG,
Matthias

von Thomas (Gast)


Lesenswert?

>Schlussendlich habe ich herausgefunden dass die Firmware dem Host
>garnicht mitgeteilt hat, wie viel Strom sie braucht.
das halte ich jetzt für unwahrscheinlich, da der Strombedarf im 
Devicedeskriptor steht.

Thomas

von Matthias B. (mbgg)


Lesenswert?

Thomas schrieb:
> das halte ich jetzt für unwahrscheinlich, da der Strombedarf im
> Devicedeskriptor steht.

Vielleicht hatte ich mich nicht richtig ausgedrückt. In dem Treiber, der 
die SCSI Befehle interpretiert und somit das Device emuliert gab es 
keinen Aufruf der vbus_draw Methode des OTG Gerätetreibers. Das wurde 
von darunterliegenden Schichten übernommen die anscheinend als 
Strombedarf 100 mA in den Devicedescriptor geschrieben haben. Zum 
besseren Verständnis, es handelt sich um einen USB-Gadget Gerätetreiber 
des Freescale Forks vom Linux Kernel.

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.