Wie kann man auf STM32F auf USB-Aussetzer testen?

Ich habe ein Gerät, das wirklich seltsam ist, es lässt USB regelmäßig fallen. Mit periodisch meine ich wöchentlich (oder zweiwöchentlich). Mit Ausfallen meine ich, dass Windows den Griff zum Fahrer verliert. Dropouts werden von den Benutzern der Geräte nicht gut toleriert. Das Seltsame ist, dass ich bei den meisten Produkten, die wir haben, ein ähnliches Design verwende (dazu später mehr), aus irgendeinem Grund will dieses hier nicht gut spielen, einige der anderen Geräte laufen Monate bis Jahre (mit dem gleiches Design, aber anderes Layout) ohne Probleme.

Es ist nur auf einigen der Geräte , so dass Firmware/Software wahrscheinlich ausgeschlossen wird.

Der USB ist 2.0 FS und läuft zu einem STM32 mit einem ESD-Diodenchip in der Mitte.

Schema (D+ und D- und OSC_IN und OSC_OUT (Oszillatordesign wurde geerbt) gehen zu den entsprechenden Pins)

Geben Sie hier die Bildbeschreibung ein

Eine bessere Frage wäre, wie teste ich auf diese Aussetzer? Gibt es eine Methode, mit der ein Gerät über sehr lange Zeiträume mit Millionen von Paketen überwacht und die Fehlerquelle gefunden werden kann?

Bist du sicher, dass es nur USB fallen lässt? Erwägen Sie, ihm eine spärliche UART-Statusausgabe zu geben, insbesondere beim Booten , und dies wochenlang zu protokollieren. Hosten Sie es auch auf einem anderen System, sowohl mit unterschiedlicher Hardware als auch mit unterschiedlichen Betriebssystemen wie Linux. Stellen Sie sicher, dass Sie nichts in der Firmware haben, wie z. B. einen 32-Bit-Millisekundenzähler, der überlaufen kann, oder ein Speicherzuweisungsleck oder ähnliches. Sehen Sie, ob Sie herausfinden können, ob das Problem zeit- oder nutzungsabhängig oder zustandsabhängig ist . Außerdem können Sie Host-seitige USB-Paketprotokollierung oder sogar elektrisches Sniffing durchführen. Versuchen Sie es mit einem Hub und ohne.
Es ist nur auf einigen der Geräte, also denke ich, dass es hardwarebezogen ist.
"mit einem ESD-Diodenchip in der Mitte" klingt sehr verdächtig.
Erfassen und protokollieren Sie die Systemausnahmen? (zB: Hardfaults)
ST hat einen App-Hinweis zu Überlegungen zum USB-Design, den ich für den STM32F hilfreich fand: comm.eefocus.com/media/download/index/id-1010928
Was für USB-Geräte hast du? Haben sie eine externe quarzbasierte Uhr für USB PHY oder einen albernen "internen Oszillator" im FT232-Stil?
@AliChen STM32F2 mit einem externen Oszillator unter Verwendung des integrierten USB
Als kleine Anmerkung, die Kappen C13-C14 sind zu hoch (sollten 22-33 pF sein) und befinden sich auf der falschen Seite von R5-R6. Die gesamte Reihenfolge der Komponenten ist umgekehrt. Die Kappen sollten sich auf der IC/PHY-Seite befinden (um die Anstiegsgeschwindigkeit zu begrenzen), dann sollten Rs und der ESD-Schutz zuerst in der Nähe des USB-Anschlusses sein. Aber das sind Kleinigkeiten. Wie lang ist das Kabel zwischen Host und Geräten?
@AliChen Ja, ich habe diesen Teil des Designs geerbt. Das Kabel ist ein 6-Fuß-Kabel mit einem Ferrit. Wir haben auch ein Durchgangskabel auf der Innenseite des Instruments zu einem Standard-B-Anschluss, wie oben gezeigt. Die Abschirmung ist nicht geerdet, sondern mit der Gehäusemasse des Geräts verbunden.
Ich verstehe. Haben Sie irgendwelche Spuren von D+/D- Drähten? Versetzt das System Ihre Geräte jemals in den USB-Suspend-Modus?
Übrigens, was ist dein USB-Host? PC? Fenster? Linux? Außerdem sind die Kappen zur Abschirmung schlecht, Signale wären anfällig für externe EM-Störungen, das Einschalten der CFL-Glühbirne könnte die Kommunikation stören.

Antworten (3)

Gibt es eine Methode, mit der ein Gerät über sehr lange Zeiträume mit Millionen von Paketen überwacht und die Fehlerquelle gefunden werden kann?

