Serielle Kommunikation: einen einfachen UART bauen
← Alle Artikel

Serielle Kommunikation: einen einfachen UART bauen

6 Min

Warum überhaupt seriell

Ein 4-Bit- (oder breiteres) Wort über mehrere separate Leitungen zu senden, funktioniert gut auf einer Platine, wird aber über jede echte Distanz teuer und unzuverlässig. Serielle Kommunikation sendet stattdessen dasselbe Wort bitweise über eine einzige Leitung und tauscht Leitungen gegen Zeit — genau wofür ein Schieberegister gebaut ist.

Ein Wort mit Start- und Stopp-Bit umrahmen

Der Empfänger hat keine eigenständige Möglichkeit zu wissen, wann ein neues Wort beginnt, daher umschließt ein UART-Rahmen die Daten mit Markierungen: Eine Ruheleitung liegt auf 1, ein Startbit (eine einzelne 0) kündigt an, dass Daten folgen, die Datenbits werden eins pro Takt hinausgeschoben, und ein Stoppbit (eine 1) markiert das Ende und bringt die Leitung zurück in den Ruhezustand. Ein Flankendetektor, der auf den Übergang von 1 nach 0 auf einer Ruheleitung achtet, ist genau das, was einem Empfänger meldet, dass ein Startbit eingetroffen ist.

RuheStartd0d1d2d3StoppRuhe

Sender und Empfänger

Ein Sender hält das Wort in einem Register und legt seine Bits eins pro Takt auf die Leitung, mit Start- und Stoppbit an beiden Enden. Mit Boolflows Bausteinen gelingt das am elegantesten über einen Zähler, der die Select-Eingänge eines MUX4 durchschaltet: Das REG4 liefert die vier Datenbits, und der Zähler wählt, welches davon in diesem Takt am Ausgang erscheint. Ein Empfänger macht das Umgekehrte: Ein Flankendetektor fängt das Startbit ab, ein kleiner Zähler zählt die richtige Anzahl von Takten ab, während jedes Datenbit über den SI-Eingang eines SHIFT4 (ein Register mit seriellem Eingang und parallelem Ausgang) hineingeschoben wird, und sobald der Zähler fertig ist, wird das zusammengesetzte Wort parallel an Q0–Q3 ausgelesen. Das neueste Bit tritt immer bei Q0 ein, daher landet das zuerst eintreffende Bit in Q3.

Probieren Sie es selbst

Bauen Sie im Schaltungseditor einen Sender aus einem REG4 mit dem gespeicherten Wort (geben Sie ihm zuerst einen eigenen Taktimpuls), einem MUX4, dessen Eingänge I0–I3 vom REG4 kommen, und einem CNT4, dessen Q0 und Q1 die Select-Eingänge S0 und S1 des MUX4 ansteuern. Hängen Sie einen PROBE an den MUX4-Ausgang und starten Sie den CLOCK: Das Wort kommt bitweise heraus, niederwertigstes Bit zuerst. Führen Sie diese Leitung dann auf den SI-Eingang eines SHIFT4 am selben CLOCK — nach vier Takten halten dessen Ausgänge das Wort wieder, nur in umgekehrter Reihenfolge: Bit 0 sitzt in Q3.

Das Serialisierer-Beispiel öffnen →