Ansichten eines Informatikers

Über Informatiker und serielle Schnittstellen

Hadmut
3.9.2020 22:10

Ein bedenklicher Leserbrief.

Ich hatte vorhin zur 22-Euro-ESP32-Smartwatch erwähnt, dass die USB-Schnittstelle als /dev/ttyUSB0 auftaucht.

Damit wollte ich nicht sagen, dass ich nicht wüsste, was das ist. Das war ein Hinweis für Leute vom Fach.

Der Punkt ist nämlich der: So ziemlich alle (aber eben nicht alle) Entwicklungs-, Experimentier- und Bastelboards mit Arduino, ESP8266 und ESP32 haben zwar einen USB-Anschluss, aber keinen echten.

Es gibt zwar Mikrocontroller, die tatsächlich einen USB-Port eingebaut haben und sich dann gegenüber einem PC auch gern als Tastatur, Maus, Laufwerk oder sowas ausgeben können, diese drei Prozessoren gehören aber nicht dazu. Die haben (neben anderen, sehr unterschiedlichen Varianten serieller Schnittstellen, was jetzt auch auch keine wahnsinnig tolle Aussage ist, denn der USB ist ja auch eine serielle Schnittstelle) einen sogenannten UART,einen universal asynchronous receiver transmitter.

Für die alten Säcke unter den Leser: Wenn Ihr die RS232C kennt, und daran einfach alles weglasst, was RS323C ist, bleibt ein UART übrig. Also keine Spannungspegel, keine Stecker, keine Steuerleitungen, nur eine Lese- und eine Schreibleitung, die Low nach unten zieht (was man früher so TTL-Pegel nannte, aber jetzt eben auch mit 3,3 Volt und ähnlichem), nur ganz kurzen Käbelchen, dafür aber mit höheren Geschwindigkeiten. 9600 gibt es zwar manchmal auch noch, aber gängig sind 115200 oder schneller. Wer denkt, die serielle Schnittstelle sei mit RS232C gestorben, der irrt. Ziemlich viele Geräte haben wegen der vielen heute verbauten Mikrocontroller noch solche seriellen Schnittstellen. Neulich habe ich mal einer Steckdose damit eine neue Firmware verpasst.

Das Problem daran: Ziemliches Kabelgefummels, und wenn man nicht gerade einen Raspberry verwendet, hat der PC sowas auch nicht.

Deshalb gibt es kleine Adapterchips, die auf der einen Seite USB sprechen (für an den PC) und auf der anderen Seite UART, also seriell mit einfachen Pegeln, damit man vom normalen PC aus mit den Dingern sprechen kann. Sieht vom PC dann tatsächlich aus, als hätte man so ein Uralt-Modem per RS232C angeschlossen, weil er ja nur den Seriel-USB-Chip und seinen Treiber sieht.

Die bekommt man für Kleingeld von verschiedenen Herstellern als kleine Platinchen oder auch als Kabel mit Stecker. Manchmal umschaltbar oder umlötbar zwischne dem alten 5V und dem neueren 3,3V-Pegel.

Wenn man also so einen Mikrocontroller programmieren will, muss man eigentlich so ein Ding anschließen und die kleinen, lockeren Steckerchen alle richtig stecken, damit es funktioniert. Und zum Programmieren eine Taste drücken, damit der Controller nach dem Reset weiß, ob man normal kommunizieren oder ein neues Programm hochladen will.

Weil das aber etwas schwierig, umständlich und fehleranfällig ist, ist man dazu übergegangen, solche Chips gleich mit auf das Entwicklerboard zu löten, damit das alles sauber aufgeräumt ist und nicht rausrutschen kann und zum Programmeinspielen die Datenleitung D0 auch gleich auf Low gezogen wird, und man nicht extra die Taste drücken muss. Und kann bei kleinen Entwlickerboards das Ding über den USB gleich mit Strom versorgen.

Aber, ach. Kleiner Schlenker. Das war alles kein Problem, als ein Arduino noch so 20 bis 30 Euro gekostet hat. Dann gab es die Dinger aber aus China als Nachbau für ab einem Euro (funktionieren prima), und da konnten sie den ursprünglich im Arduino eingesetzten Chip (UART-USB) nicht mehr nehmen, weil der Chip mit einem Preis von einigen Euro allein schon viel teurer als der ganze Rest zusammen war. Deshalb ist man zuerst auf eine chinesische Fälschung des Chips umgestiegen. Die haben im Prinzip den Chip funktionsidentisch nachgebaut, aber für Pfennige. Allerdings keinen Windows-Treiber dafür geschrieben, weil man ja den vom Original-Chip verwenden könnte. Das nun wieder ging dem Originalhersteller auf den Sack, und der hat seine Treiber so modifiziert, dass die die Chip an irgendwas erkannten und mit dem gefälschten Chip nicht funktionierte. Unter Linux alles gar kein Problem, läuft alles, aber unter Windows eben nicht.

