Elektrisches Problem mit USB? Hi-Speed-Gerät funktioniert nicht mit eigenem Design

Haftungsausschluss, ich bin ein SW-Typ, also halte bitte nichts für selbstverständlich, und ich würde mich über Erklärungen in Laiensprache freuen :)

Wir haben ein kundenspezifisches Design basierend auf Freescale's i.mx233und als Referenz haben wir ein Board von Olimex namens Olinuxino verwendet. Auf dem Olinuxino haben sie einen doppelt funktionierenden LAN-USB-Chip, der für unser Design unnötig ist (wir brauchen nur 1 USB-Port für einen WiFi-Dongle), also dachten wir, wir können ihn einfach entfernen und ein USB-Gerät direkt an die Prozessoren anschließen D+ und D- Leitungen.

Aufgrund eines separaten Layoutfehlers kann der von uns gewählte USB-Anschluss in dieser HW-Revision nicht verwendet werden. Ich dachte, ich könnte das Design überprüfen, indem ich einfach ein USB-Verlängerungskabel abschneide und es an den Anschlüssen verlöte, also sieht es derzeit so aus:

Foto

Wenn ich jetzt das WiFi-Modul an den Anschluss anschließe, scheint es richtig aufzuzählen, und wenn ich mir die Signalisierung ansehe, sieht es auch anständig aus (ich habe es mit der Referenzplatine verglichen, und es sieht sehr ähnlich aus):

Foto 2

Auf der Softwareseite beschwert sich jedoch der Treiber für WiFi, dass er die Chipsatz-ID falsch liest, und weigert sich zu laden:

[    2.390000] ieee80211 phy0: rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1000 with error -       
[    2.400000] ieee80211 phy0: rt2800_probe_rt: Error - Invalid RT chipset 0xc37b, rev 5108 detected
[    2.410000] ieee80211 phy0: rt2x00lib_probe_dev: Error - Failed to allocate device

Der schematische Teil für den (ursprünglichen) USB-Anschluss:

WLAN-Schema

Und das eigentliche Layout für diesen Teil ist auch einfach (Im Bild nur die oberste Ebene, ich habe alle anderen Ebenen der Übersichtlichkeit halber ausgeblendet. Ich habe die D-Signalspur von der unteren Ebene von Hand gezeichnet, bitte beachten Sie dies im echten Bild oben das ist um 180 Grad gedreht):

WLAN-Spuren vom AP

Das exakt gleiche Softwarepaket und der gleiche Dongle auf unserem Referenzboard funktionieren und der Treiber wird geladen. Ich habe angefangen, die USB2.0-Spezifikation zu lesen , und in Kapitel 7 sprechen sie über die elektrische Signalisierung, und dieser Teil ist mir aufgefallen:

Der Hochgeschwindigkeitsbetrieb unterstützt die Signalisierung bei 480 Mb/s. Um bei dieser Rate eine zuverlässige Signalübertragung zu erreichen, wird das Kabel an jedem Ende mit einem Widerstand von jedem Draht zur Erde abgeschlossen. Der Wert dieses Widerstands (an jedem Draht) ist nominell auf 1/2 der spezifizierten differentiellen Impedanz des Kabels oder 45 Ω eingestellt. Dies stellt einen differentiellen Abschluss von 90 Ω dar.

Habe ich die Signalisierung jetzt mit meinem USB-Anschluss vermasselt? Was differential impedancebedeutet das? 5VHätte ich auch mit dem ursprünglichen Port genau das gleiche Problem gehabt, da wir nur die , GND, D+und Leitungen an den Anschluss anschließen wollten D-? Oder soll sich dieser Widerstand an jedem Ende der Verbindung im Silizium befinden? Was könnte hier falsch sein?

Danke für jeden Rat!

Bearbeiten: Layout und schematisches Bild für mehr Klarheit hinzugefügt

Bearbeiten 2 : Ich habe mein abgeschnittenes Verlängerungskabel weggeworfen und den ursprünglichen USB-Stecker gebogen und konnte ihn in einem etwas komischen Winkel auf der Platine platzieren.

Ich habe auch die notwendigen Treiber für USB-Speicher zum Kernel hinzugefügt und habe jetzt überprüft, dass mein 16-GB-HighSpeed-USB-Speicher funktioniert. Beim Booten wird erkannt:

