Der Status der USB-Verbindung wird beim Beenden des Tiefschlafs getrennt

Ich entwickle die USB-Ruhezustandsfunktion auf einer der Plattformen, die den Synopsis DWC3 USB-Controller verwenden. Wenn USB allein aus dem Suspend-Zustand wieder aufgenommen wird, gibt es kein Problem.

Aber ich habe ein Problem, während mein Gerät aus dem Tiefschlaf reaktiviert wird. Beim Fortsetzen des Verbindungsstatus wird 4 (Getrennt) angezeigt, was zu einer erneuten USB-Enumeration führt.

Vom Hardware-Team gibt es eine Frage zu diesem Problem, die ich nicht verstehen kann. Siehe unten,

Im Tiefschlaf beobachteten wir:

  1. eine Mikrorahmen-Spitzensignalamplitude, die viel größer ist als erwartet (fast das Doppelte);
  2. ein unerwünschter Nullpegelversatz vor dem Mikrorahmen.

Dieses Fehlverhalten entspricht der Hypothese einer fehlenden Single-Ended 0 (SE0)-Terminierung an einem der dem Strom zugewandten Enden. Da der Host der Suspend/Resume-Master ist, der korrekt mit jedem anderen USB 2.0-Gerät funktioniert, sollten wir annehmen, dass das Geräteende seine High-Speed ​​(HS) 45 Ohm (nämlich) Abschlussverbindung am Ende der Resume-Phase vermisst.

Gemäß der Spezifikation muss das Gerät die HS-Terminierung innerhalb von 1,33 us seit dem Wiederaufnahmeende (USB D – fallende Flanke) verbinden, sodass dies normalerweise von der USB 2.0 PHY-Hardware durchgeführt wird, die bereit ist, im Voraus zu reagieren, seit der Wiederaufnahmestatus begonnen hat. Wir haben beobachtet, dass das Gerät den Start des Resume-Zustands korrekt erkennt, indem es den Stromverbrauch in wenigen Millisekunden erhöht, was eine sofortige Reaktion zum Verlassen des Tiefschlafzustands anzeigt. Die Wiederaufnahme dauert nicht weniger als 20 ms, was groß genug ist, um USB 2.0 PHY darauf vorzubereiten, auf die Erkennung des Wiederaufnahmeendes und die relevante SE0-Beendigung zu antworten, die von der HS-Kommunikationsverbindung benötigt werden.

Wenn das Gerät SE0 ausfällt, dann bewirkt die vom Host überwachte erhöhte Signalamplitude, die beim ersten Mikroframe auftritt, dass der Host in einen High-Speed-Disconnect-Zustand eintritt, gefolgt von einem USB-Reset, einer FS-zu-HS-Aushandlung, einer Neuaufzählung usw.

Könnte jemand erklären, was die obige Abfrage ist?

Ich sehe, dass Ihnen empfohlen wurde, die Frage hier zu stellen, als Sie dieselbe Frage auf Stack Overflow gepostet haben . In diesem Fall sollten Sie die Frage zu Stack Overflow löschen, da es im Allgemeinen nicht ratsam ist, doppelte Fragen zu verschiedenen Teilen von Stack Exchange/Stack Overflow zu haben, da dies den Aufwand verdoppeln und somit Zeit verschwenden kann.
Was meinst du mit "Tiefschlaf" im Vergleich zu "USB-Suspend"? Das USB-Framework definiert kein Konzept für einen „tiefen“ oder „leichten“ Schlaf. Wenn Sie meinen, dass Ihre MCU den USB-Suspend-Zustand nicht ordnungsgemäß beenden kann, wenn sie sich im "MCU-Tiefschlafzustand" befindet, liegt Ihr Problem in der Energieverwaltung Ihrer MCU.

Antworten (1)

wir sollten annehmen, dass das Geräteende seine High-Speed ​​(HS) 45 Ohm (nämlich) Abschlussverbindung am Ende der Resume-Phase verfehlt.

Aus der Beschreibung des „Hardware-Teams“ geht hervor, dass Ihr Gerät die HS-Terminierung nach dem Ende von RESUME nicht wiederherstellen konnte, was zu einer HS-Trennung führt (die Mikroframe-Amplitude verdoppelt sich aufgrund fehlender Terminierung in Ihrem Gerätedesign).

Bitte beachten Sie, dass ein wichtiger Teil des RESUME-Protokolls in der Beschreibung fehlt: Beim Host-initiierten RESUME (K-Zustand) muss das Gerät den GLEICHEN Leitungszustand (K-Zustand) als Erkennungssignal zurücksenden. Der Host erkennt diesen bidirektional gesteuerten Zustand, wenn das hostseitige 20-ms-Timeout abläuft, aber der Bus bleibt im K-Zustand. Dann wartet der Host darauf, dass das Gerät den K-Zustand beendet, und fährt mit der Wiederaufnahme des HS-Leerlaufverkehrs (SOFs) fort.

Es liegt also in der Verantwortung des Geräts, die RESUME-Bedingung zu beenden und die HS-Beendigung rechtzeitig (1,33 us) geltend zu machen. Es sieht also so aus, als ob die gesamte Protokollantwort Ihres Geräts fehlt. Ihr Gerät empfängt das RESUME korrekt, reagiert jedoch nicht richtig. Einige Hooks (vielleicht zum Power-Management-Teil der Gerätesoftware) fehlen.

Vielen Dank für Ihre Antwort. Ich werde intern über Ihre Antwort diskutieren.
Durch den Vergleich von Registern sehe ich im Erfolgsszenario, dass die Verbindungsgeschwindigkeit als HS erkannt wird, während im Fehlerfall die Geschwindigkeitserkennung FS ist. Hat es etwas mit der obigen Abfrage zu tun? Wenn ja, welches Modul ist für die HS/FS-Geschwindigkeitserkennung zuständig?
@ user3267021, das Vergleichen von Registern nach dem Fehler sagt Ihnen nicht viel. Der Prozess ist dynamisch, alles auf Hardwareebene. Sie müssen lange (300-400 ms) Oszilloskopspuren von D+ und D- mit einer tiefen Sub-Mikrosekunden-Auflösung erfassen, um einen korrekten RESUME-Ausgang sicherzustellen. Ich wiederhole, der Vorgang des Verlassens des SUSPEND-Zustands wird in der "Abfrage" falsch beschrieben/verstanden - es fehlt der ordnungsgemäße Abschluss des RESUME-Protokolls. Wenn Sie jedoch eine kurze Erklärung zur Funktionsweise der FS/HS-Erkennung wünschen, siehe superuser.com/a/1130446/620011