Forum: Mikrocontroller und Digitale Elektronik USB Prüfvorrichtung


von Stefan (Gast)


Lesenswert?

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

von Jim M. (turboj)


Lesenswert?

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.

von Jim M. (turboj)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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.....

von Stefan F. (Gast)


Lesenswert?

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.

von Volker S. (vloki)


Lesenswert?

Stefan schrieb:
> Ich muss leider das Teil selbst aufbauen, da die Endversion die Form
> eines USB-Sticks haben soll.....

So in der Art?
https://hackaday.io/project/6258-two-component-usb-temperature-data-logger

Ich würde auch wie Rufus einen einfachen uC nehmen und eine USB-HID 
Firmware aufspielen. Den uC im verlinkten Beitrag gibt es natürlich auch 
in kleineren SMD Bauformen. Eine LED mit Vorwiderstand und noch einen 
Kondensator dazu und fertig ist der (Prüf-)Stick.

Hinweise zu HID Firmware findest du z.B. da ->
http://www.hs-ulm.de/nocache/wir/Personal/PersonalSaSchr/vschilli/Mikrocontroller/USBProjekte/USBHID/

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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.

von Hans-Georg L. (h-g-l)


Lesenswert?

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.

von Walter T. (nicolas)


Lesenswert?

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.

von georg (Gast)


Lesenswert?

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

von Niklas G. (erlkoenig) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.

von Volker S. (vloki)


Lesenswert?

Niklas G. schrieb:
> Das Olimexino-Board ist bestimmt nicht die billigste Lösung...

Olimex hat ja Boards mit uCs verschiedener Hersteller. Auch Digispark 
ähnliche Boards mit Atiny85 sind dabei. 
https://www.olimex.com/Products/Duino/AVR/OLIMEXINO-85S/open-source-hardware

von Stefan (Gast)


Lesenswert?

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!

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch User
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.