[    2.240000] usb 1-1: new high-speed USB device number 2 using ci_hdrc
[    2.430000] usb-storage 1-1:1.0: USB Mass Storage device detected
[    2.440000] scsi0 : usb-storage 1-1:1.0
[    3.460000] scsi 0:0:0:0: Direct-Access     UFD 2.0  Silicon-Power16G PMAP PQ: 0 ANSI: 4
[    3.500000] sd 0:0:0:0: [sda] 30283008 512-byte logical blocks: (15.5 GB/14.4 GiB)
[    3.520000] sd 0:0:0:0: [sda] Write Protect is off
<snip>

Der Flash auf dem Board ist sehr klein, aber auf dem USB-Laufwerk kann ich eine 1-GB- Datei in ein anderes Verzeichnis kopieren , und die Geschwindigkeit beträgt etwa 360 KB/s. Die MD5-Summe stimmt, und ich sehe keine Probleme mit dem Memory Stick.

Also, ich denke, das bedeutet, dass jetzt nur mit dem WLAN-Dongle etwas schief geht. Es ist DPseltsam DM.

Endgültige Bearbeitung Obwohl wir das Problem nicht mit 100%iger Sicherheit lokalisieren konnten, funktionieren alle USB-Geräte ohne Probleme, einschließlich des WLAN-Moduls, wenn der Controller über die Registrierung gezwungen wird, nur im 1.1-Modus zu arbeiten. In unserem nächsten Layout haben wir strenge differentielle Routing-Regeln befolgt, und hoffentlich ist dies das Ende unserer Probleme :)

Ich gehe davon aus, dass die erforderlichen USB-Abschlusswiderstände im Freescale iMX233 IC enthalten sind, da das Olimex iMX233-OLinuXino-MICRO-Schema eine direkte Verbindung vom MX233 zum USB-Anschluss zeigt. Wenn Sie das Gerätedatenblatt finden können, sollten sie eine Anwendungstestschaltung zur Bestätigung haben.
Ist es möglich, dass D+ und D- bei Ihrem Prototyp (Kabelanschluss) aufgrund eines Layoutfehlers vertauscht wurden? Sieht so aus, als hätte Ihr Kabel Rot = VBUS, Weiß = D-, Grün = D +, Schwarz-GND, vorausgesetzt, die PCB-Layout-Pads sind in der richtigen Reihenfolge. Werden andere Geräte aufgelistet?
Tatsächlich habe ich das auch versucht. Aber dann gibt mir der Kernel viele Lesefehler (-71). Ich bin ziemlich zuversichtlich, dass die Datenleitungen jetzt in Ordnung sind. Ich habe die Logitech-Tastatur ausprobiert und sie scheint vom Kernel erkannt zu werden (obwohl ich nicht darauf tippen kann - dies könnte ein Treiberproblem sein, ich habe die Tastatur auf Olimex nicht überprüft). Das Gerät sollte ok aufzählen, da es beginnt, den richtigen Treiber zu laden? Oder wie läuft der Aufzählungsprozess genau ab..
@MarkU Ich habe dem OP Layout- und schematische Bilder hinzugefügt, ich hoffe, das verdeutlicht mehr
In Ihrem Layout haben D+ und D- unterschiedliche Leiterbahnlängen und unterschiedliche Induktivitäten (D- geht durch zwei Vias, D+ hat keine Vias.) Dies könnte die USB-Signalintegrität beeinträchtigen. Normalerweise weise ich den CAD-Layout-Designer an, D+ und D- nebeneinander zu verlegen, gleiche Pfadlänge, konstanter Abstand. Ähnlich den Entwurfsregeln für das Mikrostreifen-Routing. Können Sie den USB-A-Anschluss auf die gegenüberliegende Seite der Platine verschieben, sodass D+ und D- direkt geroutet werden können, mit jeweils 1?
@MarkU, Sie könnten hier auf etwas stoßen - denken Sie, wenn ich versuchen würde, die DM-Spur zu schneiden und zu versuchen, einen kleinen Schaltdraht an das Pad zu löten, könnten wir der Situation helfen (nur zur Überprüfung dieser Revision) - oder das Handlöten durchführen Gelenke haben im Grunde denselben (oder sogar schlechteren) Effekt wie diese 2 Durchkontaktierungen? Bei der nächsten Überarbeitung werden wir diese Leitungen auf jeden Fall nebeneinander verlegen
Wenn Sie einen kleinen 30-AWG-Draht (0,255 mm Durchmesser) haben (auch als "Wire-Wrap" -Draht bezeichnet), ist es möglicherweise möglich, direkt an die Stifte des IC zu heften. Dies erfordert einen Techniker mit ruhiger Hand, Mikroskop und feinem Messgerät Lot, Flussmittel. Es besteht die Gefahr, dass die zusätzliche Nacharbeit das Prototyp-Board ruinieren könnte, daher könnte es produktiver sein, sich bei der nächsten Board-Revision auf die USB-Routing-Symmetrie zu konzentrieren.
MarkU, nachdem Sie das Kabel entfernt und den Originalstecker gebogen haben, funktioniert jetzt der Hochgeschwindigkeits-USB-Flash-Speicher (ich habe der Frage Bearbeiten 2 hinzugefügt), aber ich habe immer noch Probleme mit dem WLAN-Dongle. Haben Sie weitere Ideen, was sein könnte? falsch, warum das WiFi nicht funktionieren würde?
Vielleicht ist der WLAN-Dongle empfindlicher gegenüber Strom/Erdung? Klingt so, als hätten Sie alles außer dem Platinenlayout ausgeschlossen.

