USB CDC ACM DTR- und RTS-Debugging: SetControlLineState, Serial-Port-Öffnung, Bootloader-Reset und fehlende Daten
So debuggen Sie USB-CDC-ACM-DTR- und RTS-Control-Line-State, SetControlLineState-Requests, Serial-Port-Öffnungsverhalten, Bootloader-Reset-Trigger und fehlende serielle Daten.
USB-CDC-ACM-Geräte wirken wie serielle Ports, aber viele "Serial-Port"-Bugs sind eigentlich USB-Klassen-Control-Bugs. Nutzer suchen nach "CDC ACM DTR RTS", "SetControlLineState USB", "USB serial no data until DTR", "Arduino resets when serial port opens", "USB CDC bootloader reset" und "COM port opens but device does not respond", wenn der Port existiert, das Verhalten aber falsch ist.
Bus Scope hilft, weil DTR und RTS keine magischen App-Flags sind. Der Host sendet klassenspezifische Control-Requests, und die Firmware reagiert auf diese Requests.
Was SetControlLineState tut
CDC ACM nutzt einen Klassen-Request, der üblicherweise SetControlLineState heißt. Er überträgt den Control-Line-State wie:
- DTR: Data Terminal Ready.
- RTS: Request To Send.
Viele Geräte nutzen diese Bits für mehr als klassisches Modem-Verhalten. Die Firmware startet das Streaming vielleicht erst, nachdem DTR asserted wurde, wechselt in den Bootloader, wenn DTR togglet, oder nutzt RTS für Flow-Control-Semantik.
Häufige Symptome
Control-Line-Probleme zeigen sich als:
- COM-Port öffnet, aber es kommen keine Daten.
- Gerät sendet erst, nachdem sich das Terminal-Programm verbindet.
- Firmware resettet, wenn sich ein Serial-Monitor öffnet.
- Bootloader erscheint nach Port-Open/Close.
- Daten stoppen, wenn DTR fällt.
- RTS/CTS-Flow-Control-Option verändert das Verhalten.
- Linux-Tool läuft, Windows-Tool nicht.
- Python-Skript verhält sich anders als Terminal-Emulator.
Diese Phrasen passen zu den Symptomen, die Engineers beim Reproduzieren des Fehlers beschreiben.
Verhalten beim Öffnen des Serial-Ports
Verschiedene Host-Apps setzen DTR und RTS unterschiedlich beim Öffnen eines Ports.
Beispiele:
- Terminal-Emulator asserted DTR sofort.
- Skript öffnet den Port, lässt DTR aber false.
- Firmware-Update-Tool togglet DTR als Reset-Signal.
- Treiber setzt RTS basierend auf Flow-Control-Settings.
- App schließt den Port und droppt DTR unerwartet.
Der Packet-Trace zeigt die tatsächliche Control-Request-Sequenz, statt sich auf App-Annahmen zu verlassen.
Bootloader-Reset-Patterns
Viele Dev-Boards nutzen DTR- oder RTS-Transitions, um in den Bootloader-Modus zu resetten. Das ist praktisch für Firmware-Upload, aber überraschend in Production-Tools.
Fehler-Patterns:
- Gerät resettet jedes Mal, wenn sich ein Log-Viewer öffnet.
- Firmware-Upload funktioniert, aber normale Serial-Verbindung schlägt fehl.
- Gerät erscheint als eine USB-Identität, resettet, re-enumeriert dann als Bootloader.
- Serial-Number oder Product-String ändert sich nach Reset.
- App verliert das Port-Handle.
Bus Scope sollte den Control-Request und die Re-Enumeration-Sequenz erhalten.
Keine Daten bis DTR
Manche Firmware wartet absichtlich auf DTR, bevor sie Daten sendet. Das kann ein Tool defekt wirken lassen, während ein anderes funktioniert.
Evidence:
- Host öffnet Bulk- oder Interrupt-Endpoints.
- Keine IN-Daten werden gesendet.
- Host sendet SetControlLineState mit DTR true.
- Gerät beginnt zu senden.
Das ist kein Kabel-Problem und nicht zwingend ein Treiber-Bug. Es ist Firmware-Policy.
RTS- und Flow-Control-Verwirrung
RTS kann für Hardware-Flow-Control genutzt werden, aber viele USB-CDC-Geräte haben keine echten Modem-Leitungen. Die Firmware legt RTS-State trotzdem gegenüber der App-Logik offen.
Fragen:
- Setzt der Host RTS?
- Braucht das Gerät RTS vor dem Senden?
- Verändert das Aktivieren von Hardware-Flow-Control im Terminal die Request-Bits?
- Ignoriert die Firmware RTS, obwohl die Doku etwas anderes sagt?
- Wird RTS als Bootloader- oder Mode-Select-Signal genutzt?
Packet-Evidence verhindert Rätselraten.
Debug-Checkliste
Nutzen Sie diesen Ablauf:
- Enumeration capturen.
- Den Serial-Port mit der fehlerhaften App öffnen.
- CDC-klassenspezifische Requests aufzeichnen.
- SetControlLineState finden.
- DTR- und RTS-Bits dekodieren.
- Mit einem funktionierenden Terminal-Programm vergleichen.
- Prüfen, ob Daten nach DTR starten.
- Prüfen, ob Reset oder Re-Enumeration auf ein Toggle folgt.
- Windows- und Linux-Tools vergleichen.
- Control-Requests und erste Daten-Pakete zusammen aufbewahren.
Enddiagnose
USB-CDC-ACM-DTR- und RTS-Probleme sind Klassen-Control-Sequencing-Probleme. Der Port kann existieren und Treiber korrekt binden, während die Firmware auf einen Control-Line-State wartet, den die App nie sendet.
Bus Scope zeigt SetControlLineState, DTR, RTS, Serial-Open-Verhalten, Bootloader-Resets und Missing-Data-Ursachen auf USB-Protokoll-Ebene.
<!-- bus-scope-localized-transaction-foundation-v1:start -->USB-Vertragsprüfung für „USB CDC ACM DTR- und RTS-Debugging: SetControlLineState, Serial-Port-Öffnung, Bootloader-Reset und fehlende Daten“
Die direkte Antwort lautet: STALL, Timeout oder Reset erklärt die Ursache nicht allein. Beweisen Sie zuerst, dass der Capture-Provider das richtige Gerät sieht, und lesen Sie danach den Transfervertrag: Request-Typ, Richtung, Recipient, wValue, wIndex, angekündigte und tatsächliche Länge, Status sowie Zustand davor und danach. Verknüpfen Sie bei „USB CDC ACM DTR- und RTS-Debugging: SetControlLineState, Serial-Port-Öffnung, Bootloader-Reset und fehlende Daten“ jede Aussage mit der ersten Transaktion, die von einem bekannten guten Lauf abweicht.
| Grenze | Zu vergleichen | Belastbares Urteil |
|---|---|---|
| Plattform | Provider, Rechte, Root Hub beziehungsweise usbmon/XHC20 | Kommen Records von der richtigen Verbindung? |
| Setup | bmRequestType, bRequest, wValue, wIndex, wLength | Sendet der Host die beabsichtigte Anfrage? |
| Data | Richtung, Länge und gespeicherte Bytes | Entspricht die Payload dem Vertrag? |
| Status | ACK, STALL, Timeout oder Cancellation | Wo endet die Transaktion tatsächlich? |
| Zustand | Configuration, Interface, Alternate Setting, Endpoint Halt | War das Gerät für die Anfrage bereit? |
Starten Sie vor Reset und Enumeration und behalten Sie Descriptoren, SET_CONFIGURATION, SET_INTERFACE und den Befehl vor dem Fehler. Ein enger Endpoint-Filter kann genau den Control Transfer verstecken, der das spätere Symptom erklärt. Führen Sie pro Versuch eine dokumentierte USB-Aktion aus und ändern Sie nur Firmware, Treiber, Port, Kabel, Hostbefehl oder Timing.
Wie sieht eine zitierfähige Antwort aus?
Nennen Sie angekommenen Request, konkrete Setup-Felder, Geräteantwort und vorherigen Zustand; danach folgt ein Test mit genau einer Änderung. Nicht gespeicherte Bytes durch Retention sind kein bewiesener Packet Loss. Zeitliche Nähe zwischen Command und Reset belegt Korrelation, nicht ohne Wiederholung oder Zustandsübergang die Ursache.
Wann ist ein Vergleich gültig?
Halten Sie VID/PID, Firmware, Speed, Topologie, Provider, Filter und Trigger möglichst gleich. Vergleichen Sie semantische USB-Phasen statt Frame-Nummern zwischen usbmon und USBPcap. Notieren Sie Start, Ende, Version, OS, Anschluss und Dateiprüfsumme. Nutzen Sie vor der Übergabe die Bus-Scope-Fehlersuche.
Semrush-Eigentümer bleiben getrennt: free USB analyzer gehört zur Produktseite, best USB protocol analyzer zur Vergleichsseite und USB descriptor viewer zum Descriptor-Guide. Diese Supportseite erhält keine erfundene Suchmenge oder KD.
<!-- bus-scope-localized-transaction-foundation-v1:end --><!-- multilingual-blog-closeout:start -->Direkte Antwort und Abnahmegrenze
Die kurze Antwort zu „USB CDC ACM DTR- und RTS-Debugging: SetControlLineState, Serial-Port-Öffnung, Bootloader-Reset und fehlende Daten“ lautet: So debuggen Sie USB-CDC-ACM-DTR- und RTS-Control-Line-State, SetControlLineState-Requests, Serial-Port-Öffnungsverhalten, Bootloader-Reset-Trigger und fehlende serielle Daten. Behandeln Sie diese Aussage als zu prüfendes Ergebnis und nicht als Versprechen für jede Eingabe, jedes Gerät, jedes Projekt oder jede Umgebung. Ein vollständiges Ergebnis dokumentiert Ausgangszustand, exakte Aktion, sichtbare Ausgabe und die Bedingung, die den Abschluss in Bus Scope belegt.
Evidenzorientiertes Vorgehen
Beginnen Sie mit einem kleinen, wiederholbaren Fall, bevor Sie ein vollständiges Projekt verändern. Protokollieren Sie Anwendungsversion, Betriebssystem, Eingabe- oder Geräteidentität, relevante Einstellungen und erwartetes Ergebnis. Führen Sie eine bewusste Aktion aus, bewahren Sie den ersten unerwarteten Übergang und vergleichen Sie möglichst mit einem bekannten guten Lauf. Mehrere gleichzeitige Änderungen verdecken, welche Bedingung den Fehler erzeugt oder behoben hat.
Prüfpunkt 1: USB CDC ACM DTR- und RTS-Debugging: SetControlLineState, Serial-Port-Öffnung, Bootloader-R
Schließen Sie „USB CDC ACM DTR- und RTS-Debugging: SetControlLineState, Serial-Port-Öffnung, Bootloader-Reset und fehlende Daten“ erst, wenn gespeichertes, exportiertes oder erneut geöffnetes Ergebnis weiterhin dem beobachteten Zustand entspricht. Vorübergehendes UI-Feedback hilft, dauerhafte Evidenz ist aber stärker. Dokumentieren Sie verbleibende Grenzen für die nächste Person.
Prüfpunkt 2: So debuggen Sie USB-CDC-ACM-DTR- und RTS-Control-Line-State, SetControlLineState-Requests,
Trennen Sie bei „So debuggen Sie USB-CDC-ACM-DTR- und RTS-Control-Line-State, SetControlLineState-Requests, Serial-Port-Öffnungsverhalten, Bootloader-Reset-Trigger und“ eine Produktentscheidung von Grenzen des Betriebssystems, der Hardware, Quelldatei, Berechtigung oder Arbeitsweise. Bestätigen Sie zuerst, welche Schicht die Evidenz geliefert hat. So wird ein benachbartes Symptom nicht fälschlich zur bewiesenen Ursache.
Prüfpunkt 3: Was SetControlLineState tut
Schließen Sie „Was SetControlLineState tut“ erst, wenn gespeichertes, exportiertes oder erneut geöffnetes Ergebnis weiterhin dem beobachteten Zustand entspricht. Vorübergehendes UI-Feedback hilft, dauerhafte Evidenz ist aber stärker. Dokumentieren Sie verbleibende Grenzen für die nächste Person.
Prüfpunkt 4: Häufige Symptome
Trennen Sie bei „Häufige Symptome“ eine Produktentscheidung von Grenzen des Betriebssystems, der Hardware, Quelldatei, Berechtigung oder Arbeitsweise. Bestätigen Sie zuerst, welche Schicht die Evidenz geliefert hat. So wird ein benachbartes Symptom nicht fälschlich zur bewiesenen Ursache.
Prüfpunkt 5: Verhalten beim Öffnen des Serial-Ports
Schließen Sie „Verhalten beim Öffnen des Serial-Ports“ erst, wenn gespeichertes, exportiertes oder erneut geöffnetes Ergebnis weiterhin dem beobachteten Zustand entspricht. Vorübergehendes UI-Feedback hilft, dauerhafte Evidenz ist aber stärker. Dokumentieren Sie verbleibende Grenzen für die nächste Person.
Prüfpunkt 6: Bootloader-Reset-Patterns
Trennen Sie bei „Bootloader-Reset-Patterns“ eine Produktentscheidung von Grenzen des Betriebssystems, der Hardware, Quelldatei, Berechtigung oder Arbeitsweise. Bestätigen Sie zuerst, welche Schicht die Evidenz geliefert hat. So wird ein benachbartes Symptom nicht fälschlich zur bewiesenen Ursache.
Prüfpunkt 7: Keine Daten bis DTR
Schließen Sie „Keine Daten bis DTR“ erst, wenn gespeichertes, exportiertes oder erneut geöffnetes Ergebnis weiterhin dem beobachteten Zustand entspricht. Vorübergehendes UI-Feedback hilft, dauerhafte Evidenz ist aber stärker. Dokumentieren Sie verbleibende Grenzen für die nächste Person.
Prüfpunkt 8: RTS- und Flow-Control-Verwirrung
Trennen Sie bei „RTS- und Flow-Control-Verwirrung“ eine Produktentscheidung von Grenzen des Betriebssystems, der Hardware, Quelldatei, Berechtigung oder Arbeitsweise. Bestätigen Sie zuerst, welche Schicht die Evidenz geliefert hat. So wird ein benachbartes Symptom nicht fälschlich zur bewiesenen Ursache.
Prüfpunkt 9: Debug-Checkliste
Schließen Sie „Debug-Checkliste“ erst, wenn gespeichertes, exportiertes oder erneut geöffnetes Ergebnis weiterhin dem beobachteten Zustand entspricht. Vorübergehendes UI-Feedback hilft, dauerhafte Evidenz ist aber stärker. Dokumentieren Sie verbleibende Grenzen für die nächste Person.
Prüfpunkt 10: Enddiagnose
Trennen Sie bei „Enddiagnose“ eine Produktentscheidung von Grenzen des Betriebssystems, der Hardware, Quelldatei, Berechtigung oder Arbeitsweise. Bestätigen Sie zuerst, welche Schicht die Evidenz geliefert hat. So wird ein benachbartes Symptom nicht fälschlich zur bewiesenen Ursache.
Abnahmematrix
| Prüfpunkt | Aufzubewahrender Nachweis | Passkriterium |
|---|---|---|
| USB CDC ACM DTR- und RTS-Debugging: SetControlLineState, Serial-Port-Öffnung, Bootloader-Reset und fehlende Daten | Ausgangszustand, eine Aktion und Ergebniszustand | Eine zweite Person kann das Ergebnis reproduzieren |
| So debuggen Sie USB-CDC-ACM-DTR- und RTS-Control-Line-State, SetControlLineState-Requests, Serial-Port-Öffnungsverhalten | Ausgangszustand, eine Aktion und Ergebniszustand | Eine zweite Person kann das Ergebnis reproduzieren |
| Was SetControlLineState tut | Ausgangszustand, eine Aktion und Ergebniszustand | Eine zweite Person kann das Ergebnis reproduzieren |
| Häufige Symptome | Ausgangszustand, eine Aktion und Ergebniszustand | Eine zweite Person kann das Ergebnis reproduzieren |
| Verhalten beim Öffnen des Serial-Ports | Ausgangszustand, eine Aktion und Ergebniszustand | Eine zweite Person kann das Ergebnis reproduzieren |
| Bootloader-Reset-Patterns | Ausgangszustand, eine Aktion und Ergebniszustand | Eine zweite Person kann das Ergebnis reproduzieren |
Fehlerisolierung, Recovery und Übergabe
Stoppen Sie beim ersten fehlerhaften Übergang. Bewahren Sie Quelle, Projekt, Session oder Capture und erstellen Sie vor destruktiven Änderungen eine Kopie. Ändern Sie pro Experiment nur eine Variable. Ein kompletter erneuter Lauf nach mehreren Änderungen kann anders enden, ohne die Ursache zu erklären.
Unterscheiden Sie fehlende Evidenz von Evidenz für ein Fehlen. Eine leere Ansicht kann auf falsche Eingabe, Scope, Filter, Berechtigung, Gerät, Zeitbereich oder Projektzustand hinweisen. Beweisen Sie Aufnahme oder Import, bevor Sie Decoder, Editor, Bericht oder Export interpretieren.
Öffnen Sie vor der Übergabe das dauerhafte Artefakt erneut und prüfen Sie Anfang, Entscheidungsstelle und Ende. Dokumentieren Sie Version, Plattform, Konfiguration, Erwartung, Beobachtung und kleinste Reproduktion. Entfernen oder schwärzen Sie sensible Daten und prüfen Sie die Berechtigung des Empfängers.
Fragen und Antworten
Wie beginnt man am schnellsten zuverlässig?
Verwenden Sie den kleinsten repräsentativen Fall, notieren Sie das erwartete Ergebnis und ändern Sie nur eine Variable. Beweisen Sie den Grundpfad, bevor Filter, Effekte, Bearbeitungen, Automatisierung oder größere Quellen hinzukommen.
Welche Evidenz sollte gespeichert werden?
Bewahren Sie Eingabeidentität, Version, Plattform, Einstellungen, exakte Aktion, ersten unerwarteten Übergang und Endausgabe. Projekt, Session, Bericht oder Export müssen geschlossen und erneut geöffnet werden.
Wann sollte das Verfahren wiederholt werden?
Wiederholen Sie es nach relevanten Änderungen an Anwendung, Betriebssystem, Treiber, Firmware, Modell, Quelle oder Workflow. Behalten Sie den früher akzeptierten Fall als unveränderte Vergleichsbasis.
Wann ist die Aufgabe übergabefähig?
Wenn eine autorisierte zweite Person Eingabe und Aktion erkennt, dasselbe Ergebnis reproduziert, verbleibende Grenzen versteht und das gespeicherte Artefakt ohne undokumentierten lokalen Zustand öffnen kann.
Verwandte Anleitungen
Diese gleichsprachigen Seiten decken angrenzende Schritte ab, ohne den kanonischen Eigentümer dieses Themas zu verändern:
- USB CDC ACM Serial Debugging: Line Coding, Control Line State und fehlende Daten
- USB-Control-Transfer-STALL: Setup-Pakete, Endpoint Null und fehlgeschlagene Geräte-Requests debuggen
- USB-Control-Transfer-Status-Stage-Debugging: "Zero-Length-Pakete, Endpoint Null, SETUP/DATA/STATUS und Stalls – Vergleich und Praxisleitfad