USB-CDC-Verbindung (Kabel ein-/ausstecken)

Ich habe ein Problem mit USB CDC (läuft in einem LPC1788). Wenn ich ein Motherboard mit bereits angeschlossenem USB-Kabel (NXP-Gerät) einschalte, erkennt das Betriebssystem (Linux) das Gerät nicht, aber wenn ich es ausstecke und wieder einstecke, wird es erkannt und funktioniert einwandfrei. Dasselbe passiert, wenn ich mein NXP-Board zurücksetze, das Betriebssystem erkennt das NXP-Gerät nicht, bis ich das Kabel abziehe/anstecke.

Ich habe den Code überprüft, und was passiert ist, dass die Anwendung für immer in der while (!USB_Configuration);Schleife bleibt. Ist eine Konfiguration auf dem USB-Gerät erforderlich, damit das Gerät eine automatische Konfiguration durchführt, wenn es bereits angeschlossen ist?

Ich verwende den Beispielcode aus dem Paket 177x_8x_PDL_110602 von NXP.

Der USB-Konfigurationscode muss möglicherweise überprüft werden. Wenn es in diesem Schritt einfriert, weil der Computer hochfährt, könnte das bedeuten, dass der Computer nicht schnell genug hochfährt, damit das USB-System das Gerät erkennen kann. Es sollte Code für fehlgeschlagene oder abgelaufene Ereignisse geben, z. B. bei Fehlern 1 Minute warten und erneut versuchen oder so. Was das Zurücksetzen des Geräts betrifft, das nicht erkannt wird, werden möglicherweise die USB-Pins nicht umgeschaltet, um auch ein Reset-Gerät nachzuahmen.

Antworten (1)

Der Host beginnt erst dann mit der Aufzählung des USB-Geräts, wenn er weiß, dass es angeschlossen ist. Die Verbindung wird dem Host mitgeteilt, indem ein Pull-up-Widerstand auf der D+-Leitung gesetzt wird (für Geräte mit voller Geschwindigkeit).

Der LPC1788 verfügt über einen USB_CONNECT-Pin, der verwendet wird, um den Pull-up-Widerstand per Software anzuschließen. Siehe Abschnitt 11.6.7 SoftConnect im Dokument UM10360 (LPC17xx Benutzerhandbuch). Aus irgendeinem Grund läuft der Code, der diesen Pin einstellt, in einigen Fällen nicht, nehme ich an. Möglicherweise hängt dies mit der Erfassung der Busspannung beim Start zusammen.

Mein Vorschlag: Messen Sie die Spannung des USB_CONNECT-Pins in Arbeits- und Nichtarbeitssituationen. Wenn sie unterschiedlich sind, schauen Sie, wo im Code dieser Pin gesetzt/ungesetzt ist.