Antworten (3)

Es ist eine schwer zu beantwortende Frage , da dies eher eine Debugging-Sache ist. Aber ich kann einige Ideen beitragen, was Sie versuchen könnten.

Das erste, was ich dachte, war, dass Ihre Pigtail-Verbindungen (die 1-2 cm langen losen Drähte, die aus dem Kabel und auf Ihre Platine kommen) für den Betrieb mit 480 Mbit / s zu lang sein könnten. Ideen zum Ausprobieren:

  • Erzwingen Sie, dass Ihr Host als USB 1.1 (1,5 oder 12 MBit/s) ausgeführt wird. Vielleicht können Sie es über einen USB-betriebenen Hub oder etwas anderes ausführen, um es auf die niedrigere Geschwindigkeit zu zwingen.
  • Verwenden Sie einen echten USB-Anschluss, kleben Sie ihn verkehrt herum oder so und stellen Sie wirklich enge kurze Verbindungen von den Anschlussstiften zur Leiterplatte her.
  • Vielleicht finden Sie einen Weg, die Kabelpigtails auf 1/5 oder etwas in dieser Reihenfolge zu kürzen.
  • Stellen Sie sicher, dass Sie nicht mit angeschlossener Oszilloskopsonde testen.
  • Probieren Sie vielleicht ein wirklich kurzes und ein wirklich langes USB-Kabel aus.
  • Versuchen Sie vielleicht, die Temperatur zu ändern (wärmer macht die Kanten langsamer und kälter macht die Kanten schneller).

Eine Anmerkung zu einigen Kommentaren hier: Machen Sie sich keine Gedanken über die Anzahl der Durchkontaktierungen und die Längenanpassung dieser Leiterbahnen. Richtig gemacht, Vias und ein kleiner Längenunterschied waren noch nie ein Problem für USB 2.0. Und das ist unbedeutend im Vergleich zu dem, was Sie mit den Kabelpigtails machen.

Einige typische allgemeine Fehler, auf die Sie prüfen sollten, sind:

  • Takten. Stellen Sie sicher, dass die Taktfrequenz und der Jitter innerhalb der Spezifikation liegen – einschließlich aller PLLs.
  • Leistung. Überprüfen Sie (mit einem 1-2-GHz-BW-Oszilloskop), dass Ihre Vcc-Welligkeit innerhalb der Spezifikation liegt usw.

Auch Software würde ich noch nicht ausschließen. Suchen Sie nach Unterschieden - wie in den Konfigurationsdaten usw.

Und seien Sie nicht zu stolz, einen erfahrenen Hardware-Typen um Hilfe zu bitten :-)

Update - Hinweis zur Messung der Vcc-Welligkeit:

Aus meiner Antwort auf diese Frage: Wie überprüfe ich, ob meine 3,3-V-Stromschiene die Anforderungen für ein Ember EM357-SoC erfüllt?

Das beste Papier, das ich kenne, das beschreibt, wie man diese Messung durchführt, ist dieses hier: http://www.electrical-integrity.com/Quietpower_files/Quietpower-21.pdf

Kurz gesagt: Verwenden Sie ein Koaxialkabel, das direkt auf Ihr Board gelötet wird. Führen Sie das 50R-Koaxialkabel in Ihr Oszilloskop ein, das auf eine Eingangsimpedanz von 50R eingestellt ist. Wählen Sie AC-Kopplung. Ausreichende Bandbreite (mindestens 500 MHz). Und unendliche Ausdauer.

