Hallo,
ich komme gerade nicht wirklich weiter in einem neuen Projekt…
Ich soll einen Tester für eine USB Buchse aufbauen, mit welchem geprüft
werden kann ob der USB-Anschluss funktionsfähig ist. Also liegen die 5V
an, sind D+ und D- angeschlossen.
An sich soll lediglich geprüft werden, ob die Buchse 4 polig „verkabelt“
ist. In dem Fahrzeug ist ein kleiner Rechner verbaut, an welchem USB
Kabel angeschlossen ist. Dieses ist im Fahrzeug fest im vorhandenen
Kabelstrang verlegt. Am anderen Ende wird die Buchse des Kabels an eine
USB-Einbaubuchse angesteckt.
Diese Adapterbuchsen sind lt. Kunde immer wieder ein Problem und fallen
aus. Ich soll eine Art „Prüfstick“ aufbauen, mit dem in der Endprüfung
die Durchgängigkeit des Kabels bis zum Rechner geprüft werden kann, ohne
dass man das Kabel vom Rechner abstecken muss.
Im Normalbetrieb wird an der Buchse täglich ein USB-Stick
ein/ausgesteckt, auf welchem irgendwelche Gewichtsdaten gespeichert
wurden.
Die Versorgungsspannung zu prüfen ist nicht das Problem, nicht weiter
komme ich gerade mit den Datenleitungen. Wie kann ich prüfen, ob die
Datenleitungen bis zum/in den Rechner durchgängig sind? Soweit mir
bekannt ist, werden die D-Leitungen vom Host auf GND gezogen, wenn kein
Gerät angesteckt ist.
Wie wird vom Host erkannt dass ein Gerät angesteckt wurde, und kann ich
dass irgendwie auswerten? Evtl. hat ja jemand einen brauchbaren
Lösungsansatz…
Vielen Dank
Stefan schrieb:> Soweit mir> bekannt ist, werden die D-Leitungen vom Host auf GND gezogen, wenn kein> Gerät angesteckt ist.
Die werden mit (IIRC) 15kOhm nach GND gezogen. Ob das tut könnte man mit
einem Spannungsteiler nach 3,3V überprüfen. Vorsicht: Mehr als 3,6V
dürfen auf den Datenleitungen nicht anliegen.
Ich würde den Spannungsteiler aber eher hochohmig (50k, 100k Ohm)
auslegen und die Spannung mit einem ADC messen. Denn falls die Spannung
zu stark ansteigt, erkennt der Host ein Device und pullt dann die
Leitungen erstmal hart auf Masse (USB Reset).
Stefan schrieb:> Wie wird vom Host erkannt dass ein Gerät angesteckt wurde
USB D+ (Full Speed und höher) oder D- (Low Speed) wird mit 1k5 nach
3,3V gezogen. Das löst aber USB Reset und weitere Datenübertragung aus,
die beim Durchmessen eher stören dürften.
Jim M. schrieb:> die Spannung mit einem ADC messen.
..oder mit einem Opamp/Comperator. Ist ja Spannungsteiler.
Allerdings sollte man Kurzschlüsse betrachten können, also D+ mit D-,
oder Datenleitung nach Masse / VBus. Wäre mit einem µC vermutlich
einfacher zu lösen.
Danke für die Infos, dass hilft mir schon mal einen großen Schritt
weiter, damit kann ich die Leitungen durchmessen, wenn am AD eine
Spannung kleiner 5V messbar ist sollten die Datenleitungen Durchgang
haben...
Stefan schrieb:> Wie kann ich prüfen, ob die Datenleitungen bis zum/in den Rechner> durchgängig sind?
Du könntest einen µC mit USB-Devicecontroller verwenden, der sich z.B.
als HID* am USB-Host anmeldet, und bei erfolgter Enumeration diese vom
µC mit LEDs signalisieren lassen.
Wenn Dein µC mit autarker Spannungsversorgung arbeitet, kann der auch
die USB-Versorgungsspannung messen und die wiederum irgendwie mit einem
Display oder LEDs signalisieren.
Damit hättest Du einen Prüfstick, der neben "Spannung ist OK" auch
"USB-Host redet mit Gerät" liefern kann.
*) oder irgendeine andere simple Standardgeräteklasse.
Ich habe einen 3€ USB Hub, der signalisiert die Enumerierung mit eine
flackernden LED. Nach erfolgreicher Enumerierung geht die LED auf
Dauerlicht.
Wenn kein Gerät an die 4 Ports des Hub angesteckt ist, bleibt die LED
dunkel. Ebenso bleibt sie dunkel, wenn ich den Hub mit einem Gerät an
ein Handy-Ladegerät steckt (also keine Kommunikation stattfindet).
So ein Hub in Kombination mit einer Maus (oder einem Funkempfänger von
einer Maus) wäre eine billige Fertiglösung für die Aufgabe.
Hallo,
danke für die Beiträge.
Ich habe mir jetzt den USB Uart FT232R angeschaut, dieser hat in der in
der Default-Einstellung das Signal PWREN am Pin14 CBUS3. Wenn ich das
Datenblatt richtig verstanden habe, wird der Pin geschaltet wenn die
Enumeration erfolgreich abgeschlossen ist. Also das IC vom Rechner
erkannt wurde.
Einziges Problem könnte hier sein, dass der Rechner hierfür Treiber
installieren will, was zu lange dauern könnte. Die Prüfung sollte nicht
all zu lange dauern, sagt der Kunde..........
würde diesen IC dann verwenden um die LED's einzuschalten.
Ich würde jetzt mal einen Versuchsaufbau mit dem FT232R aufbauen als
bessere Methode da diese die USB-Schnittstelle kpl. prüft. Alternativ
dann eine mit einem µC der nur die Spannungen misst.
Ich muss leider das Teil selbst aufbauen, da die Endversion die Form
eines USB-Sticks haben soll.....
Der Nachteil beim FT232R ist, dass er nicht mit den Standard-Treibern
läuft, die schon in Windows drin sind.
Hier wäre ein USB-UART nach CDC Standard vielleicht besser. Mir fällt
dazu das Blue-Pill Board und ein Projekt von Niklar Gürtler ein. Seine
Beispiel-Firmware mach darauf einen 3-Fach UART, der ohne extra Treiber
läuft. Da müsste man nur noch die LED programmieren.
Ein HID lässt sich spezifikationskonform mit V-USB auch auf einem
ATiny85 implementieren. Dafür gibt es sogar Arduino-Unterstützung.
In Form fertiger Hardware auf einer einen USB-Stecker nachbildenden
Platine gibt es das als "Digispark" zu kaufen.
Hier gilt es nur noch, die Information über abgewickelte "enumeration"
aus der V-USB-Bibliothek zu entnehmen und damit eine LED anzusteuern.
Man könnte auch den Code so ändern dass man bei SET_ADDRESS das Gerät
wieder trennt (den Pullup abschalten). Der PC sieht das als gescheiterte
Enumeration, aber da zu diesem Zeitpunkt weder VID/PID noch
Geräte-Klasse übertragen wurde kann der PC sich nichts zu diesem Gerät
merken, Treiber installieren o.ä. und bleibt im "Urzustand". Auf dem
Gerät könnte man dann bei Empfang von SET_ADDRESS eine LED einschalten
o.ä., denn wenn die Nachricht ankommt ist die Verkabelung ja intakt.
Stefan schrieb:> Diese Adapterbuchsen sind lt. Kunde immer wieder ein Problem und fallen> aus. Ich soll eine Art „Prüfstick“ aufbauen, mit dem in der Endprüfung> die Durchgängigkeit des Kabels bis zum Rechner geprüft werden kann, ohne> dass man das Kabel vom Rechner abstecken muss.>> Im Normalbetrieb wird an der Buchse täglich ein USB-Stick> ein/ausgesteckt, auf welchem irgendwelche Gewichtsdaten gespeichert> wurden.
Sind die schon defekt bei der Auslieferung ? Sonst nützt deine
Endprüfung ja nichts. Kann ja auch ein späterer Kabelbruch bei den
Lötstellen durch Erschütterung sein. Wenn die USB Leitung im Kabelbaum
liegt würde ich auch eingekoppelte Störspitzen begrenzen.
Rufus Τ. F. schrieb:> Du könntest einen µC mit USB-Devicecontroller verwenden, der sich z.B.> als HID* am USB-Host anmeldet, und bei erfolgter Enumeration diese vom> µC mit LEDs signalisieren lassen.
War auch mein erster Gedanke. Jede Computermaus macht das.
Stefan schrieb:> Einziges Problem könnte hier sein, dass der Rechner hierfür Treiber> installieren will, was zu lange dauern könnte
Das ist nur ein Teil des Problems. Ich möchte nirgends tote Treiber
herumgeistern haben, und den wieder loszuwerden ist zuviel Arbeit.
Manche, vor allem alte USB-Sticks haben eine Aktivitäts-LED, ich habe
welche, bei denen die LED beim Erkennen durch den Host angeht und beim
Auswerfen per Befehl wieder aus. Aber Memory-Sticks sind
sicherheitstechnisch eher unerwünscht. Das kann man vielleicht
akzeptieren wenn der Stick im Haus bleibt.
Georg
Ich habe das mal fix programmiert... Wenn du die angehängte Datei auf
ein Olimexino-STM32-Board flashst, wird er zum USB-Prüfgerät. Einfach
nur den Mini-USB-Stecker einstecken. Wenn dann alle 3 LEDs angehen, ist
die Verbindung OK. Die Bedeutung der einzelnen LEDs:
PWR LED (Rot): Es liegt Spannung an (von der USB Buchse oder
Hohlstecker)
LED1 (Grün): Ein SOF Paket wurde empfangen - der PC sendet diese alle
1ms
LED2 (Gelb): Ein SET_ADDRESS oder GET_DESCRIPTOR wurde empfangen. Dies
zeigt, dass die Datenleitungen intakt sind.
Direkt nachdem eines der beiden letzteren Pakete empfangen wurde, trennt
sich das Gerät wieder durch Abschalten der Pull-Up. Da dem PC so nie
mitgeteilt wurde, um was für ein Gerät es sich handelt, kann er
keinerlei Treiber installieren und bleibt somit "sauber".
Interessanterweise erscheint bei Windows nicht einmal eine Meldung, weil
die Trennung so schnell erfolgt dass hier vermutlich eine Störung statt
eines angeschlossenen Geräts angenommen wird.
Das Olimexino-Board ist bestimmt nicht die billigste Lösung, aber die
Einfachste die ich auf die Schnelle testen konnte:
https://www.olimex.com/Products/Duino/STM32/OLIMEXINO-STM32/open-source-hardware
Die Blue Pill Boards sind dafür nicht so geeignet, weil da der
Widerstand nicht schaltbar ist.
Diese Olimexino Boards kannte ich nicht... Werde mal eins bestellen.
Ein anderer Gedanke, das ganze auf "analoger" Basis zu testen ist noch,
wie oben schon mal beschrieben wurde, beide Leitungen hochohmig an +3,3V
anbinden, mit einem µC dann ein "LowSpeed"-Gerät vorgaukeln, und dann
die Hard-Reset Zeit auswerten. Danach das "LowSpeed" Gerät wieder
trennen.
Hier dann schrittweise die Spannungspegel an den beiden Leitungen
einlesen und auswerten.
Werde das ganze mit meinem Kunden besprechen auf welcher Lösung wir
weiterarbeiten. Lt. Kunden funktionieren die Rechner generell
einwandfrei, das Problem ist in der Montagelinie, die Stecker werden
nicht richtig angesteckt bzw. der Stecker löst sich wieder bei der
Montage... das sollte damit geprüft werden.
Vielen Dank für Eure Hilfe!
Volker S. schrieb:> Olimex hat ja Boards mit uCs verschiedener Hersteller. Auch Digispark> ähnliche Boards mit Atiny85 sind dabei.
Da ist leider der Pullup nicht schaltbar. Außerdem müsste man noch LED's
dranfummeln. Die paar € mehr für den Olimexino-STM32 sind im
kommerziellen Umfeld wohl kaum von Bedeutung; das Olimexino-STM32 hat
außerdem noch CAN, kann man vielleicht für andere Automobil-Dinge
brauchen :-)
Bei beiden Boards braucht man aber noch einen Programmier-Adapter. Der
vorprogrammierte USB-Bootloader würde wohl wieder eine
Treiber-Installation bewirken, daher muss man den löschen/überschreiben.
Alle bisher vorgestellten Varianten testen aber nur auf simple
Kabelbrüche... Aufgrund von Störungen oder Wackelkontakt könnte es sein,
dass diese Methoden zwar die Verbindung als intakt anzeigen, aber bei
Übertragung größerer Datenmengen doch zu viele Fehler für eine stabile
Verbindung auftreten. Insbesondere USB High Speed wird hier überhaupt
nicht geprüft, was ja noch mal ganz andere Anforderungen an die
Signalintegrität hat. Zum Testen von "richtigen" Datenübertragungen
braucht's aber auf jeden Fall einen Treiber, und wenn's nur der für Mass
Storage ist - der würde aber eine manuelle Aktion am PC erfordern. Das
alles korrekt abzudecken wird aber bestimmt deutlich aufwendiger &
teurer.