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.
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
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.
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.
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.
Wäre sowas als Lösung möglich? G3VM-41UR kleines Solid State Relais
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.
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?
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.
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.
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.
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."
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
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").
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.
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
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? :)
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.