Forum: Mikrocontroller und Digitale Elektronik USB Datenleitungen abkoppeln


von Herbert (Gast)


Lesenswert?

Hallo zusammen,
bräuchte bitte kurz eure Hilfe.

Ich habe eine Schaltung mit USB Anschluss als Programmierinterface.
Ich möchte die Datenleitungen D+ und D- elektrisch abkoppeln, wenn nicht 
benötigt, und nur zum Flashen (durch Einstecken und somit Anlegen der 
Spannung) freigeben.
Insbesondere der D+ wäre wichtig zu trennen, weil hier im idle 3V 
anliegen.
+5V ist in dem Fall kein Problem, das ist schon gelöst.

Ich gehe davon aus (weil kein Experte), dass der Programmer den D+ Pin 
für die Kommunikation auf Gnd zieht!?
Somit funktioniert eine einfache Diode leider nicht, weil die in die 
falsche Richtung zeigen würde.

Ich hätte an einen Optokoppler gedacht mit Transistor Ausgang, bin mir 
aber grad nicht sicher, wie rum der einzubauen wäre.

Theoretisch hätte ein Relais genau die richtige Funktion, aber viel zu 
groß.
Das Bauteil soll so klein wie möglich sein (wirklich klein), und somit 
auch eine Lösung, die mit wenigen Bauteilen auskommt. Kein Platz mehr 
auf der PCB/Gehäuse in dem Bereich.

danke.

von Flip B. (frickelfreak)


Lesenswert?

die leitungen D+ D- bilden ein Differentielles Paar mit Bidirektionaler 
kommunikation. Es sind die Pegel einzuhalten, hohe frequenzen treten auf 
und der stromfluss ist in beiden leitungen in beide Richtungen. Es 
bleibt das trennen mit mechanischem Kontakt oder vielleicht hilft dir 
ein Optischer USB Isolator.

Darf ich die frage stellen, wieso du die leitungen trennen möchtest? Das 
bring auch die gefahr, sich nach misslungenem flashen auszusperren.

: Bearbeitet durch User
von Daniel R. (anut_peach)


Lesenswert?

Flip B. schrieb:
> die leitungen D+ D- bilden ein Differentielles Paar mit
> Bidirektionaler
> kommunikation. Es sind die Pegel einzuhalten, hohe frequenzen treten auf
> und der stromfluss ist in beiden leitungen in beide Richtungen. Es
> bleibt das trennen mit mechanischem Kontakt oder vielleicht hilft dir
> ein Optischer USB Isolator.

Hi, danke schonmal für die rasche Antwort.
Ja, so etwas in der Art habe ich schon befürchtet, genau daher dachte 
ich mir schon, dass ich da alleine nicht weiterkommen werde.

Kennt jemand eine einfache Schaltung bzw. ein einfaches Bauteil für 
diese Anwendung?

USB Isolator muss ich mir anschauen, kenn ich noch nicht.


PS: Noch kurz der Hintergrund der Anwendung? Das Gerät wird nass und die 
Kontakte am Gehäuse lösen sich relativ schnell auf, weil eben +3V am D+ 
anliegen. Daher muss der D+ aufgetrennt werden, wenn nicht benötigt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Was für eine USB-Geschwindigkeit hast du?

Wer stellt die +3 V an D+ denn bereit? Vielleicht kann man demjenigen 
das abgewöhnen, solange sie nicht gebraucht werden?

Man könnte sie natürlich auch einfach gegen Masse klemmen, um dein 
unmittelbares Problem zu lösen, dann fließen ein paar Milliampere durch 
den Pullup.

von Daniel R. (anut_peach)


Lesenswert?

Jörg W. schrieb:
> Was für eine USB-Geschwindigkeit hast du?
gute Frage, kann ich gerade nicht beantworten. Der Controller SAMD21 
soll damit geflashed werden.

>
> Wer stellt die +3 V an D+ denn bereit? Vielleicht kann man demjenigen
> das abgewöhnen, solange sie nicht gebraucht werden?

der controller, der geflashed werden soll.
Der Stellt am entsprechenden Pin die Spannung bereit.


>
> Man könnte sie natürlich auch einfach gegen Masse klemmen, um dein
> unmittelbares Problem zu lösen, dann fließen ein paar Milliampere durch
> den Pullup.

Witzige Idee, könnte ich mal testen, was der an Leckstrom verheizt. ein 
paar mA wäre auf jeden Fall viel zu viel.  nA wären OK.

