Forum: Mikrocontroller und Digitale Elektronik Automatisch USB erkennen


von Hans (Gast)


Lesenswert?

Hallo.

Ich verwende das USB Modul vom xmega und frage mich jetzt, wie ich 
erkennen kann, ob das USB-Kabel an einem Host (also kein Ladegerät) 
eingesteckt ist. Ich möchte nämlich nur dann die USB-Routinen 
aktivieren, da die ziemlich stromschluckend sind. Der xmega darf während 
dessen nämlich offenbar nicht in den power-save sleep gehen, sondern 
maximal in den idle. Bei einem batteriebetriebenem Gerät geht das aber 
nicht dauerhaft.

Leider habe ich keinen Messpunkt für VBus. Kann ich irgendwie an D+ und 
D- erkennen, ob ein Host angeschlossen ist?

von Harald A. (embedded)


Lesenswert?

Vlt. so: Du wertest die 5V vom Host aus und wartest z.B. 10sec, ob sich 
ein connected-Status einstellt. Falls nicht deaktivierst Du Deine 
USB-Routinen und wartest bis zur nächsten Flanke 5V erkannt. Ja, etwas 
hintenrum, aber das sind die typischen Infos, die man vom Treiber ohne 
großen Aufwand bekommt.

Ah, sehe gerade, Du hast keinen Messpunkt für die 5V - zu spät gelesen. 
Aber dann baue Dir doch einen, muss ja nicht analog sein.

: Bearbeitet durch User
von Thomas Z. (usbman)


Lesenswert?

Der Host zieht üblicherweise beide Datenleitungen über 15k nach GND. 
Wenn bei deinem Chip D+ und D- als Portpins verwendbar sind könnte man 
das auswerten.
Ist der Connect Widerstand bei dir per Software zuschaltbar?

von Hans (Gast)


Lesenswert?

Thomas Z. schrieb:
> Der Host zieht üblicherweise beide Datenleitungen über 15k nach GND.
> Wenn bei deinem Chip D+ und D- als Portpins verwendbar sind könnte man
> das auswerten.
> Ist der Connect Widerstand bei dir per Software zuschaltbar?

Ja. Und noch interne PUs und PDs mit jeweils 25k. Man könnte evtl. 
schauen, ob ein PU von den Host 15k unter die digitale Schaltschwelle 
gezogen wird. Schön ist das nicht, aber könnte funktionieren.

von Thomas Z. (usbman)


Lesenswert?

Hans schrieb:
> Und noch interne PUs und PDs mit jeweils 25k

Die werden wohl schaltbar sein oder? Solange der Host keinen Connect 
Widerstand an D+ sieht lässt er die Datenleitungen in Ruhe. Aufpassen 
musst du etwas mit Ladegeräte, viele haben irgendwelche Widerstände an 
den Datenleitungen verschaltet wegen der Lade Modi.

Edit:
bei Ladegeräten spielt es wohl keine Rolle ob deine Usb Funktion 
aktiviert wird, Stron hast du zu diesem Zeitpunkt wohl ausreichend

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Hans schrieb:
> Ich verwende das USB Modul vom xmega und frage mich jetzt, wie ich
> erkennen kann, ob das USB-Kabel an einem Host (also kein Ladegerät)
> eingesteckt ist.

Dann richte dich danach, ob sich dein xmega im enumerierten Zustand 
befindet oder nicht.

W.S.

von Stefan F. (Gast)


Lesenswert?

W.S. schrieb:
> Dann richte dich danach, ob sich dein xmega im enumerierten Zustand
> befindet oder nicht.

Wenn er die USB Schnittstelle zum Strom-Sparen abgeschaltet hat, wird 
keine Enumerierung stattfinden. So kann er nicht erkennen, ob das USB 
Kabel eingesteckt wurde.

von W.S. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wenn er die USB Schnittstelle zum Strom-Sparen abgeschaltet hat, wird
> keine Enumerierung stattfinden. So kann er nicht erkennen, ob das USB
> Kabel eingesteckt wurde.

Dann zieht dad Gerät aber seinen Strom vom USB und entleert nicht die 
Batterie. Das ist dann vergleichbar mit dem Anstecken an ein Ladegerät.

W.S.

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.