Wenn Sie die Messung mit einer hochohmigen Sonde mit einem langen "Schwanz" für Masse durchführen, wird möglicherweise zusätzliches Rauschen aufgenommen, das nicht mit Ihrem Vcc-Rauschen zusammenhängt. Führen Sie im Zweifelsfall immer das Null-Experiment durch: Berühren Sie mit der Sondenspitze den Massepunkt, sodass Spitze und Masse der Sonde denselben Punkt auf der Platine berühren. Wenn Sie keine flache Linie erhalten, wird etwas durch induktive Kopplung in die Schleife aufgenommen, die aus Sonde und Masseleitung gebildet wird.

Also hast du zu viel Lärm? Angenommen, das Datenblatt dieses Geräts fordert 3,3 V +/- 5 % für die Vcc-Versorgung. Das bedeutet, dass Sie +/-165 mV als Grenze haben. Nehmen wir an, Sie haben eine Genauigkeit von 2 % Ihres 3,3-V-DC-Reglers. Und nehmen wir an, Sie haben einen Verteilungsabfall von 0-1% in den Verbindungen zwischen dem Regler und dem Gerät (Kabel, Stecker, Leiterbahnen, Filter usw.). Damit bleiben 2 % für AC-Rauschen/Welligkeit oder +/-66 mV (132 mVpp).

Hallo Rolf, danke für deinen Rat. Ich habe jetzt tatsächlich einen echten USB-Anschluss gebogen und eine weitere Bearbeitung hinzugefügt, die erklärt, dass USB-Speicher jetzt funktionieren. Können Sie mir einen Rat geben, wie ich die Vcc-Welligkeit messen kann? Wir versorgen das Board derzeit mit einem normalen Handy-Ladegerät und USB empfängt auch direkt 5 V (aber die Spannung fällt nie unter 4,9 V, als ich mit dem Bereich nachgesehen habe).
Toll, dass du meinen Rat gebrauchen konntest. Ich habe einen Hinweis hinzugefügt, wie man die Vcc-Welligkeitsmessung durchführt.

Sie könnten versuchen, die Abschirmung des USB-Kabels an die USB-Masse zu heften und sehen, ob dies die Situation verbessert. High-Speed-USB ist empfindlich in Sachen Kabelimpedanz.

danke für den Vorschlag. Ich habe das versucht, aber leider scheint es keine Auswirkungen auf die Signalisierung zu geben.

Hallo Zu Ihrer Frage "Was bedeutet diese Differenzimpedanz?" Die differentielle Impedanz der Leitung ist eigentlich der Widerstand der Leiterbahn bis zum Anschluss, da USB differentiell ist, handelt es sich um eine differentielle Impedanz. Eine Einzelspurimpedanz von beispielsweise D+ beträgt 45 Ohm und die kombinierte Impedanz von D+ & D- beträgt 90 Ohm. Jetzt können Sie dies nicht ganz schnell mit einem einfachen Digitalvoltmeter (DMV) messen, also werden Sie es wahrscheinlich nicht tun können Sie dies überprüfen, es sei denn, Sie haben irgendwo in Ihrer Nähe ein TDR. In Bezug auf Ihr Problem ist es unwahrscheinlich, dass es durch eine Impedanzfehlanpassung verursacht wird. Ein erster Blick auf Ihr Signal scheint nicht sehr schlimm zu sein.

Wenn Sie Fragen zu elektrischen Tests und Problemen haben, können Sie jederzeit einen Blick auf http://www.testusb.com/ werfen . Dies ist eine Website, die ich und einige meiner Kollegen geschrieben haben.

Könntest du vielleicht einen Screenshot von deinem Schaltplan teilen? Hier können wir also genauer hinsehen.

Danke für Ihre Erklärung. Ich habe auch die Bilder zum ursprünglichen Posting hinzugefügt, ich hoffe, sie konnten dir helfen
Kann es sein, dass du die D+ & D- Leitungen vertauscht hast? Wenn ich mir das Schaufelbild ansehe, sehe ich, dass Ihr Signal zum anderen invertiert ist, und Sie sagen, dass Ihr Anschluss um 180 ° gedreht ist. D- ist grün und D+ ist weiß. Wenn Sie sich jetzt das Anschlussdiagramm ansehen, sollte D- in der Nähe von VCC und D + in der Nähe von GND sein, wenn Sie auf Ihre Platinenverbindung schauen, ist dies das Gegenteil. Könnte sein, dass ich hier etwas falsch mache, aber es lohnt sich, es noch einmal zu überprüfen!
Jan, da musst du recht gehabt haben. Ich habe jetzt das gehackte Verlängerungskabel entfernt und einen echten Stecker in einen komischen Winkel gebogen, aber jetzt funktioniert der USB-Speicher in HighSpeed. Ich habe immer noch das gleiche Problem mit dem WLAN-Dongle.