von Daniel R. (anut_peach)


Lesenswert?

Wäre sowas als Lösung möglich?
G3VM-41UR
kleines Solid State Relais

von DPA (Gast)


Lesenswert?

Das könnte man doch sicher manuell, per Jumper machen?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Daniel R. schrieb:
> gute Frage, kann ich gerade nicht beantworten. Der Controller SAMD21
> soll damit geflashed werden.

Der kann USB Full Speed. Schalte doch in Software die USB-Peripherie ab 
und die Pins auf Floating oder GND. Wenn der Bootloader USB benutzt - 
der ist ja immer nur kurz beim Starten aktiv, also wenig Zeit für die 
Kontakte zum korrodieren.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Daniel R. schrieb:

>> Was für eine USB-Geschwindigkeit hast du?
> gute Frage, kann ich gerade nicht beantworten. Der Controller SAMD21
> soll damit geflashed werden.

Nachgeschaut, der macht nur Fullspeed, also 12 Mbit/s. Das ist noch fast 
Gleichstrom. ;-) Da hast du keinen zu großen Stress.

>> Wer stellt die +3 V an D+ denn bereit? Vielleicht kann man demjenigen
>> das abgewöhnen, solange sie nicht gebraucht werden?
>
> der controller, der geflashed werden soll.

Ich hätte jetzt gedacht, dass der die 3 V da nur bereitstellt, wenn der 
USB-Makro im Controller aktiv ist. Das ist er natürlich auch nach dem 
Reset (Bootloader), aber ansonsten sollte man die Pins per Software 
abschalten bzw. mit Pulldowns versehen können.

Das wäre für mich die Vorzugsvariante, wenn ich an deiner Stelle wäre.

>> Man könnte sie natürlich auch einfach gegen Masse klemmen, um dein
>> unmittelbares Problem zu lösen, dann fließen ein paar Milliampere durch
>> den Pullup.
>
> Witzige Idee, könnte ich mal testen, was der an Leckstrom verheizt. ein
> paar mA wäre auf jeden Fall viel zu viel.

Dann kommt diese Variante allerdings nicht in Frage.

Daniel R. schrieb:
> Wäre sowas als Lösung möglich?
> G3VM-41UR
> kleines Solid State Relais

Keine Erfahrung mit sowas.

Im Prinzip müsste ja schon ein 4066 dafür ausreichen. Aber ob da nicht 
trotzdem Leckstrom durchfließt, der zu Korrosion führt?

von Daniel R. (anut_peach)


Lesenswert?

DPA schrieb:
> Das könnte man doch sicher manuell, per Jumper machen?

Grundsätzlich wäre ein Jumper hier eine einfache Lösung, aber da das 
Gerät eben wasserdicht verschlossen ist, muss/soll es eine Lösung sein, 
ohne das Gerät öffnen zu müssen. Dafür sind die Programmierpins außen am 
Gehäuse ausgeführt. Über die Kontakte sollen dann Updates eingespielt 
werden können.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Niklas G. schrieb:
> Schalte doch in Software die USB-Peripherie ab
> und die Pins auf Floating oder GND

Die USB-Pins sind PA24 und PA25, und im Datasheet heißt es:

> If the PA24 and PA25 pins are not connected, it is recommended to enable a
> pull-up on PA24 and PA25 through input GPIO mode. The aim is to avoid an
> eventually extract power consumption (<1mA) due to a not stable level on
> pad. The port PA24 and PA25 doesn't have Drive Strength option.

Also wohl doch besser Pull-Up als Floating oder GND.

von Daniel R. (anut_peach)


Lesenswert?

Jörg W. schrieb:
> Daniel R. schrieb:
>
>
> Ich hätte jetzt gedacht, dass der die 3 V da nur bereitstellt, wenn der
> USB-Makro im Controller aktiv ist. Das ist er natürlich auch nach dem
> Reset (Bootloader), aber ansonsten sollte man die Pins per Software
> abschalten bzw. mit Pulldowns versehen können.
>
> Das wäre für mich die Vorzugsvariante, wenn ich an deiner Stelle wäre.

Wenn ich die Pins per SW abstelle, wie kriege ich die dann wieder an?
Dafür geht min. ein IO Pin drauf, den ich nicht frei habe.