Darauf meinten die Chinesen, man könnte ihnen den Buckel runterrutschen, und haben angefangen, die Dinger nicht mehr ganz identisch mit Arduino zu bauen, sondern einfach ganz andere UART-USB-Chips draufzupappen. CH340 zum Beispiel. Unter Linux wieder kein Problem, Linux kann von Haus aus mit allen denen umgehen, nur für Windows braucht man wieder extra-Treiber, die man von irgendwoher installieren muss.

Jetzt kommt aber der Punkt: Solche Chips auf der Platine brauchen

  • Platz, irgendwo müssen der Chip und die USB-Buchse samt Beschaltung ja hin – winzig ist relativ
  • Strom, und das ist bei Akku-Betrieb sehr bitter, vor allem, weil das Ding auch dann deftig Strom verbraucht, wenn man ihn gar nicht benutzt. Auch wenn’s eigentlich ganz wenig ist, kann das bei einer ansonsten sehr stromsparenden Schaltung, die mit einer Batterieladung lange laufen muss, sehr weh tun.
  • und Geld kosten sie auch was, auch wenn es nur noch Pfennige sind.

Deshalb sind diese Chips in Schaltungen oft nicht mit drauf, die sehr klein sind, oder die mit wenig Strom (Batterie/Akku) auskommen müssen, oder bei denen man da gar nicht so dran soll oder auch gar nicht dran darf, weil die ganze Schaltung auf 230-Volt-Pegel liegen könnte (Schaltsteckdosen usw.), oder man sie eben gar nicht selbst programmieren und die Finger von der Schnittstelle lassen soll.

Deshalb ist nicht auf jedem Board mit solchen Prozessoren auch so ein Chip drauf, sondern manchmal muss man den Adapterchip eben über externe Platinchen oder Kabel anschließen.

Auch eine USB-Schnittstelle heißt nicht unbedingt, dass so ein Kommunikationschip mit drauf ist. Manchmal sind die nur zur Stromversorgung oder zum Akku-Laden drauf.

Nun hatte ich vorhin erwähnt, dass die Uhr eben mit /dev/ttyUSB0 auftaucht. (Es ist ein CP2104.) Was ich für erstaunlich hielt, weil man in einem solchen Gerät normalerweise aus besagten Gründen diese Chips weglässt und in einem externen Kabel einbaut, damit man eben den Chip nicht mitschleppen muss und der unterwegs keinen Strom verbraucht.

Was aber halt auch zeigt, dass das Ding vorrangig eine Entwickler- und keine Gebrauchsuhr ist.

Darum ging’s mir.

Drauf schrieb mir ein Leser und erklärt mir, was eine serielle Schnittstelle ist, was man damit machen kann, was /dev/ttyUSB0 bedeutet und so.

Ich so: Ja … ähm … Du, hö’ma, ich bin Informatiker, arbeite seit 40 Jahren mit seriellen Schnittstellen und habe hier ein ganzes Regal von kleinen Boards mit solchen Schnittstellen und Chips (und eben auch ein paar ohne), und über zwei Dutzend von den Adaptern. Ich weiß, was eine serielle Schnittstelle ist und was man damit macht.

Leser: T’schuldigung und tut mir leid und konnt’ ich ja nicht wissen und:

Ich kenne Informatiker die nur noch in den Hochsprachen rumturnen und noch nie ein Mikrocontroller ohne OS gecodet haben. Darum mein Kommentar.

Ist das nicht entsetzlich?

In meinem Studium war das noch Teil der Ausbildung (ich glaube aber, auch damals schon nicht mehr Pflichtfach, wenn ich mich jetzt richtig erinnere). Die Übung war etwas bekloppt, aber erfüllte den Lehrzweck: Wir mussten einem 8051 beibringen, gleichzeitig, also multitaskingartig eine Stoppuhr mit Anzeige und Tasten abzugeben und die Ampeln an einer Verkehrskreuzung mit Fußgängerampel (Mini-Version mit LED-Ampeln in Spielzeugeisenbahntechnik) zu steuern. Zwei unterschiedliche Aufgaben ineinander verzahnen.

Warum schenkt man heute kleinen Kindern zum Programmieren-Lernen solche Calliope-Rechnerchen, lässt aber „Informatiker” ohne solches Wissen in die freie Wildbahn?