Ja. Das Gerät heißt "USB-Protokollanalysator".

Wenn Sie nur die Seite der Host-Software überwachen, können Sie maximal sehen, dass ein "Transaktionsfehler" aufgetreten ist und der Port nach dem Löschen wiederhergestellt werden kann oder nicht. Das USB-Protokoll verfügt über hardwaregestützte Mittel, um fehlgeschlagene Transaktionen erneut zu versuchen, und die Software hat keinen Einblick in die "Fehleranzahl". Sie müssen also die Grundursache des Fehlers auf physikalischer Ebene auf D+/D-Leitungen identifizieren.

Es gibt erschwingliche USB-Analysatoren, insbesondere für USB 1.1 (FS 12 MBit/s)-Rate. Ein guter Analysator kann auf einen ausgeklügelten Trigger eingestellt werden, während er den Datenverkehr in einer langen Schleife überwacht oder sogar den gesamten Datenverkehr bis zur Kapazität Ihrer Festplatte aufzeichnet. Ich würde ein kleines Teledyne/Lecroy- Modell Mercury T2 empfehlen , aber andere Typen wie Ellisys und Totalphase Beagle werden immer besser.

Sie müssen jedoch vorsichtig sein, da die Analysatoren etwas invasiv sind und ihre Anschlüsse/Einbauten einen gewissen Einfluss auf die Signalintegrität haben. Im Falle einer schwachen Verbindung und einer seltenen Fehlerrate kann der Analysator entweder das Signal verbessern (und Sie werden das Problem möglicherweise nie sehen) oder die Verbindungsfunktion beenden (was hilfreich sein wird, um das Problem zu lokalisieren).

Kurz gesagt, Sie müssen feststellen, wer schuld ist, wenn das Gerät herunterfällt. Es könnte sein, dass (a) das Gerät falsche Antworten auf ein gültiges USB-Protokoll gibt, (b) ein Kanalsignal-Integritätsproblem vorliegt oder (c) die Host-Hardware einen Fehler bei der Handhabung einiger Besonderheiten des USB-Protokolls hat.

Ich würde mit (b) beginnen und prüfen, ob alle Signale auf dem Bus den grundlegenden USB-Signalspezifikationen entsprechen: Musterfrequenz innerhalb von 2000 ppm, Jitter innerhalb der Norm, Signalflanken sind monoton und das Signalauge trifft auf die Diagrammmaske über alle Ihre spezifischen Kabel , Geräte und Hosts. Auf der USB-IF-Website sind Standardverfahren zur Durchführung der elektrischen Tests im Rahmen des USB-Compliance-Programms beschrieben .

Wenn die Signale grundlegende FS-Signalspezifikationen erfüllen, wäre der Protokollanalysator das nächste, was eingesetzt werden sollte. Es kann schwierig sein, den richtigen Trigger einzurichten und Busereignisse korrekt zu interpretieren, was zu Fehlern führt. Wenn Sie keine Erfahrung mit USB-Analysatoren haben, müssen Sie möglicherweise eine Schulung absolvieren oder einen Berater hinzuziehen.

Ich hatte ein ähnliches Problem mit etwas, an dem ich arbeitete. Es scheint, dass die Signalpegel eher marginal waren und das Ganze empfindlich auf die Qualität oder Länge des USB-Kabels reagierte. Sie könnten anfangen, sich die Signalpegel anzusehen, und vielleicht ein kürzeres Kabel ausprobieren und sehen, ob das die Dinge verbessert. Nicht alle USB-Kabel sind gleich – einige haben dickere Leiter für die Datenleitungen als andere.

Wir hatten in der Vergangenheit ähnliche Probleme. Ein serielles USB-Gerät würde auf einigen PCs monatelang funktionieren und auf einigen würden wir jede Woche die Kommunikation verlieren. Wir begannen damit, drei Geräte auf zwei identischen Windows-PCs (Kombination, die manchmal Probleme hatte) und einer Ubuntu-Box mit einfacher Log-to-Disk-Software auszuführen. Nach einiger Zeit verlor eine Windows-Box es - Port verschwand einfach. Der Windows-USB-Treiberstapel (dies war Win7) ist ein Haufen veralteter Dinge, die anscheinend nicht mit Macken von FTDI-Chips umgehen können. Mein Vorschlag ist also, einen Test mit zwei identischen Konfigurationen + einer dritten anderen durchzuführen. Wenn es nicht mehr reagiert, haben Sie ein Problem mit der Kombination aus Gerät + USB-Controller + Treiber. Wenn nicht, ist es wahrscheinlich ein Signalproblem - USB-Monitor könnte Ihnen helfen.