Einen Schalter wie Optokoppler, Transistor oder ähnliches könnte ich 
direkt mit der Versorgung vom USB-Programmierkabel versorgen und 
einschalten.
Von daher suche ich den passenden Schalter, das wäre für mich die 
einfachste/beste Lösung.
Aber eben dieses Differenzielle/Bidirektionale Gedöns macht es in dem 
Fall nicht einfacher.


>
> Im Prinzip müsste ja schon ein 4066 dafür ausreichen. Aber ob da nicht
> trotzdem Leckstrom durchfließt, der zu Korrosion führt?

Danke für den Tip, kannte ich nicht, mal schauen und ggf. testen.

von Daniel R. (anut_peach)


Lesenswert?

Niklas G. schrieb:
> Niklas G. schrieb:
>> Schalte doch in Software die USB-Peripherie ab
>> und die Pins auf Floating oder GND
>
> Die USB-Pins sind PA24 und PA25, und im Datasheet heißt es:
>
>> If the PA24 and PA25 pins are not connected, it is recommended to enable a
>> pull-up on PA24 and PA25 through input GPIO mode. The aim is to avoid an
>> eventually extract power consumption (<1mA) due to a not stable level on
>> pad. The port PA24 and PA25 doesn't have Drive Strength option.
>
> Also wohl doch besser Pull-Up als Floating oder GND.

Danke für den Auszug!
Aber Pullup kann ich nicht gebrauchen, wenn dann PD.
Aber lt. dem Abschnitt wäre ein Pulldown doch ev. möglich!?  Weil eben 
keine Drive Strength =  wenig Leckstrom!?

Oder was meinst du mit "Also wohl doch besser Pull-Up als Floating oder 
GND."

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Daniel R. schrieb:
> Wenn ich die Pins per SW abstelle, wie kriege ich die dann wieder an?
> Dafür geht min. ein IO Pin drauf, den ich nicht frei habe.

Gerät per USB mit dem PC verbinden und neustarten. Der Bootloader 
aktiviert die USB-Peripherie, ist dann für ein paar Sekunden aktiv und 
erkennt die USB-Verbindung (SOF-Pakete kommen an), sodass er weiter 
läuft (Timeout wird deaktiviert) und lässt sich per PC flashen. Nach dem 
flashen trennst du die Verbindung und startest das Gerät neu. Der 
Bootloader startet, bekommt keine SOF-Pakete per USB und startet daher 
nach ein paar Sekunden die Anwendung. Voher kann der Bootloader dann 
noch die USB-Peripherie deaktivieren und die Pins entsprechend 
konfigurieren. An den Pins liegt somit nur für diese wenigen Sekunden 
nach dem Einschalten eine Spannung an.

Daniel R. schrieb:
> Aber lt. dem Abschnitt wäre ein Pulldown doch ev. möglich!?

Vermutlich, man weiß nicht genau warum Microchip nur was von Pullups 
schreibt.

> Weil eben keine Drive Strength =  wenig Leckstrom!?

Naja der IO-Treiber wird schon eine gewisse "Stärke" haben, man kann sie 
halt nur nicht einstellen/reduzieren.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Daniel R. schrieb:
> Wenn ich die Pins per SW abstelle, wie kriege ich die dann wieder an?

Vbus musst du doch sowieso an einen GPIO geführt haben um zu erkennen, 
ob da was dran steckt, oder? Den könntest du in der Software dann ja 
abfragen und das USB-Gerassel nur aktivieren, wenn da was dran ist.

Niklas G. schrieb:
> Vermutlich, man weiß nicht genau warum Microchip nur was von Pullups
> schreibt.

