Hinweis zu CDC Geräten unter Linux

Die USB Implementierungen, die ich auf meinen STM32 Seiten vorgestellt habe, implementieren die Character Device Klasse (CDC). Diese werden von Linux ohne spezielle Treiberinstallation unterstützt. Man steckt das USB Kabel einfach ein. Auf dem PC erhält man dann einen virtuellen COM Port, den man wie eine serielle Schnittstelle nutzen kann.

Der erste virtuelle COM Port heißt üblicherweise /dev/ttyACM0. Die zweite heißt /dev/ttyACM1, usw.

Das Laden des Linux Treibers lässt sich am einfachsten mit dem Befehl `sudo dmesg` oder `sudo journalctl -kn 20` kontrollieren.

Ich bin unter Linux auf ein paar überraschende Eigenarten gestoßen, die bei bestimmten Anwendungen stören könnten:

Modem Manager

Der Modem-Manager versucht USB CDC Geräte als Modem zu erkennen, um sie in die Netzwerk-Verwaltung einzubinden. Zu diesem Zweck sendet er Kommandos an das vermeintliche Modem und wertet dessen Antworten aus.

Ich habe den Modem-Manager einfach deinstalliert, da ich ihn ohnehin nicht brauche. Unter Ubuntu/Debian geht das mit dem Befehl `sudo apt remove modemmanager`.

Serielle Konsolen

Der Linux Kernel unterstützt das Einloggen über serielle Konsolen, was auch diese CDC Geräte betrifft. Auf Konsolen sendet der Kernel ein Echo von allen Kommandos zurück, so wie du das auch von der Eingabeaufforderung im Terminalfenster gewohnt bist. Das betrifft auch den Mikrocontroller. Jede Zeile Text wird vom Kernel prompt zurück gesendet.

Um diese Funktion zu deaktivieren, müsste man den Kernel patchen. Der entsprechende Parameter heißt "CONFIG_SERIAL_CONSOLE".

Alternativ kann man das Echo per Befehl deaktivieren: `sudo stty -F /dev/ttyACM0 -echo`

Ausgabe von Textmeldungen

Man kann Textmeldungen vom Mikrocontroller ganz einfach mit dem Befehl `cat /dev/ttyACM0` anzeigen.

Falls sowohl der Mikrocontroller als auch der Kernel Echos zurück senden, entsteht eine Endlosschleife, die zu fehlerhaften Ausgaben führt. Bei normalen Anwendungsprogrammen (wie Cutecom oder Hammer Terminal) tritt das Problem nicht auf, denn der Kernel gibt die Kontrolle über den virtuellen COM Port automatisch an diese Programme ab.

STM32 Anleitungen