Können Sie USB-Protokolle in Linux ändern?

Können Sie USB-Protokolle in Linux ändern?

Ich habe versucht, eine Möglichkeit zu finden, einen Mikrocontroller direkt über USB mit einem Computer kommunizieren zu lassen, ohne eine UART-zu-USB-Brücke zu verwenden, und ich dachte, ich könnte dies tun, indem ich die USB-Protokolle für den USB-Anschluss deaktiviere und den Anschluss als normalen seriellen Anschluss verwende. Mir wurde jedoch gesagt, dass man den USB-Teil nicht ausschalten kann. Ich habe jedoch auch gehört, dass Linux viel mehr Möglichkeiten zur Änderung der internen Abläufe des Betriebssystems bietet. Erlaubt Linux es Ihnen, die USB-Protokolle zu ändern und einen USB-Anschluss in einen normalen seriellen Anschluss umzuwandeln?

Antwort1

USB ist nicht „nur ein serieller Port“ in irgendeiner Weise, die dem alten seriellen Port-Standard RS-232 (auch bekannt als EIA/TIA-232) entsprechen würde. Sie können USB nicht in RS-232 umwandeln, indem Sie „zusätzliche Anforderungen deaktivieren“.

Anders als die klassischen seriellen RS-232-Anschlüsse verwendet USB eine differenzielle Signalgebung: eigentlich ein wenig (sehr wenig) wie RS-485, obwohl die Signalpegel und andere elektrische Eigenschaften sehr unterschiedlich sind.

RS-232 kann Signalspannungen von bis zu +/- 15 Volt verwenden: USB verwendet <0,3 V für logisch niedrig und 2,8 – 3,6 Volt für logisch hoch in den USB-1-Modi; im USB-2-Hochgeschwindigkeitsmodus sind die Spannungen sogar noch geringer.

Selbst wenn TTL-Logikpegel (0..5V) in RS-232 verwendet werden, kann der USB-Sender kein RS-232-Leerzeichensignal (= höherer Spannungszustand) zuverlässig erzeugen. Die Signalpegel stimmen zwischen diesen Standards einfach nicht überein: Das Signal eines USB-Senders wäre für den RS-232-UART-Empfänger zu schwach und das RS-232-Ausgangssignal würde den USB-Empfänger überlasten.

Auch mit einer einfachen Pegelwandlerschaltung lässt sich die Inkompatibilität nicht umgehen: Anstatt nur ein Startbit, dann ein Datenbyte und dann ein oder zwei Stoppbits zu senden, verarbeitet der USB-Transceiver Pakete. Am Anfang des Pakets muss eine Synchronisierungssequenz stehen (8 Bit für USB 1; 32 Bit für USB 2-Hochgeschwindigkeitsübertragungen), dann werden mehrere Bytes übertragen und schließlich das Paketendesignal, das keinem der normalen Zustände „logisch niedrig“ oder „logisch hoch“ entspricht. All dies kann aus Effizienzgründen in Hardware implementiert werden, und da es normalerweise keinen Grund gibt, etwas anders zu machen, gibt es wahrscheinlich keine Vorkehrungen, es zu umgehen, um die tatsächlichen Datenleitungen bei direkter Softwaresteuerung „bit-bangen“ zu lassen.

Vergleichen Sie die Signalisierungsbeispiele vonRS-232UndUSB 1.1in Wikipedia.

Zusammenfassend: Nein, das Problem besteht darin, dass die Unterschiede zwischen USB und RS-232 auf der tatsächlichen Hardwareebene zu groß sind.

verwandte Informationen