Ich auch nicht. Die Portpins können auf jeden Fall auch auf Pulldown 
geschaltet werden (Ausgangsregister auf Low, Steuerregister auf "pull 
enable").

von mIstA (Gast)


Lesenswert?

Daniel R. schrieb:
> Grundsätzlich wäre ein Jumper hier eine einfache Lösung, aber
> da das Gerät eben wasserdicht verschlossen ist, muss/soll es
> eine Lösung sein, ohne das Gerät öffnen zu müssen.

Führe die D+/D- Leitungen über je einen Reed-Kontakt (möglichst nah an 
der Gehäuseinnenwand) zum Stecker; diese kannst Du mit einem 
(Neodym)magnet an der passenden Stelle auch von außen, ohne das Gehäuse 
öffnen zu müssen einschalten.

von jetztnicht (Gast)


Lesenswert?

Als Potential Koppler verwende ich jeweils ADuM1301, auf der TTL Seite, 
allerdings bin ich mit 1MBit zufrieden. Es gibt auch schnellere in 
dieser Reihe.
Allerdings wuerde ich generell keine Kontakte im Wasser haben wollen. Ob 
mit oder ohne Potential drauf. Ploetzlich leitet das Wasser, oder der 
Stecker bleibt stecken, weil vergessen.

Ich wuerde mir eher eine optische Schnittstelle ueberlegen. zB 2 
bidirektionale plastik fibern, wie Toslink von Toshiba

von Ich A. (alopecosa)


Lesenswert?

https://www.ti.com/product/TS3USB30E

Und im Fall der Nichtnutzung einfach auf den unbenutzen Port legen? Kann 
man ja zur Not mit ein bissle hühnerfutter und nem Taster vom uC 
abkoppeln das es autark funktioniert. GGf parallel zu einem enable vom 
Controller aus.


Oder denk ich jetzt gerade falsch? :)

von Jim M. (turboj)


Lesenswert?

Diode an V_Bus sollte hier eigentlich ausreichen.

Als selbstversorgtes Gerät muss man USB V_Bus ohnehin überwachen und den 
USB Stack resetten wenn V_Bus wegfällt (weil USB abgesteckt). Dabei kann 
man dann auch gleich D+ und D- nach Masse ziehen.

Damit wären alle außen beschaltete Pins auf Masse.

von Stefan F. (Gast)


Lesenswert?

Daniel R. schrieb:
> Im Prinzip müsste ja schon ein 4066 dafür ausreichen.
> Danke für den Tip, kannte ich nicht, mal schauen und ggf. testen.

Nein, die sind viel zu hochohmig.

Jörg W. schrieb:
> Vbus musst du doch sowieso an einen GPIO geführt haben um zu erkennen,
> ob da was dran steckt, oder? Den könntest du in der Software dann ja
> abfragen und das USB-Gerassel nur aktivieren, wenn da was dran ist.

Genau das ergibt sich beim STM32L072 von ganz alleine, weil dessen USB 
Port vom separaten VBUS Eingang versorgt wird. Insofern wäre eventuell 
der Wechsel auf einen andere Mikrocontroller praktisch. Vielleicht hat 
Microchip auch so einen im Programm.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan F. schrieb:
> Daniel R. schrieb:
>> Im Prinzip müsste ja schon ein 4066 dafür ausreichen.

>> Danke für den Tip, kannte ich nicht, mal schauen und ggf. testen.

> Nein, die sind viel zu hochohmig.

Müsste man mal schauen, ob es einigermaßen niederohmige Derivate gibt. 
Es muss ja nicht der uralte CD4066 sein.

Problematisch wird die hier geringe Versorgungsspanunng sein, das 
stimmt. Ansonsten hat man üblicherweise aber eh einige 10 Ω seriell in 
den USB-Datenleitungen drin.

> Genau das ergibt sich beim STM32L072 von ganz alleine, weil dessen USB
> Port vom separaten VBUS Eingang versorgt wird. Insofern wäre eventuell
> der Wechsel auf einen andere Mikrocontroller praktisch. Vielleicht hat
> Microchip auch so einen im Programm.

Er hat ein offenbar komplett fertiges Gerät, und du willst ihm zu einem 
Wechsel des Controllers raten? Die gesamte Peripherie bei STM32 ist 
grundlegend anders als bei Atmel/Microchip, das ist ein immenser 
Aufwand.

Für eine "hot plug"-Möglichkeit eines self-powered device muss Vbus, wie 
schon geschrieben worden ist, ohnehin irgendwie an einen Controller-Pin 
verdrahtet worden sein. Damit sollte sich auch problemlos die 
Möglichkeit ergeben, das alles in Software abzuhandeln.

von Daniel R. (anut_peach)


Lesenswert?

Danke für euer Engagement und die zahlreichen Vorschläge!
Ich habe auf jeden Fall schonmal ein paar neue Ansätze die ich jetzt 
dann durchtesten werde.
Am Besten gefällt mir die Lösung die Pins per Software zu deaktivieren, 
das könnte für meine Anwendung klappen und ausreichen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Daniel R. schrieb:
> Am Besten gefällt mir die Lösung die Pins per Software zu deaktivieren

Das ist auch technisch ganz zweifellos die beste Variante.

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.